找回密码
 欢迎注册
查看: 288|回复: 11

[求助] 用Mathematica编程求出m使得误差函数值达到最小

[复制链接]
发表于 2025-5-6 16:33:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
搜狗截图20250506163123.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-5-6 18:49:53 | 显示全部楼层
因为$\frac{\, _2F_1\left(-\frac{1}{2},-\frac{1}{2};1;\lambda ^2\right)}{\frac{3 \lambda ^2}{\sqrt{4-3 \lambda ^2}+10}+1}-1 = \frac{3 \lambda ^{10}}{131072}+\frac{67 \lambda ^{12}}{2097152}+O\left(\lambda ^{13}\right)$

而$\left(1-\frac{1-\lambda }{\lambda +1}\right)^{10} = 1024 \lambda ^{10}-10240 \lambda ^{11}+56320 \lambda ^{12}+O\left(\lambda ^{13}\right)$

所以里面的$\frac{22}{7 \pi }-1$应该换成$\frac{3}{134217728}$, 同时$m=10$
最终$\, _2F_1\left(-\frac{1}{2},-\frac{1}{2};1;\lambda ^2\right)-\left(\frac{3 \lambda ^2}{\sqrt{4-3 \lambda ^2}+10}+1\right) \left(\frac{3 \left(1-\frac{1-\lambda }{\lambda +1}\right)^{10}}{134217728}+1\right) =\frac{15 \lambda ^{11}}{65536}-\frac{2573 \lambda ^{12}}{2097152}+O\left(\lambda ^{13}\right)$
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-6 20:48:44 | 显示全部楼层
本帖最后由 笨笨 于 2025-5-6 21:03 编辑
wayne 发表于 2025-5-6 18:49
因为$\frac{\, _2F_1\left(-\frac{1}{2},-\frac{1}{2};1;\lambda ^2\right)}{\frac{3 \lambda ^2}{\sqrt{4- ...

前辈你好,你的解答不符合题意。

首先把\(\frac{22}{7 \pi }-1\)换成\(\frac{3}{134217728}\)且写成\(\left(1-\frac{1-\lambda }{\lambda +1}\right)^{10}\)这种形式求得的级数只能保证与原级数前几项高度相似,不能保证函数簇整体误差最小。

QQ20250506-204409.jpg

其次满足形如以下条件下的m值在误差函数簇中误差最小的那个。

0.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-5-6 21:53:43 | 显示全部楼层
我是觉得你的题目没出好,有点莫名其妙.所以擅自作主了.
既然你这么坚持,那请你严格定义一下 你新造的词汇,误差函数簇 的数学意义.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-6 21:58:23 | 显示全部楼层
本帖最后由 笨笨 于 2025-5-6 22:00 编辑
wayne 发表于 2025-5-6 21:53
我是觉得你的题目没出好,有点莫名其妙.所以擅自作主了.
既然你这么坚持,那请你严格定义一下 你新造的词汇, ...


前辈你好,由于我没表达好且能力有限。主贴大致类似于这个帖子:用Mathematica编程求出最大误差函数值时如:10⁻⁸下的(x,a,b,c,d)
https://bbs.emath.ac.cn/forum.php?mod=viewthread&tid=18985
(出处: 数学研发论坛)

点评

看大致类似于链接的贴子,可看看链接帖子的18、19楼编程代码  发表于 2025-5-6 22:08
不是你表达不好. 是你没想好 你要问什么  发表于 2025-5-6 22:01
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-7 00:03:28 | 显示全部楼层
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-7 12:24:34 | 显示全部楼层
wayne 发表于 2025-5-6 21:53
我是觉得你的题目没出好,有点莫名其妙.所以擅自作主了.
既然你这么坚持,那请你严格定义一下 你新造的词汇, ...

大致就是这个意思,前辈请看下图

无标题.gif
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-21 18:56:40 | 显示全部楼层
本帖最后由 笨笨 于 2025-5-21 19:17 编辑

折腾了2天未果!下面的程序deepseek算的结果很接近主贴所求m值

最优参数 m = 46.4295,误差=0.00001868207537802924,b=0.05376700730325596


检验误差:
  1. NumberForm[
  2. N[NMaximize[{Abs[
  3.      Hypergeometric2F1[-(1/2), -(1/2),
  4.        1, ((1 - b)/(
  5.         1 + b))^2] - (1 + (3 ((1 - b)/(1 + b))^2)/(
  6.          10 + Sqrt[
  7.           4 - 3 ((1 - b)/(1 + b))^2])) (1 + (22/(7 \[Pi]) - 1) (1 -
  8.             b)^  46.42947629474779` )], 0 < b < 1}, b]], 10]
复制代码

0.jpg


求出最优m值
  1. (*左边 Hypergeometric 函数*)
  2. left[x_] := Hypergeometric2F1[-1/2, -1/2, 1, ((1 - x)/(1 + x))^2];

  3. (*右边修正后的表达式*)
  4. right[x_,
  5.    m_] := (1 + (3*((1 - x)/(1 + x))^2)/(10 +
  6.         Sqrt[4 - 3*((1 - x)/(1 + x))^2]))*(1 + (22/(7*Pi) -
  7.         1)*(1 - x)^m);

  8. (*预计算常数项优化计算效率*)
  9. constantFactor = N[22/(7*Pi) - 1];(* \[TildeTilde]-0.31831*)
  10. right[x_?NumericQ,
  11.   m_?NumericQ] := (1 + (3*((1 - x)/(1 + x))^2)/(10 +
  12.        Sqrt[4 - 3*((1 - x)/(1 + x))^2]))*(1 +
  13.     constantFactor*(1 - x)^m);

  14. (*定义均方误差,积分区间设为[0,1]*)
  15. mse[m_?NumericQ] :=
  16.   NIntegrate[(left[x] - right[x, m])^2, {x, 0, 1},
  17.    Method -> "GlobalAdaptive", MaxRecursion -> 20];
  18. (*全局优化,限制 m>0*)
  19. result = NMinimize[{mse[m], m > 0}, m, Method -> "SimulatedAnnealing"];
  20. {minError, {mOpt -> mValue}} = result;

  21. (*输出结果*)
  22. Print["最优参数 m = ", mOpt, ",最小均方误差 = ", minError]
  23. (*绘制函数对比*)optM = mOpt /. result[[2]];
  24. Plot[{left[x], right[x, optM]}, {x, 0, 1},
  25. PlotLegends -> {"Hypergeometric", "Approximation"},
  26. PlotStyle -> {Blue, Red}, Frame -> True,
  27. FrameLabel -> {"x", "Function Value"},
  28. PlotLabel -> "Optimal m = " <> ToString[optM]]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-21 19:03:29 | 显示全部楼层
本帖最后由 笨笨 于 2025-5-21 19:06 编辑

固定椭圆长半轴a=1,用肉眼观察法可知主贴所求的m值在46.401附近使误差达到最小

  1. Manipulate[
  2. Plot[{Hypergeometric2F1[-(1/2), -(1/2),
  3.      1, ((1 - b)/(
  4.       1 + b))^2] - (1 + (3 ((1 - b)/(1 + b))^2)/(
  5.        10 + Sqrt[
  6.         4 - 3 ((1 - b)/(1 + b))^2])) (1 + (22/(7 \[Pi]) - 1) ((1 - b)/
  7.          1)^m), -0.00002, 0.00002}, {b, 0, 1},
  8.   PlotRange -> {-0.00002, 0.00002},
  9.   Epilog -> {Dashed, Line[{{1, 0}, {1, -0.00002}, {1, 0.00002}}]},
  10.   PlotLegends -> "Expressions"], {m, 0, 50}]
复制代码

QQ20250521-190313.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-5-21 19:24:16 | 显示全部楼层
不知道8楼的代码怎么优化才能得到:m=46.401
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2025-6-19 22:26 , Processed in 0.053370 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表