purple_paradise 发表于 2008-10-30 18:29

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找不到

sogooda 发表于 2008-10-30 18:38

你的if end中的语句可能没有被执行,因为你的条件没有包括所有的可能,比如H0=0。
比较稳妥的方法是在if end之前先给Psi赋值,比如Psi=NaN,这样比较方便查找原因和调试。

purple_paradise 发表于 2008-10-30 18:43

回复 沙发 sogooda 的帖子

这个方法我用了,我添加一个Psi=0的情况,
我也用过在if前面添加“global Psi”,结果得到的是个空值

bainhome 发表于 2008-10-30 19:05

不要用Psi做变量名称,改成Psi1或者其他什么的试试。

sigma665 发表于 2008-10-30 19:46

回复 楼主 purple_paradise 的帖子

进入调试状态,看看判断语句有没有运行

ChaChing 发表于 2008-10-30 22:40

楼主变数名称刚好使用到Matlab的内存函数, 可以 help psi就知道. 最好不要如此, 如同bainhome所说的试试看吧!
但奇怪的是即使如此(变数名称与内存函数同名), 也应该可以执行才对
因在Matlab, 变数的优先程度是高於内存函数, 况且你列的程序我在v6.5试过没问题!
怪?? 怪??

还有楼主的程序个人看来很不习惯, 建议使用switch及case
或者直接使用atan2即可

[ 本帖最后由 ChaChing 于 2008-10-31 07:57 编辑 ]

purple_paradise 发表于 2008-10-31 20:39

我用这个方法解决的:

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;

ch_j1985 发表于 2008-10-31 20:50

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?

purple_paradise 发表于 2008-11-1 09:11

回复 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;

ChaChing 发表于 2008-11-1 09:11

回复 9楼 purple_paradise 的帖子

我还是认为直接使用atan2即可:@)

[ 本帖最后由 ChaChing 于 2008-11-1 09:13 编辑 ]

ch_j1985 发表于 2008-11-1 19:37

回复 10楼 ChaChing 的帖子

如果用atan2,则应注意G0、H0的前后顺序吧
页: [1]
查看完整版本: MATLAB中if~end之间定义的变量怎么用?