francexuqu 发表于 2008-10-29 16:34

ode45

ode45中能不能使用循环

sogooda 发表于 2008-10-29 16:47

回复 楼主 francexuqu 的帖子

请尽可能清楚、详细的说明问题,不要让别人去猜你的意思。

francexuqu 发表于 2008-10-29 17:46

比如:
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可以,如何做?

无水1324 发表于 2008-10-29 23:06

回复 板凳 francexuqu 的帖子

你这个可以实现 ,Ey当着参数传递进去,循环放在外面

sogooda 发表于 2008-10-30 11:22

回复 板凳 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

francexuqu 发表于 2008-11-3 19:06

回复 5楼 sogooda 的帖子

??? Error using ==> funfun\private\odearguments
Correct 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 编辑 ]

sogooda 发表于 2008-11-3 19:38

回复 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)];

francexuqu 发表于 2008-11-3 19:49

=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));

ch_j1985 发表于 2008-11-3 20:15

回复 8楼 francexuqu 的帖子

通常都是将第四个参数设定为空的……
doc ode45
页: [1]
查看完整版本: ode45