24小时热门版块排行榜    

查看: 202  |  回复: 1
当前主题已经存档。

chshy1234

银虫 (小有名气)

[交流] 【求助】,MATLAB程序错在哪了???

Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

Error in ==> chemical_kinetic at 17
[t,x]=ode45(@myfun,[t0:0.1:t1],x0,optimset('display','iter'),A);

运行下面程序出现上述错误:各位高手帮忙分析一下错在哪了???
function chemical_kinetic
%计算反应物随浓度的变化关系
clear all
clc
%输入初值
A0=1.50;
B0=0;C0=0;D0=0;
k1=1.00;k2=0.50;k3=0.30;k4=0.10;
x0=[B0 C0 D0];               %赋浓度初值
t0=0;t1=20;                 %赋时间起始值
for f=0.5:0.1:1.0
    switch f
        case 0.5
%计算反应速率方程中的系数矩阵
A=[-k1*f*A0 k2 -k3*f*A0 0;k1*f*A0 -k2 -k3*f*A0 0 ;0 0 k3*f*A0 -k4;0 0 0 k4];
%调用ode45函数计算常微分方程组
[t,x]=ode45(@myfun,[t0:0.1:t1],x0,optimset('display','iter'),A);
%作反应物浓度随时间的变化图
figure(1)
plot(t,x(:,1),'k-')
xlabel('t')
ylabel('B浓度')
title('B的浓度变化曲线(f=0.5)')
figure(2)
plot(t,x(:,2),'k-')
xlabel('t')
ylabel('C浓度')
title('C的浓度变化曲线(f=0.5)')
figure(3)
plot(t,x(:,3),'k-')
xlabel('t')
ylabel('D浓度')
title('D的浓度变化曲线(f=0.5)')
fprintf('\n f=0.5\n')
fprintf('\n B=%.4g\n',x(length(x),1))
fprintf('\n C=%.4g\n',x(length(x),2))
fprintf('\n D=%.4g\n',x(length(x),3))
       case 0.75
A=[-k1*f*A0 k2 -k3*f*A0 0;k1*f*A0 -k2 -k3*f*A0 0 ;0 0 k3*f*A0 -k4;0 0 0 k4];
[t,x]=ode45(@myfun,[t0:0.1:t1],x0,optimset('display','iter'),A);
figure(4)
plot(t,x(:,1),'k-')
xlabel('t')
ylabel('B浓度')
title('B的浓度变化曲线(f=1.6)')
figure(5)
plot(t,x(:,2),'k-')
xlabel('t')
ylabel('C浓度')
title('C的浓度变化曲线(f=1.6)')
figure(6)
plot(t,x(:,3),'k-')
xlabel('t')
ylabel('D浓度')
title('D的浓度变化曲线(f=1.6)')
fprintf('\n f=1.6\n')
fprintf('\n B=%.4g\n',x(length(x),1))
fprintf('\n C=%.4g\n',x(length(x),2))
fprintf('\n D=%.4g\n',x(length(x),3))
       case 1.0
A=[-k1*f*A0 k2 -k3*f*A0 0;k1*f*A0 -k2 -k3*f*A0 0 ;0 0 k3*f*A0 -k4;0 0 0 k4];
[t,x]=ode45(@myfun,[t0:0.1:t1],x0,optimset('display','iter'),A);
figure(7)
plot(t,x(:,1),'k-')
xlabel('t')
ylabel('B浓度')
title('B的浓度变化曲线(f=2.3)')
figure(8)
plot(t,x(:,2),'k-')
xlabel('t')
ylabel('C浓度')
title('C的浓度变化曲线(f=2.3)')
figure(9)
plot(t,x(:,3),'k-')
xlabel('t')
ylabel('D浓度')
title('D的浓度变化曲线(f=2.3)')
fprintf('\n f=2.3\n')
fprintf('\n B=%.4g\n',x(length(x),1))
fprintf('\n C=%.4g\n',x(length(x),2))
fprintf('\n D=%.4g\n',x(length(x),3))
    end
end
%------------------
function y=myfun(t,x,A)
y=A*[1;x(1);x(1);x(2)];

[ Last edited by sunxiao on 2009-3-9 at 08:30 ]
回复此楼

» 猜你喜欢

为理想而奋斗!!!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

zajage

金虫 (著名写手)


coldwind042(金币+1,VIP+0):谢谢参与帮助1 2-19 13:14
拷入我的200B,这个程序可以运行,至少在语法上没问题,不过,好象没输完,下面是不是还有命令符??
2楼2009-02-17 19:21:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 chshy1234 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见