声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3867|回复: 10

[编程技巧] MATLAB中if~end之间定义的变量怎么用?

[复制链接]
发表于 2008-10-30 18:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
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找不到
回复
分享到:

使用道具 举报

发表于 2008-10-30 18:38 | 显示全部楼层
你的if end中的语句可能没有被执行,因为你的条件没有包括所有的可能,比如H0=0。
比较稳妥的方法是在if end之前先给Psi赋值,比如Psi=NaN,这样比较方便查找原因和调试。
 楼主| 发表于 2008-10-30 18:43 | 显示全部楼层

回复 沙发 sogooda 的帖子

这个方法我用了,我添加一个Psi=0的情况,
我也用过在if前面添加“global Psi”,结果得到的是个空值
发表于 2008-10-30 19:05 | 显示全部楼层
不要用Psi做变量名称,改成Psi1或者其他什么的试试。

评分

1

查看全部评分

发表于 2008-10-30 19:46 | 显示全部楼层

回复 楼主 purple_paradise 的帖子

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

评分

1

查看全部评分

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

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

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

评分

1

查看全部评分

 楼主| 发表于 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;
发表于 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
 楼主| 发表于 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;
发表于 2008-11-1 09:11 | 显示全部楼层

回复 9楼 purple_paradise 的帖子

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

[ 本帖最后由 ChaChing 于 2008-11-1 09:13 编辑 ]
发表于 2008-11-1 19:37 | 显示全部楼层

回复 10楼 ChaChing 的帖子

如果用atan2,则应注意G0、H0的前后顺序吧
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-10-1 23:30 , Processed in 0.069238 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表