当前位置:编程学习 > Matlab >>

matlab程序(要用到ode23命令)运行出错 跪求帮忙

求各位大神帮忙 这段matlab(主要用到ode23命令)程序运行时总是显示变量e3不存在 跪求大神! function eh b1=input('请输入Bx='); b2=input('请输入By='); b3=input('请输入Bz='); e1=input('请输入Ex='); e2=input('请输入Ey='); e3=input('请输入Ez='); c=input('请按此格式依次输入[x(0),vx(0),y(0),vy(0),z(0),vz(0)]='); q=1.6e-2; m=0.02; figure [t,y]=ode23(@ww,[0:0.001:20],c,[],q,m,b1,b2,b3,e1,e2,e3); xlabel('x'); ylabel('y');zlabel('z'); view([-51,18]); plot3(y(:,1),y(:,3),y(:,5)); %comet3(y(:,1),y(:,3),y(:,5)); grid on function ydot=ww(t,y,flag,q,m,b1,b2,b3,e1,e2,e3) ydot=[y(2); q*e1/m+q*b3*y(4)/m-q*b2*y(6)/m; y(4); q*e2/m+q*b1*y(6)/m-q*b3*y(2)/m; y(6); q*e3/m+q*b2*y(2)/m-q*b1*y(4)/m];
补充:解决后追加悬赏!!!
追问:
你这程序也还是运行不了啊 跪求大神解决啊 !!有加分 有加分!!
能运行啊,我写的是要改的地方
完整的是
function eh
b1=1;
b2=1;
b3=1;
e1=1;
e2=1;
e3=1;
c=[1 1 1 1 1 1]';
q=1.6e-2;  m=0.02;

figure
assignin('base','q',q);
assignin('base','m',m);
assignin('base','b1',b1);
assignin('base','b2',b2);
assignin('base','b3',b3);
assignin('base','e1',e1);
assignin('base','e2',e2);
assignin('base','e3',e3);
 [t,y]=ode23(@ww,[0,20],c);
  xlabel('x'); ylabel('y');zlabel('z');
  view([-51,18]);
  plot3(y(:,1),y(:,3),y(:,5));
  %comet3(y(:,1),y(:,3),y(:,5));
    grid on
    
 function ydot=ww(t,y)
q=evalin('base','q');
m=evalin('base','m');
b1=evalin('base','b1');
b2=evalin('base','b2');
b3=evalin('base','b3');
e1=evalin('base','e1');
e2=evalin('base','e2');
e3=evalin('base','e3');

 ydot=[y(2);
     q*e1/m+q*b3*y(4)/m-q*b2*y(6)/m;
     y(4);
     q*e2/m+q*b1*y(6)/m-q*b3*y(2)/m;
     y(6);
     q*e3/m+q*b2*y(2)/m-q*b1*y(4)/m];
答案:不光是e3,你微分方程里面的参数全都没有传递过去。你把那些参数列在ode函数后面是没用的,程序不认识。
ode23是变步长的,你写[0:0.001:20]是想设定步长吗?这样又不对了。
最后你
function ydot=ww(t,y,flag,q,m,b1,b2,b3,e1,e2,e3)里面那个flag是个什么?这又不是S_function
改的话你可以用全局变量传递参数,或者用assignin.和evalin命令传递参数
assignin('base','q',q);
assignin('base','m',m);
assignin('base','b1',b1);
assignin('base','b2',b2);
assignin('base','b3',b3);
assignin('base','e1',e1);
assignin('base','e2',e2);
assignin('base','e3',e3);
 [t,y]=ode23(@ww,[0,20],c);

 function ydot=ww(t,y)
q=evalin('base','q');
m=evalin('base','m');
b1=evalin('base','b1');
b2=evalin('base','b2');
b3=evalin('base','b3');
e1=evalin('base','e1');
e2=evalin('base','e2');
e3=evalin('base','e3');

 ydot=[y(2);
     q*e1/m+q*b3*y(4)/m-q*b2*y(6)/m;
     y(4);
     q*e2/m+q*b1*y(6)/m-q*b3*y(2)/m;
     y(6);
     q*e3/m+q*b2*y(2)/m-q*b1*y(4)/m];

上一个:Matlab程序报错,问下高手那里出错了
下一个:真心求一个matlab高手帮写一个程序

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,