MATLAB中保存for循环计算值时向量被重置的问题求助
问题根源:你覆盖了MATLAB的内置常量
pi! 哦,这个小坑我太熟悉了!你第二个代码里的问题出在开头定义了pi=[]——pi是MATLAB自带的圆周率常量(值约为3.14159...),你把它赋值成空数组后,直接破坏了后续的弧度计算逻辑:
- 第一个代码能正常运行,是因为你用的是MATLAB默认的
pi常量,degree=a*pi/180能正确把角度转成弧度,后续的sin(degree)和数组拼接自然没问题。 - 第二个代码里,
pi被你改成空数组后,degree=a*pi/180计算出来的结果也是空值,sin(degree)返回空,最终si和pi数组都会因为空值拼接出现异常,甚至得到全空的结果。
修正方案:换个变量名存储结果
只需要把你用来存储p的变量名换掉,别用pi这种内置关键词就行,比如改成pi_results或者p_list:
alfa = [0 30 45 60 90]; si = []; pi_results = []; % 替换原有的pi=[],用新变量名存储结果 for a = alfa degree = a * pi / 180; % 现在用的是MATLAB内置的圆周率常量 s = sin(degree); si = [si, s]; p = 2 * s; pi_results = [pi_results, p]; % 用新变量名拼接结果 end
额外小建议
在MATLAB里尽量避免用内置函数/常量的名字当变量名,比如sin、cos、i、j、pi这些,否则很容易出现这种看似莫名其妙的错误。如果不确定某个名字是不是内置的,可以用exist('变量名', 'builtin')命令检查,返回1就说明是内置的。
内容的提问来源于stack exchange,提问作者Monika Kastner
相关产品推荐
相关产品推荐

