gon*_*ier 5 wolfram-mathematica
我需要在[0,1]上找到函数f(t)= int g(t,x)dx的最小值.我在mathematica中所做的如下:
f[t_] = NIntegrate[g[t,x],{x,-1,1}]
FindMinimum[f[t],{t,t0}]
Run Code Online (Sandbox Code Playgroud)
然而,mathematica在第一次尝试时停止,因为NIntegrate不适用于符号t.它需要一个特定的值来评估.虽然Plot [f [t],{t,0,1}]完全有效,但FindMinimum在初始点停止.
我不能用Integrate替换NIntegrate,因为函数g有点复杂,如果你输入Integrate,mathematica就会继续运行......
有办法解决它吗?谢谢!
And*_*lan 11
试试这个:
In[58]:= g[t_, x_] := t^3 - t + x^2
In[59]:= f[t_?NumericQ] := NIntegrate[g[t, x], {x, -1, 1}]
In[60]:= FindMinimum[f[t], {t, 1}]
Out[60]= {-0.103134, {t -> 0.57735}}
In[61]:= Plot[f[t], {t, 0, 1}]
Run Code Online (Sandbox Code Playgroud)
我对您的代码进行的两项相关更改:
定义f :=而不是with =.当f的用户提供了参数的值时,这有效地给出了f"later"的定义.请参阅SetDelayed.
用t_?NumericQ而不是定义f 来定义t_.这说,t可以是任何数字(Pi,7,0等).但不是任何非数字(t,x,"foo"等).