问题描述
我有一个定义函数的代码,然后我尝试在另一个表达式中使用我在该函数中定义的变量。当我这样做时,我收到一个错误:
Undefined function or variable 'phi'.
我不确定为什么 phi 是未定义的,因为我在 if/else 语句中有它。
最好用我的(缩短的)代码来解释:
global I11 I22 I33 Mx My Mz w10 w20 w30 eps10 eps20 eps30 eps40...
C110 C120 C130 C210 C220 C230 C310 C320 C330 IC K0
IC = [w10 w20 w30...
eps10 eps20 eps30 eps40...
C110 C120 C130 C210 C220 C230 C310 C320 C330];
opts = odeset('RelTol',1*10^(-10),'AbsTol',1*10^(-10));
[t,y] = ode45(@(t,y) DynEqn2(t,y,I11,I22,I33,Mx,My,Mz),[ti tf],IC,opts);
N = sqrt(sum(y(:,4:7).^2,2));
kap = acosd(1-2*y(:,5).^2-2*y(:,7).^2);
phi1 = acosd((2.*(y(:,4).*y(:,5)+y(:,6).*y(:,7)))/sind(kap));
phi2 = asind((2.*(y(:,4)-y(:,5).*y(:,7)))/sind(kap));
if phi1==phi2
phi = phi1;
elseif phi1==180-phi2
phi = phi1;
elseif -phi1==phi2
phi = -phi1;
elseif -phi1==180-phi2
phi = -phi1;
else
disp('Something is wrong with phi')
end
figure (1)
plot(t,phi)
figure (2)
plot(t,kap)
function soln = DynEqn2(t,Mz)
w1 = y(1);
w2 = y(2);
w3 = y(3);
eps1 = y(4);
eps2 = y(5);
eps3 = y(6);
eps4 = y(7);
C11 = y(8);
C12 = y(9);
C13 = y(10);
C21 = y(11);
C22 = y(12);
C23 = y(13);
C31 = y(14);
C32 = y(15);
C33 = y(16);
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);
C11_dot = C12*w3-C13*w2;
C12_dot = C13*w1-C11*w3;
C13_dot = C11*w2-C12*w1;
C21_dot = C22*w3-C23*w2;
C22_dot = C23*w1-C21*w3;
C23_dot = C21*w2-C22*w1;
C31_dot = C32*w3-C33*w2;
C32_dot = C33*w1-C31*w3;
C33_dot = C31*w2-C32*w1;
soln = [w1_dot; w2_dot; w3_dot; ...
eps1_dot; eps2_dot; eps3_dot; eps4_dot; ...
C11_dot; C12_dot; C13_dot; C21_dot; C22_dot; C23_dot; C31_dot; C32_dot; C33_dot];
end
我计算 phi1、phi2 和 if/else 语句以找到 phi 的行是我正在努力解决的问题。
我确保函数中定义的变量有效,例如,在命令窗口中,我输入了“y(:,4)”并得到了正确的输出。但是每当我尝试在函数(即“phi1”)中使用它时,它都会反复输出错误的“90.0000”值,直到我停止它为止。
在我定义 'N' 变量的地方,它是类似的,但它可以正常工作而没有错误。
有人知道如何修改这个问题吗?
感谢任何帮助,谢谢。
编辑:完整的错误信息如下:
Undefined function or variable 'phi'.
Error in HW6_Q1 (line 85)
plot(t,phi)
解决方法
我在一位非 Stack Overflow 同事的帮助下找到了我的解决方案。
我忘记了 ./
,它把我的 phi 变成了一个矩阵,而不是我想要的向量。