笨笨 发表于 2025-5-6 16:33:52

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

wayne 发表于 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}\)这种形式求得的级数只能保证与原级数前几项高度相似,不能保证函数簇整体误差最小。



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

wayne 发表于 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
(出处: 数学研发论坛)

笨笨 发表于 2025-5-7 00:03:28

@Ickiverar

笨笨 发表于 2025-5-7 12:24:34

wayne 发表于 2025-5-6 21:53
我是觉得你的题目没出好,有点莫名其妙.所以擅自作主了.
既然你这么坚持,那请你严格定义一下 你新造的词汇, ...

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

笨笨 发表于 2025-5-21 18:56:40

本帖最后由 笨笨 于 2025-5-21 19:17 编辑

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

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

检验误差:
NumberForm[
N[NMaximize[{Abs[
   Hypergeometric2F1[-(1/2), -(1/2),
       1, ((1 - b)/(
      1 + b))^2] - (1 + (3 ((1 - b)/(1 + b))^2)/(
         10 + Sqrt[
          4 - 3 ((1 - b)/(1 + b))^2])) (1 + (22/(7 \) - 1) (1 -
            b)^46.42947629474779` )], 0 < b < 1}, b]], 10]



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

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

(*预计算常数项优化计算效率*)
constantFactor = N;(* \-0.31831*)
right[x_?NumericQ,
m_?NumericQ] := (1 + (3*((1 - x)/(1 + x))^2)/(10 +
       Sqrt))*(1 +
    constantFactor*(1 - x)^m);

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

(*输出结果*)
Print["最优参数 m = ", mOpt, ",最小均方误差 = ", minError]
(*绘制函数对比*)optM = mOpt /. result[];
Plot[{left, right}, {x, 0, 1},
PlotLegends -> {"Hypergeometric", "Approximation"},
PlotStyle -> {Blue, Red}, Frame -> True,
FrameLabel -> {"x", "Function Value"},
PlotLabel -> "Optimal m = " <> ToString]

笨笨 发表于 2025-5-21 19:03:29

本帖最后由 笨笨 于 2025-5-21 19:06 编辑

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

Manipulate[
Plot[{Hypergeometric2F1[-(1/2), -(1/2),
   1, ((1 - b)/(
      1 + b))^2] - (1 + (3 ((1 - b)/(1 + b))^2)/(
       10 + Sqrt[
      4 - 3 ((1 - b)/(1 + b))^2])) (1 + (22/(7 \) - 1) ((1 - b)/
         1)^m), -0.00002, 0.00002}, {b, 0, 1},
PlotRange -> {-0.00002, 0.00002},
Epilog -> {Dashed, Line[{{1, 0}, {1, -0.00002}, {1, 0.00002}}]},
PlotLegends -> "Expressions"], {m, 0, 50}]

笨笨 发表于 2025-5-21 19:24:16

不知道8楼的代码怎么优化才能得到:m=46.401
页: [1]
查看完整版本: 用Mathematica编程求出m使得误差函数值达到最小