请教matlab高手,急救啊,求解常微分方程!!!

我现在需要写一篇论文关于常微分方程的,需要求解其一个方程的稳定点,但是我不知道用matlab写程序的,非常急,我请教了好几位会matlab的都不会,急救!!!!下面是常微... 我现在需要写一篇论文关于常微分方程的,需要求解其一个方程的稳定点,但是我不知道用matlab写程序的,非常急,我请教了好几位会matlab的都不会,急救!!!!
下面是常微分方程
令方程等于零,这个该怎样求解啊,麻烦大家,我真的很菜!!!绝对大大加分!!!
展开
 我来答
ruifengcao
2011-01-23 · TA获得超过9489个赞
知道大有可为答主
回答量:3579
采纳率:33%
帮助的人:2029万
展开全部
你这个不是求微分方程,而是求这个微分方程的稳定点,也就是平衡点,那么就是一个解方程组的问题了。

首先你定义所有的变量,使用syms函数,方法是
syms s e ep epsp P ez epsz Z a beta N Kn Rm lmdz dltap
然后把三个方程写出来,例如
f1=s*e+ep*epsp*P+ez*epsz*Z-a*N/(Kn+N)*P;
f2=……
f3=……
然后直接使用solve函数求解
solve('f1','f2','f3','N','P','Z')

其实你的这个方程很简单的,拿手就能算出来的,先解第三个得到Z,然后代入第一个和第二个,就能求出P和N了。

如果你要求解这个微分方程,一楼的方法就很好了!

祝你学习愉快!
yjoli
2011-01-23 · TA获得超过1383个赞
知道小有建树答主
回答量:472
采纳率:0%
帮助的人:189万
展开全部
先说明数学方法,不是编程哈,然后针对你的方程说明注意点,只要有点matlab的编程基础就应该看的懂,知道如何解决了。
1)把你的表达式本就是状态方程(1阶微分方程),改写成矩阵形式,即
[dN/dt;dP/dt;dZ/dt]=K*[N;P;Z]
其中的K即为状态方程的矩阵形式,K中的符号不好书写,表示成
K=[k11 k12 k13;k21 k22 k33];
2)根据状态方程写子函数,函数的结构形式为
%%子函数
function dydt=f(t,y) %子函数m文件名为 f.m
K=[……]; %K中的元素值要定义
dydt=K*y; %状态方程
注意,子函数中不用定义t和y
(3)写主函数求解,就是用ode函数求解,函数结构为
%%
t=[t0:t1:t2]; %t0为求解时间起点,t1为时间步;t2为终止时间
y0=[y01,y02,y03]; %y0表示n维向量y的初值,你的方程是3为向量,
%即y01,y02,y03分别是是N,P,Z的初值
[T,Y]=ode45(@f,t,y0); %T为ode算法的时间序列;Y为求解的结果,你这里是3维问题,
%Y的1,2,3列分别对应N,P,Z的计算结果

注:这里用的是ode45算法,matlab还提供了ode23 ode13等算法,你搜索了解一下就知道了。

你的三个方程不能直接改写成矩阵形式,也可以用代数形式在子函数中写方程,基本结构是:
%%
function dydt=f(t,y)
s=...;e=....;........; %方程中要用到的所有常数赋值;
dydt=zeros(3,1);
dydt(1)=f1(y(1),y(2),y(3)); %f1表示你的第一个方程,用y(1),y(2),y(3)代替N,P,Z
dydt(2)=f2(y(1),y(2),y(3)); %f2表示你的第二个方程,用y(1),y(2),y(3)代替N,P,Z
dydt(3)=f3(y(1),y(2),y(3)); %f2表示你的第三个方程,用y(1),y(2),y(3)代替N,P,Z
%%
主函数的结构形式不变。

ok,叙述完成,希望你能解决问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友e7886d4
2011-01-23 · TA获得超过1502个赞
知道小有建树答主
回答量:1195
采纳率:0%
帮助的人:278万
展开全部
可以归一化啊:
设:F=y1,F'=y2,F''=y3
设:R=y4,R'=y5
dy1/dt=y2
dy2/dt=y3
dy3/dt=-3*y1*y3+2*y2^2-y4
dy4/dt=y5
dy5/dt=-3*P*y1*y5
就是dY=A*Y
A是系数矩阵,尺度5*5
Y=[y1;y2;y3;y4;y5],尺度5*1
dy=[y2;y3;-3*y1*y3+2*y2^2-y4;y5;-3*P*y1*y5],5*1
可以写函数文件了
function dy=fun(t,y)
dy=[y(2);y(3);-3*y(1)*y(3)+2*y(2)^2-y(4);y(5);-3*P*y(1)*y(5)];
脚本里面可用ode45调用
t=...;
y0=[...;;;];
[t,y]=ode45('fun',t,y0)
其他的自己补充,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式