|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
前段时间由于需要屡次发帖问这个问题
xjzuo楼主耐心的回答了一些问题,并写出了变参数微分方程的实例!
面对实例,我依葫芦画瓢,尽量将程序经过改进达到我要的效果。
因为我要模拟反应器,里面的反应以及组分都较复杂。
导致微分方程组变量是二维,方程也不止两个,而是很多个!
第一步将变量从一维到二维:
clear all
fun=inline('[y(2);sin(w(2)*t)-2*w(1)*y(1)-3*y(2)]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
[t,y]=ode45(fun,tsp,y0,[],x(i,:));
plot(t,y)
end
以上就基本解决了变量问题;
在将方程从几组到更多组的变化时
显然将他们写进inline()中将使书写十分的不好看,且在此过程中一换行就出错,不知其因。于是想出了以下的方法解决问题:
function asmmuct
clear all
fun=inline('[f1;f2]','t','y','flag','w');
x=[2 2;3 3;9 9;4 4;8 8;7 7;2 2;1 1;6 6;9 9;];
tsp=[0 10];
y0=[1 1 ];
for i=1:10
[t,y]=ode45(fun,tsp,y0,[],x(i,:));
plot(t,y)
end
function dydt=f(t,y)
f1=y(2)
f2=sin(w(2)*t)-2*w(1)*y(1)-3*y(2)
dydt=[f1;f2]
但提示就是:
??? Error using ==> inline.feval
Not enough inputs to inline function.
使得我难以解决问题。
相信在面对稍复杂问题的处理当中,方程和变量的加多是大家都会面对。
只要将以上问题解决,基本就可以解决这一类问题
而变参数的积分问题也可以沿着这个思路加以解决
在面对问题以来,由于本人的急躁发了许多帖,都没有实质的进展,且有灌水之嫌,再次表示歉意!
希望各位积极解决刚才的问题
使得变参数的积分以及微分问题有个较为圆满的解决!
http://forum.vibunion.com/thread-42367-1-1.html
这是xizuo楼主的示例帖 |
|