|
|
[交流]
【求助】请教高人matlab求解隐函数微分方程问题
请教高人,希望能够帮忙
代码是:
a=2;
b=6;
a0=0.5;
b0=1.5;
a1=1.5;
b1=0.5;
c=1.5;
x=0;
zd=0;
z=0;
if x>=a&&x<=b
syms y x;
% f1=1+y;
f1=(((1-a0)*(0.5*b1))+a0*(y-z(1)-c)+(b0-a0)*(y-z(1)-c-0.5*b1*exp(-(y-a1)^2/b1^2))/((y-a1)*exp(-(y-a1)^2/b1^2)))*((y-a1)/b1)*exp(-(y-a1)^2/b1^2)-0.5*(b0-a0)*exp(-(y-a1)^2/b1^2);
g1=int(f1,y,x,b);
p1=0.5*((b0-a0)*exp(-(x-a1)^2/b1^2));
% f=@(x,z,zd)[zd(1)*(g1+p1*(x-z(1)-c-(0.5*b1*exp(-(x-a1)^2/b1^2))/((x-a1)*exp(-(x-a1)^2/b1^2))))];
f=(g1+p1*(x-z(1)-c-(0.5*b1)));
elseif x=0
syms y x;
% f2=y-2;
f2=(((1-a0)*(b1*(1-0.5*exp(-(y-a1)^2/b1^2)))/((y-a1)*exp(-(y-a1)^2/b1^2)))+a0*(y-z(1)-c)+(b0-a0)*(y-z(1)-c-0.5*b1*exp(-(y-a1)^2/b1^2))/((y-a1)*exp(-(y-a1)^2/b1^2)))*(-(y-a1)/b1)*exp(-(y-a1)^2/b1^2)-(b0-a0)*(1-0.5*exp(-(y-a1)^2/b1^2));
g2=int(f2,y,x,b);
p2=(b0-a0)*(1-0.5*exp(-(x-a1)^2/b1^2));
% f=@(x,z,zd)[zd(1)*(g2+p2*(x-z(1)-c+(b1*(1-0.5*exp(-(x-a1)^2/b1^2)))/((x-a1)*exp(-(x-a1)^2/b1^2))))];
f=(g2+p2*(x-z(1)-c+(b1*(1-0.5*exp(-(x-a1)^2/b1^2)))/((x-a1)*exp(-(x-a1)^2/b1^2))));
end
% z0=5;
% zd0=0.1;
% z0F=0;
% zd0F=1;
% [z0,zd0]=decic(f,0,z0,z0F,zd0,zd0F);
% r=ode15i(f,[0,0.1],z0,zd0);
% plot(r.x,r.y)
l=@(x,z)inv(f)*0;
opt=odeset;
opt.RelTol=1e-6;
[x,z]=ode45(l,[0,0.1],0,opt);
plot(x,z)
总是报错
??? Error using ==> odearguments
Inputs to odearguments must be floats, namely single or double.
Error in ==> odearguments at 136
dataType = superiorfloat(t0,y0,f0);
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in ==> fangzhen1 at 40
[x,z]=ode45(l,[0,0.1],0,opt); |
|