回 帖 发 新 帖 刷新版面

主题:新手求救,先谢过

请教解常微分方程组时odefun怎样用函数句柄@.就是:比如要求dy/dt=sin(t),
现在如果写成:
f=@sin
ode23('f',[0,1],0)
或是ode23(@sin,[0,1],0)都不行。
试了一下,只有把被求的微分方程写成独立的function形式,但我不想这么写。

对不起,我知道这问题比较弱质,但初学者实在没办法。

其实遇到的问题是这样的
我要在一个迭代求极值函数
function a=fminsearch(.(初值).)
在这个函数里面要求出一个常微分方程组,而方程组里面需要的系数又是根据上面这个函数所给出的初值迭代的。所以如果常微分方程组函数分开写在外面,就不能根据迭代新参数值求新的常微分方程解,所以最好要写在函数里面,比如@形式。
是否要什么局部函数?但不太会。
请教高手,拜谢。

回复列表 (共2个回复)

沙发

ode23,ode45等数值求解微分方程函数对带求解的微分方程都需要一个时间变量t,即使你的方程里没涉及到它也要给个符号占位,你试下这样:
f=inline('sin(x)','t','x'); 't是用来占位的
[t x]=ode45(f,[0,1],0);
运行结果是:
x = [0 0 0 ……]'

和现实x'=sin(x)的解符合

板凳

其实只要考虑了微分方程也可以这样定义
f=@(t,x)sin(x)
更方便

我来回复

您尚未登录,请登录后再回复。点此登录或注册