Mathematica8:在[-1,1]上找到两个函数的最大差值

时间:2011-01-27 18:42:25

标签: graph wolfram-mathematica max

我有两个近似函数,我想找到它们的图形之间的最大值(误差),看看它们接近多少。我用了 : FindMaximum [Abs [f [x] - p [x]],x],但Mathematica 8给了我输出: {2.75612 * 10 ^ 104,{x - > 2.75612 * 10 ^ 104}}

这是什么意思?太大了!

你可以建议我一个更好的方法吗?

由于

4 个答案:

答案 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]平滑),这有助于提高某些数值优化方法的效率。