24小时热门版块排行榜    

查看: 1898  |  回复: 9

津津爱睡觉

金虫 (小有名气)

[求助] Matlab小白,急需计算一个模型,求懂的大神看看怎么修改。万分感谢 已有2人参与

Matlab小白,急需计算一个模型,解微分方程组,求懂的大神看看怎么修改。万分感谢
function dy = funct(t,y)

I = 50 % mA
F = 96487 % C/mol
c0 = 10 % mM
Vol = 3.344 % ml
Q = 6.5 % ml/min
A = 33.75 % cm2

syms x
eqn = 0.86*x+0.4*(x*exp(-asinh(theta/(-2*x)))+x*exp(asinh(theta/(-2*x))))==y(3)
cma = double(solve(eqn,x))

cmion = (y(3)-0.86*cma)/0.4

phi_sp = asinh(-3/y(2))
phi_ele = asinh(-3/cma)

phi_mem = (I*170)/(-1.12*F*(cma.*cosh(phi_ele)+y(2).*cosh(phi_sp)))

J = -(1.12*1e-3/170)*(2*cma.*cosh(phi_ele)-2*y(2).*cosh(phi_sp))+3*phi_mem

dy=zeros(3,1);
dy(1) = (1e4*I/A)/(116*F)

dy(2) = -J/(250e-6*0.5)+(c0-y(2))/(0.5*(Vol/Q)*60)

dy(3)  = J/(290*1e-6)

end
clear all;
c0=10
tspan=[0 600]
[t,y] = ode45(@funct,tspan,[0 c0 1.66*c0])

plot(t, y(:,2))
xlabel('t'),ylabel('c')

错误使用 odearguments (line 92)
FUNCT 返回的矢量的长度为 2,但初始条件矢量的长度为 3。FUNCT 返回的矢量和初始条件矢量的元素数目必须相同。

出错 ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
回复此楼

» 猜你喜欢

有梦一起追
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chendequan

铁虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
theta值未知,eqn方程求解cma可能会遇到无解情况,建议提供公式资料看看

» 本帖已获得的红花(最新10朵)

QQ:516477448,真心帮助解决MATLAB相关问题,提供详细资料,Word文档明确具体问题及要求,尽力而为!
2楼2019-06-23 10:06:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

津津爱睡觉

金虫 (小有名气)

引用回帖:
2楼: Originally posted by chendequan at 2019-06-23 10:06:51
theta值未知,eqn方程求解cma可能会遇到无解情况,建议提供公式资料看看

function dydt = funct(t,x, y)

I = 50; % mA
F = 96487; % C/mol
c0 = 10; % mM
Vol = 3.344; % ml
Q = 6.5; % ml/min
A = 33.75; % cm2
y1=y(1); y2=y(2); y3=y(3);
y3 = 0.86*x+0.4*(x*exp(-asinh(y1/(-2*x)))+x*exp(asinh(y1/(-2*x))))

phi_sp = asinh(-3/y2)
phi_ele = asinh(-3/x)

phi_mem=(I*170)/(-1.12*F*(x*cosh(phi_ele)+y2*cosh(phi_sp)))

J =-(1.12*1e-3/170)*(2*x*cosh(phi_ele)-2*y2*cosh(phi_sp))+3*phi_mem

dy1dt = (1e4*I/A)/(116*F)

dy2dt = -J/(250e-6*0.5)+(c0-y2)/(0.5*(Vol/Q)*60)

dy3dt = J/(290*1e-6)

end
clear all;
I = 50; % mA
F = 96487; % C/mol
c0 = 10; % mM
Vol = 3.344; % ml
Q = 6.5; % ml/min
A = 33.75; % cm2
tspan=[0 600]
x0=c0

[t,x,y] = ode45(@funct,tspan, c0, [0 c0 1.66*c0])

plot(t, theta)
xlabel('t'),ylabel('c')

出错 ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

改了程序,现在错误变成这样。公式就是想解一个三个未知数的微分方程组,但是里面有未知数
有梦一起追
3楼2019-06-23 20:57:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

津津爱睡觉

金虫 (小有名气)

引用回帖:
2楼: Originally posted by chendequan at 2019-06-23 10:06:51
theta值未知,eqn方程求解cma可能会遇到无解情况,建议提供公式资料看看

function dydt = funct(t,x, y)

I = 50; % mA
F = 96487; % C/mol
c0 = 10; % mM
Vol = 3.344; % ml
Q = 6.5; % ml/min
A = 33.75; % cm2
y1=y(1); y2=y(2); y3=y(3);
y3 = 0.86*x+0.4*(x*exp(-asinh(y1/(-2*x)))+x*exp(asinh(y1/(-2*x))))

phi_sp = asinh(-3/y2)
phi_ele = asinh(-3/x)

phi_mem=(I*170)/(-1.12*F*(x*cosh(phi_ele)+y2*cosh(phi_sp)))

J =-(1.12*1e-3/170)*(2*x*cosh(phi_ele)-2*y2*cosh(phi_sp))+3*phi_mem

dy1dt = (1e4*I/A)/(116*F)

dy2dt = -J/(250e-6*0.5)+(c0-y2)/(0.5*(Vol/Q)*60)

dy3dt = J/(290*1e-6)

