24小时热门版块排行榜    

查看: 2164  |  回复: 4

gainly

木虫 (职业作家)


[交流] 【求助完毕】用ode逆向求解微分方程问题

在Matlab中用ode45函数求解微分方程,已知终端时刻的值y(tf),要反向积分求初值y(0),请问高手应该注意什么?方程中含有随时间变化的参数。
例如:
tspan=[5 0];        %%%%%  (时间需  反向)
dy1dt=-f*y(1)+g*y(2);    %%%%%%% f  和g都是随时间变化的函数
dy2dt=f^2*y(1);       %%%  f 和 g 可以 数值  求得,需要实时 代入微分方程中求解

[ Last edited by cenwanglai on 2011-4-3 at 11:31 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gainly

木虫 (职业作家)


在里面不是高手如云吗?就急啊!!

用ode(例如 ode45 ; ode113 )求解微分方程,如果已知终端条件,进行反向积分时,除了把积分区间设置之外,还需要注意什么。今天编写了一个程序怎么结果都会出错,请高手指点。

因为中间参数随时间变化,不知道问题出在哪儿:



ft = linspace(5,0,25);          % Generate t for f
f = ft.^2 - ft - 3;        % Generate f(t)
gt = linspace(6,1,25); % Generate t for g
g = 3*sin(gt-0.25); % Generate g(t)
Tspan = [5 1]; % Solve from t=5  to t=1 % 计算范围修改
IC = -0.1518; % y(t=5) --终端y值
[T Y] = ode45(@(t,y) myode(t,y,ft,f,gt,g),Tspan,IC); % Solve ODE
figure(1)
plot(T,Y)


---------------------------------------------

function dydt = myode(t,y,ft,f,gt,g)
%%%%%  中间参数变化
f =interp1(ft,f,t);         % Interpolate the data set (ft,f) at time t    -----------这儿需要修改吗??如何变?
g =interp1(gt,g,t);         % Interpolate the data set (gt,g) at time t-----------这儿需要修改吗??如何变?

dydt = -f.*y + g;               % Evalute ODE at time t----------原微分方程 应该无需改动吧??

%%%%%%%%%%
运算结果错误,量级都差太远,请高手快点救急啊!!


----------------------------------------------------------------
又试验了一下,貌似如果是常系数、或者方程简单就容易求解,应该改变积分区间和初值就没问题。
只是现在必选考虑变参数情况,请高手帮忙啊……
分析上面的主要问题出在哪儿??
2楼2010-11-19 16:31:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lijinfeng042

木虫 (小有名气)


gainly(金币+5):谢谢关注,请指点 2010-11-20 11:20:28
引用回帖:
Originally posted by gainly at 2010-11-19 16:31:45:
用ode(例如 ode45 ; ode113 )求解微分方程,如果已知终端条件,进行反向积分时,除了把积分区间设置之外,还需要注意什么。今天编写了一个程序怎么结果都会出错,请高手指点。

因为中间参数随时间变化,不知 ...

呃 还是直接给出方程吧 这样看比较费事啊 还是看不太明白
三面等待中~
3楼2010-11-19 23:18:07
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gainly

木虫 (职业作家)


dydt = -f.*y + g;     
这就是原微分方程;需要积分出t=[5, 1]的结果
其中f,g是随时间变化的参数:f = ft.^2 - ft - 3;    g = 3*sin(gt-0.25);
这只是MAtlab Help中的算例。
本来已知y(t=1)=1;可以得到:y(t=5)= -0.1518;
我现在是想已知y(t=5)= -0.1518;求未知的(t=1)=?
引用回帖:
Originally posted by lijinfeng042 at 2010-11-19 23:18:07:

呃 还是直接给出方程吧 这样看比较费事啊 还是看不太明白
三面等待中~

[ Last edited by gainly on 2010-11-20 at 11:26 ]
4楼2010-11-20 11:24:25
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gainly

木虫 (职业作家)


在微分方程数值求解过程中随时改变其中的参数,这个问题有人做过吧?
5楼2010-11-23 17:02:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gainly 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见