声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 873|回复: 1

[编程技巧] matlab中微分方程组求解求助

[复制链接]
发表于 2009-6-10 19:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
我会解非延迟的微分方程组,但现在要将其一个变量改成延迟的,求各位帮帮看看,怎么改,先谢谢了
非延迟的程序:
m文件:
function f=virus(t,x)
Uvir=420;
Kcdv=0.024;
Kva=1;
Kvi=0.002;
Kcdf=0.001;
Kvd=0.003;
Um=0.03;
Cm=1200000;
f(1)=Um*(Cm-x(1)-x(2))*x(1)/Cm-Kcdf*x(1)-Kvi*x(1)*x(3);
f(2)=Kvi*x(1)*x(3)-Kcdv*x(2);
f(3)=Uvir*x(2)-Kvd*x(3)-Kva*x(1)*x(3);
f=f(:);
matlab命令:
clear;[t,x]=ode23s(@virus,[0 200],[1200000;0;26000000]);
plot(t,x(:,1),':',t,x(:,2));
plot(t,x(:,3));
max(x(:,3))

请达人帮我改以下,f(3)=Uvir*x(2)-Kvd*x(3)-Kva*x(1)*x(3);这个方程改成这个意思:f(3)=Uvir*x(2)(t-4.5)-Kvd*x(3)-Kva*x(1)*x(3);
也就是说,那个x(2)要替换成t-4.5时刻的x(2)的值,求达人帮我改改,谢谢了
t<0时段的值和初值[1200000;0;26000000]一样。
回复
分享到:

使用道具 举报

 楼主| 发表于 2009-6-10 19:42 | 显示全部楼层
我自己用dde编了一个,但出现错误,程序如下:
%ddefun.m
%延迟微分方程
function dydt=ddefun(t,y,Z)
ylag = Z(:,1);
dydt=zeros(3,1);
Uvir=420;
Kcdv=0.024;
Kva=1;
Kvi=0.002;
Kcdf=0.001;
Kvd=0.003;
Um=0.03;
Cm=1200000;
dydt(1)=Um*(Cm-y(1)-y(2))*y(1)/Cm-Kcdf*y(1)-Kvi*y(1)*y(3);
dydt(2)=Kvi*y(1)*y(3)-Kcdv*y(2);
dydt(3)=Uvir*ylag(2)-Kvd*y(3)-Kva*y(1)*y(3);

sol=dde23(@ddefun,4.5,[1200000;0;26000000],[0,90]);

Error in ==> dde23 at 413
      Z = lagvals(t1,lags,history,X,Y,YP,varargin{:});
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-7-8 10:05 , Processed in 0.058597 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表