sindy209 发表于 2008-4-12 20:25

ode求解的m函数定义问题

function dy=mylu(t,Y)
a=Y(1);
b=Y(2);
c=Y(3);
dY(1)=-1.5-b*(5*a^4+2*c+1);
dY(2)=-a^5-2*a*c-a;
dY(3)=-2*a*b;
我这样定义有错?
为什么调用的时候会出现Input argument "Y" is undefined.
公式如

高手帮忙看下,谢谢!

[ 本帖最后由 无水1324 于 2008-4-14 19:04 编辑 ]

咕噜噜 发表于 2008-4-12 20:33

你本来就没定义,不过你最好把Y(1)等直接带进方程中,不要设置成a等符号
不过你单独运行子程序肯定会告诉你没定义,这是正常的

sindy209 发表于 2008-4-14 10:42

子程序:
function dy=mylu(t,Y)
dY=zeros(3,3);
x=zeros(3,3);

Y=-1.5*x(1)-x(4)*(5*x(1)^4+2*x(5)+1);
dY(1)=-1.5-x(4)*(5*x(1)^4+2*x(5)+1);
dY(2)=-x(1)^5-2*x(1)*x(5)-x(1);
dY(3)=-2*x(1)*x(4);
q1=x(1)^2*(x(1)^4+2*x(5)-1)-0.001*x(4);
q2=x(1)^2*(x(1)^4+2*x(5)-1)-0.001*x(4)+(x(2)+1.5*x(1)+x(4)*x(1)*(x(1)^4+2*x(5)+1))^2*((1+dY(1)^2)*(2*x(5)+1)+(x(1)^2+x(2)^2)+(dY(1)*X(1)^2)^2);
主程序:
怎么使用来调用子程序中的dy(1),dy(2),dy(3),q1,q2呢?
谢谢!
主程序:
clear all

lubang=inline('','t','x');

gama=-2*(xa(:,2)-Y)^2+dy(1)*xa(:,2)+0.5*dY(2)*q+dY(3)*xa(:,5)-xa(:,4).*(xa(:,2)-Y)^2*(1+dY(1)^2)*(2*xa(:,5)+1)-xa(:,4).*(xa(:,2)-Y)^2*(((xa(:,1).^2+xa(:,2).^2).^2)^2+(dY(1)*xa(:,1).^2)^2);
options=odeset('RelTol',1e-4,'AbsTol',1e-4);
=ode45(lb,,,options);
figure(1)
plot(t2,xa(:,1),'k:')

[ 本帖最后由 咕噜噜 于 2008-4-14 15:55 编辑 ]

咕噜噜 发表于 2008-4-14 15:53

好乱:@L :@L 看看
子程序和主程序都没看明白

[ 本帖最后由 咕噜噜 于 2008-4-14 15:57 编辑 ]

sindy209 发表于 2008-4-14 17:18

子程序1:
function dy=mylu1(t,x)
dy=zeros(3,1);
dy(1)=-1.5-x(2)*(5*x(1).^4+2*x(3)+1);
dy(2)=-x(1).^5-2*x(1)*x(3)-x(1);
dy(3)=-2*x(1)*x(2);

主程序:
clear all
x=zeros(5,5);
=ode45('mylu1',,[-9.5,-4,-2]);
Y=-1.5*x(1)-x(2)*(5*x(1).^4+2*x(3)+1);
q=x(1).^2*(x(1).^4+2*x(3)-1)-0.001*x(2)+(x(4)+1.5*x(1)+x(2)*x(1)*(x(1)^4+2*x(3)+1)).^2*((1+dy(1)^2)*(2*x(3)+1)+(x(1).^2+x(4).^2)+(dy(1)*x(1).^2).^2);


gama=-2*(x(4)-Y).^2+dy(1)*x(4)+0.5*dy(2)*q+dy(3)*x(3)-x(2)*(x(4)-Y)*(1+dy(1)^2)*(2*x(3)+1)-x(4)*(x(4)-Y)*(((x(1).^2+x(4).^2).^2)^2+(dy(1)*x(1).^2)^2);

lubang=inline('','t','x');
options=odeset('RelTol',1e-4,'AbsTol',1e-4);
=ode45(lubang,,,options);

figure(1)
plot(t2,x(:,1),'k:')

运行出现:
Warning: Failure at t=5.935321e-003.Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.387779e-017) at time t.
> In ode45 at 378
Warning: Failure at t=5.935321e-003.Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.387779e-017) at time t.
> In ode45 at 378
??? Undefined command/function 'x'.
不是定义x=zeros(5,5)了?
步长应该怎么减呢?


帮忙看下,弄了好久都……

在这里特别感谢octopussheng 和无水,咕噜噜的帮忙!谢谢大家了!
在此谢谢啦!

[ 本帖最后由 sindy209 于 2008-4-14 22:57 编辑 ]

无水1324 发表于 2008-4-14 18:31

function dy=mylu1(t,x)
dy=[-1.5-x(2)*(5*x(1).^4+2*x(3)+1);
    -x(1).^5-2*x(1)*x(3)-x(1);
    -2*x(1)*x(2)];

但是你的程序有问题求解之后解瞬间变得很大

sindy209 发表于 2008-4-14 18:39

楼主能说的更明白点嘛!
是mylu1.m这个程序有错?
谢谢!

无水1324 发表于 2008-4-14 18:56

回复 7楼 的帖子


按照我6楼的,使可以运行计算出来,但是解可能不是你想要的

咕噜噜 发表于 2008-4-14 19:04

他的公式传上来,以便大家参考

咕噜噜 发表于 2008-4-14 19:06

所以6楼的程序是正确的
但是这么求解会不会有问题,我是说公式

[ 本帖最后由 无水1324 于 2008-4-14 19:10 编辑 ]

octopussheng 发表于 2008-4-14 20:23

最初的问题很简单
dY(1)=-1.5-b*(5*a^4+2*c+1);
dY(2)=-a^5-2*a*c-a;
dY(3)=-2*a*b;
把Y改成y就可以了!

sindy209 发表于 2008-4-15 10:23

修改后的程序如5楼
可是还是有错:@Q :'( ,麻烦大家在帮我看下!
谢谢!

无水1324 发表于 2008-4-15 10:37

回复 12楼 的帖子

同学你看一下六楼的程序怎么样?

sindy209 发表于 2008-4-15 10:52

按照6楼的方法做,会出现这样的错误
Warning: Failure at t=5.935321e-003.Unable to meet integration tolerances without reducing the step size below the smallest value allowed (1.387779e-017) at time t.
> In ode45 at 378
??? Error using ==> inlineeval
Error in inline expression ==>
??? Error using ==> eval
Undefined function or variable 'q'.

Error in ==> inline.feval at 34
      INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

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, ...

Y也是表达式,为什么就没有错误,而q也是表达式,为什么就错了呢?

咕噜噜 发表于 2008-4-15 10:55

回复 14楼 的帖子

这种问题没有遇到过,应该是没问题啊,是不是那里有地方不一致
你不写你新的程序看不到拉
显示q没有定义
页: [1] 2
查看完整版本: ode求解的m函数定义问题