matlab程序(要用到ode23命令)运行出错 跪求帮忙
求各位大神帮忙这段matlab(主要用到ode23命令)程序运行时总是显示变量e3不存在跪求大神!functionehb1=input('请输入Bx=');b2=inpu...
求各位大神帮忙 这段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=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];
解决后追加悬赏!!! 展开
1个回答
展开全部
不光是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];
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];
追问
你这程序也还是运行不了啊 跪求大神解决啊 !!有加分 有加分!!
追答
能运行啊,我写的是要改的地方
完整的是
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];
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询