MATLAB中if~end之间定义的变量怎么用?
MATLAB中if~end之间定义的变量怎么用?我出现过这样的问题:
if G0>0&&H0<0
Psi=-atan(abs(H0/G0));
elseif G0<0&&H0<0
Psi=-pi+atan(abs(H0/G0));
elseif G0<0&&H0>0
Psi=-pi-atan(abs(H0/G0));
elseif G0>0&&H0>0
Psi=-2*pi+atan(abs(H0/G0));
end
epsilong=3*pi+2*Psi;
之后出现错误
??? Undefined variable or function Psi might refer to the function psi.
也就是说在if~end之间定义的变量psi找不到 你的if end中的语句可能没有被执行,因为你的条件没有包括所有的可能,比如H0=0。
比较稳妥的方法是在if end之前先给Psi赋值,比如Psi=NaN,这样比较方便查找原因和调试。
回复 沙发 sogooda 的帖子
这个方法我用了,我添加一个Psi=0的情况,我也用过在if前面添加“global Psi”,结果得到的是个空值 不要用Psi做变量名称,改成Psi1或者其他什么的试试。
回复 楼主 purple_paradise 的帖子
进入调试状态,看看判断语句有没有运行 楼主变数名称刚好使用到Matlab的内存函数, 可以 help psi就知道. 最好不要如此, 如同bainhome所说的试试看吧!但奇怪的是即使如此(变数名称与内存函数同名), 也应该可以执行才对
因在Matlab, 变数的优先程度是高於内存函数, 况且你列的程序我在v6.5试过没问题!
怪?? 怪??
还有楼主的程序个人看来很不习惯, 建议使用switch及case
或者直接使用atan2即可
[ 本帖最后由 ChaChing 于 2008-10-31 07:57 编辑 ] 我用这个方法解决的:
Psi=(if G0>0&&H0<0 )*(-atan(abs(H0/G0)))+(G0<0&&H0<0)*(-pi+atan(abs(H0/G0)))+(G0<0&&H0>0)*(-pi-atan(abs(H0/G0)))+(G0>0&&H0>0)*(-2*pi+atan(abs(H0/G0)));
epsilong=3*pi+2*Psi; Psi=(if G0>0&&H0<0 )*(-atan(abs(H0/G0)))+(G0<0&&H0<0)*(-pi+atan(abs(H0/G0)))+(G0<0&&H0>0)*(-pi-atan(abs(H0/G0)))+(G0>0&&H0>0)*(-2*pi+atan(abs(H0/G0)));
是不是多了if?
回复 8楼 ch_j1985 的帖子
我用这个方法解决的:Psi=(G0>0&&H0<0 )*(-atan(abs(H0/G0)))+(G0<0&&H0<0)*(-pi+atan(abs(H0/G0)))+(G0<0&&H0>0)*(-pi-atan(abs(H0/G0)))+(G0>0&&H0>0)*(-2*pi+atan(abs(H0/G0)));
epsilong=3*pi+2*Psi;
回复 9楼 purple_paradise 的帖子
我还是认为直接使用atan2即可:@)[ 本帖最后由 ChaChing 于 2008-11-1 09:13 编辑 ]
回复 10楼 ChaChing 的帖子
如果用atan2,则应注意G0、H0的前后顺序吧
页:
[1]