不确定如何使用 'ODE45' 命令修复错误
Not Sure How to Fix Errors Using 'ODE45' Command
我无法弄清楚如何修复我的脚本,特别是使用 ODE45 命令。
这是我目前拥有的:
clc; clear all;
global I11 I22 I33 Mx My Mz w10 w20 w30 eps10 eps20 eps30 eps40 IC
I11 = 160;
I22 = 400;
I33 = 400;
Mx = 0;
My = 0;
Mz = 45;
w10 = 2;
w20 = -1;
w30 = 1;
eps10 = 0;
eps20 = 0;
eps30 = 0;
eps40 = 1;
IC = [w10 w20 w30 eps10 eps20 eps30 eps40];
function soln = DynEqn1(t,y,I11,I22,I33,Mx,My,Mz)
global I11 I22 I33 Mx My Mz w10 w20 w30 eps10 eps20 eps30 eps40
w1 = y(1);
w2 = y(2);
w3 = y(3);
eps1 = y(4);
eps2 = y(5);
eps3 = y(6);
eps4 = y(7);
w1_dot = Mx - w2*w3*(I33-I22)/I11;
w2_dot = My - w1*w3*(I11-I33)/I22;
w3_dot = Mz - w1*w2*(I22-I11)/I33;
eps1_dot = .5*(w1*eps4-w2*eps3+w3*eps2);
eps2_dot = .5*(w1*eps3+w2*eps4-w3*eps1);
eps3_dot = .5*(-w1*eps2+w2*eps1+w3*eps4);
eps4_dot = -.5*(w1*eps1+w2*eps2+w3*eps3);
soln = [w1_dot; w2_dot; w3_dot; eps1_dot; eps2_dot; eps3_dot; eps4_dot];
end
我最近虽然问题出在我的变量上,这就是我将它们全部定义为全局变量的原因。
当我尝试 运行 命令中的以下内容时 window:
[t, y] = ode45(@(t,y) DynEqn1(t,y,I11,I22,I33,Mx,My,Mz), [0 30], IC);
我收到这些错误:
>> [t, y] = ode45(@(t,y) DynEqn1(t,y,I11,I22,I33,Mx,My,Mz), [0 30], IC);
Undefined function or variable 'DynEqn1'.
Error in @(t,y)DynEqn1(t,y,I11,I22,I33,Mx,My,Mz)
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
我已经尝试在 Mathworks 和其他网站上对其进行研究,但无法弄清楚问题所在。
我也不太熟悉使用 'ODE45' 函数。
感谢任何帮助。谢谢。
您是在脚本文件中定义本地函数吗?如果是这样,请记住“本地函数仅在定义它们的文件中可见。它们对其他文件中的函数不可见,并且不能从命令 Window 中调用。” (Ref.)
您需要从脚本文件而不是命令行调用 ode45(...DynEqn1...)
,或者创建一个单独的文件以使该函数对外界可见。
我无法弄清楚如何修复我的脚本,特别是使用 ODE45 命令。
这是我目前拥有的:
clc; clear all;
global I11 I22 I33 Mx My Mz w10 w20 w30 eps10 eps20 eps30 eps40 IC
I11 = 160;
I22 = 400;
I33 = 400;
Mx = 0;
My = 0;
Mz = 45;
w10 = 2;
w20 = -1;
w30 = 1;
eps10 = 0;
eps20 = 0;
eps30 = 0;
eps40 = 1;
IC = [w10 w20 w30 eps10 eps20 eps30 eps40];
function soln = DynEqn1(t,y,I11,I22,I33,Mx,My,Mz)
global I11 I22 I33 Mx My Mz w10 w20 w30 eps10 eps20 eps30 eps40
w1 = y(1);
w2 = y(2);
w3 = y(3);
eps1 = y(4);
eps2 = y(5);
eps3 = y(6);
eps4 = y(7);
w1_dot = Mx - w2*w3*(I33-I22)/I11;
w2_dot = My - w1*w3*(I11-I33)/I22;
w3_dot = Mz - w1*w2*(I22-I11)/I33;
eps1_dot = .5*(w1*eps4-w2*eps3+w3*eps2);
eps2_dot = .5*(w1*eps3+w2*eps4-w3*eps1);
eps3_dot = .5*(-w1*eps2+w2*eps1+w3*eps4);
eps4_dot = -.5*(w1*eps1+w2*eps2+w3*eps3);
soln = [w1_dot; w2_dot; w3_dot; eps1_dot; eps2_dot; eps3_dot; eps4_dot];
end
我最近虽然问题出在我的变量上,这就是我将它们全部定义为全局变量的原因。
当我尝试 运行 命令中的以下内容时 window:
[t, y] = ode45(@(t,y) DynEqn1(t,y,I11,I22,I33,Mx,My,Mz), [0 30], IC);
我收到这些错误:
>> [t, y] = ode45(@(t,y) DynEqn1(t,y,I11,I22,I33,Mx,My,Mz), [0 30], IC);
Undefined function or variable 'DynEqn1'.
Error in @(t,y)DynEqn1(t,y,I11,I22,I33,Mx,My,Mz)
Error in odearguments (line 90)
f0 = feval(ode,t0,y0,args{:}); % ODE15I sets args{1} to yp0.
Error in ode45 (line 115)
odearguments(FcnHandlesUsed, solver_name, ode, tspan, y0, options, varargin);
我已经尝试在 Mathworks 和其他网站上对其进行研究,但无法弄清楚问题所在。
我也不太熟悉使用 'ODE45' 函数。
感谢任何帮助。谢谢。
您是在脚本文件中定义本地函数吗?如果是这样,请记住“本地函数仅在定义它们的文件中可见。它们对其他文件中的函数不可见,并且不能从命令 Window 中调用。” (Ref.)
您需要从脚本文件而不是命令行调用 ode45(...DynEqn1...)
,或者创建一个单独的文件以使该函数对外界可见。