我有两个近似函数,我想找到它们的图形之间的最大值(误差),看看它们接近多少。我用了 : FindMaximum [Abs [f [x] - p [x]],x],但Mathematica 8给了我输出: {2.75612 * 10 ^ 104,{x - > 2.75612 * 10 ^ 104}}
这是什么意思?太大了! 你可以建议我一个更好的方法吗?由于
答案 0 :(得分:3)
很难说不知道你的功能,但我猜它找到的最大值的位置远远超出你想要的域名。您可以使用其他表单或FindMaximum
获得更多成功,即
FindMaximum[Abs[f[x] - p[x]],{x,x0,xmin,xmax}]
其中x0
是您的初始猜测(可以是感兴趣区域内的任何点),xmin,xmax
是您感兴趣的区域的终点。
答案 1 :(得分:2)
原因可能是列昂尼德所说的。要查看FindMaximum实时执行的操作,您可以执行
f[x_] := Sin[x];
p[x_] := x^2;
lst = {};
Monitor[
FindMaximum[Abs[f[x] - p[x]], x,
EvaluationMonitor :> (AppendTo[lst, x]; Pause[.01])
], ListPlot[lst, PlotRange -> Full]
]
结果图上的垂直轴是当前正在查看的FindMaximum的x坐标。完成FindMaximum后,绘图消失;列表存储在lst中,因此您可以例如ListPlot它。
您也可以使用{Abs[f[x] - p[x]], -1 <= x <= 1}
作为参数进行尝试,如Spencer Nelson建议的那样,看看搜索是如何进行的。
答案 2 :(得分:1)
当x的输入值非常大时,这可能是由两个函数之一中的某种溢出引起的。您应该将域名限制为[-1,1]:
FindMaximum[{Abs[f[x] - p[x]], -1 <= x <= 1}, x]
答案 3 :(得分:0)
如果您想在{a,b}区间内搜索全局最大值,我建议NMaximize:
NMaximize[{Abs[f[x] - p[x]], a <= x <= b}, x]
。
请注意,FindMaximum
会搜索任何本地最大值,只有当您知道对于您的特定函数时,本地最大值也将是全局最大值。
您可能希望使用目标函数Abs[f[x] - p[x]]
,而不是目标函数(f[x] - p[x])^2
。这将使目标函数平滑(如果f[x]
和p[x]
平滑),这有助于提高某些数值优化方法的效率。