end
clear all;
I = 50; % mA
F = 96487; % C/mol
c0 = 10; % mM
Vol = 3.344; % ml
Q = 6.5; % ml/min
A = 33.75; % cm2
tspan=[0 600]
x0=c0

[t,x,y] = ode45(@funct,tspan, c0, [0 c0 1.66*c0])

plot(t, theta)
xlabel('t'),ylabel('c')

出错 ode45 (line 113)
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...

改了程序,现在错误变成这样。公式就是想解一个三个未知数的微分方程组,但是里面有未知数
有梦一起追
4楼2019-06-23 20:57:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

津津爱睡觉

金虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by chendequan at 2019-06-23 10:06:51
theta值未知,eqn方程求解cma可能会遇到无解情况,建议提供公式资料看看

非常感谢,能帮忙解决必有重谢
有梦一起追
5楼2019-06-23 20:58:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hzlhm

至尊木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
你没有说清楚,theta是具体的值,还是一个范围值,如是范围值应该用循环语句求出t、y的值。
QQ:2120156492
6楼2019-06-24 13:02:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hzlhm

至尊木虫 (著名写手)

【答案】应助回帖

建议你,把具体的微分方程组和条件贴出来看一看。这样就可以减少一些盲目性。
QQ:2120156492
7楼2019-06-24 13:20:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chendequan

铁虫 (小有名气)

【答案】应助回帖

引用回帖:
5楼: Originally posted by 津津爱睡觉 at 2019-06-23 20:58:43
非常感谢,能帮忙解决必有重谢...

个人签名里面有我联系方式,问题资料要齐全,要求要具体详细,这样便于问题及时解决。
QQ:516477448,真心帮助解决MATLAB相关问题,提供详细资料,Word文档明确具体问题及要求,尽力而为!
8楼2019-06-24 15:28:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

津津爱睡觉

金虫 (小有名气)

引用回帖:
7楼: Originally posted by hzlhm at 2019-06-24 13:20:05
建议你,把具体的微分方程组和条件贴出来看一看。这样就可以减少一些盲目性。

dy(1)=a*y(1)+b*y(2);
y(2)=c*y(1)+d*y(3);
dy(3)=-e*y(2)*(y(3)-t)/y(1);

function daedi
a=-0.2; b=0.5; c=0.1; d=-1; e=0.3;
y0=[0.8;0.5;0.1]; %初值,y0(2)=0.5是猜测值
options=optimset('display','off');
y0(2)=fsolve(@(y2)y2-(c*y0(1)+d*y0(3)),y0(2),options); %求出相容的初值y0(2)
% 求解微分方程
[t,y]=ode45(@(t,y)myodefun(t,y,a,b,c,d,e),[0,20],y0);
figure('numbertitle','off','name','DAE 求解示例 方法1.2')
plot(t,y)
legend('y1(t)','y2(t)','y3(t)')

function dy=myodefun(t,y,a,b,c,d,e)
dy=zeros(3,1); % dy(2)=0很重要,否则反求出y(2)后会被积分
% 先求解代数方程,顺序很重要
cons=@(y2)y2-(c*y(1)+d*y(3)); % 隐式代数约束
options=optimset('display','off'); % 关闭提示
y(2)=fsolve(cons,y(2),options); %用上次的y(2)作为猜测值
dy(1)=a*y(1)+b*y(2);
dy(3)=-e*y(2)*(y(3)-t)/y(1);
现在通过这个例子已经可以运行,想问您怎么继续编写这个例子中y(2)随t的动态变化呢
感谢感谢
有梦一起追
9楼2019-06-28 04:59:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

津津爱睡觉

金虫 (小有名气)

引用回帖:
8楼: Originally posted by chendequan at 2019-06-24 15:28:52
个人签名里面有我联系方式,问题资料要齐全,要求要具体详细,这样便于问题及时解决。...

dy(1)=a*y(1)+b*y(2);
y(2)=c*y(1)+d*y(3);
dy(3)=-e*y(2)*(y(3)-t)/y(1);

function daedi
a=-0.2; b=0.5; c=0.1; d=-1; e=0.3;
y0=[0.8;0.5;0.1]; %初值,y0(2)=0.5是猜测值
options=optimset('display','off');
y0(2)=fsolve(@(y2)y2-(c*y0(1)+d*y0(3)),y0(2),options); %求出相容的初值y0(2)
% 求解微分方程
[t,y]=ode45(@(t,y)myodefun(t,y,a,b,c,d,e),[0,20],y0);
figure('numbertitle','off','name','DAE 求解示例 方法1.2')
plot(t,y)
legend('y1(t)','y2(t)','y3(t)')

function dy=myodefun(t,y,a,b,c,d,e)
dy=zeros(3,1); % dy(2)=0很重要,否则反求出y(2)后会被积分
% 先求解代数方程,顺序很重要
cons=@(y2)y2-(c*y(1)+d*y(3)); % 隐式代数约束
options=optimset('display','off'); % 关闭提示
y(2)=fsolve(cons,y(2),options); %用上次的y(2)作为猜测值
dy(1)=a*y(1)+b*y(2);
dy(3)=-e*y(2)*(y(3)-t)/y(1);
现在通过这个例子已经可以运行,想问您怎么继续编写这个例子中y(2)随t的动态变化呢
感谢感谢
有梦一起追
10楼2019-06-28 05:02:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 津津爱睡觉 的主题更新
信息提示
请填处理意见