ode45
ode45中能不能使用循环回复 楼主 francexuqu 的帖子
请尽可能清楚、详细的说明问题,不要让别人去猜你的意思。 比如:Ey=1:1:100;初始值y(1)=1;y(2)=0;y(3)=0;y(4)=0;x=[-40:40]
dy(1) = -2*pi*y(3)/y(1)*Ey;
dy(2) = -2*pi*(y(3)/y(1)*Ey-y(4)/y(1));
dy(3) = -2*pi*(Ey-y(2)/y(1)*Ey);
dy(4) = -2*pi*y(2)/y(1);
如果Ey是一个确定的值,直接用ode45便可解;
ifEy是个数组,且此时初值条件不变,可不可以用ode45解
if可以,如何做?
回复 板凳 francexuqu 的帖子
你这个可以实现 ,Ey当着参数传递进去,循环放在外面回复 板凳 francexuqu 的帖子
可以实现,只需要稍微改变一下导数函数文件的格式,再把ey当做参数参数由ode45传进去就可以了。function dy=yyydot(t,y,flag,Ey)
dy=[ -2*pi*y(3)/y(1)*Ey;
-2*pi*(y(3)/y(1)*Ey-y(4)/y(1));
-2*pi*(Ey-y(2)/y(1)*Ey);
-2*pi*y(2)/y(1)];
clear;clc
x0=;
Ey=;
for ii=1:2
=ode45('yyydot',[-40,40],x0,[],Ey(ii));
figure;plot(t,x)
end
回复 5楼 sogooda 的帖子
??? Error using ==> funfun\private\odeargumentsCorrect syntax is ode45(YYYDOT,tspan,y0,options).
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in ==> lliu at 5
=ode45('yyydot',[-40,40],x0,Ey(ii));
代码去掉flag在我的机子上面运行,得到上面的结果
flag是什么用途呢
[ 本帖最后由 francexuqu 于 2008-11-3 19:40 编辑 ]
回复 6楼 francexuqu 的帖子
1.没什么用。2.允许
3.ode45('yyydot',[-40,40],x0,[],Ey(ii));或者更推荐ode45(@yyydot,[-40,40],x0,[],Ey(ii));
4.都行
上面的程序我之前可以运行,但是现在好像有点儿问题——也许是我调试之后忘了把改动贴上来了吧。又改了一下,可以在一个文件里放着。应该不会再有问题了。
function solveyyy
clear;clc
x0=;
Ey=;
for ii=1:2
=ode45(@yyydot,[-40,40],x0,[],Ey(ii));
figure;plot(t,x)
end
function dy=yyydot(t,y,Ey)
dy=[ -2*pi*y(3)/y(1)*Ey;
-2*pi*(y(3)/y(1)*Ey-y(4)/y(1));
-2*pi*(Ey-y(2)/y(1)*Ey);
-2*pi*y(2)/y(1)];
=ode45(@yyydot,[-40,40],x0,[],Ey(ii));
请问这里的空矩阵表示什么,将其删掉,为什么不能运行
出错的代码:
??? Input argument "Ey" is undefined.
Error in ==> liu>yyydot at 10
dy=[ -2*pi*y(3)/y(1)*Ey;
Error in ==> funfun\private\odearguments at 110
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ==> ode45 at 173
[neq, tspan, ntspan, next, t0, tfinal, tdir, y0, f0, odeArgs, odeFcn, ...
Error in ==> liu at 6
=ode45(@yyydot,[-40,40],x0,Ey(ii));
回复 8楼 francexuqu 的帖子
通常都是将第四个参数设定为空的……doc ode45
页:
[1]