MATLAB中拿第一个程序的结果,再执行第2个程序,结果是对的,但如果直接从第一个程序执行到第二个程序结果就不对。
这会是什么原因呢?如第一个for循环后,得到一个M。现在找到了问题所在,但是不能解决,就是第一个循环后M中的数值,如-0.2,与判断语句中的-0.2不相等。应该是数据类型不同,如何来改变这一个数据类型?

Matlab矩阵处理
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
7条回答 默认 最新
- 百晓生2023 2023-04-05 09:04关注该回答引用ChatGPT
根据问题描述,第一个问题是执行两个程序的结果不一致,第二个问题是数据类型不同导致判断语句出错。下面分别进行解答。
第一个问题可能是由于程序之间的依赖关系没有处理好导致的。可以先尝试在两个程序之间加上延时,让第一个程序完全执行完毕再执行第二个程序。可以用Matlab中的 `pause` 函数实现,例如 `pause(1)` 表示等待1秒。也可以尝试将两个程序合并为一个程序,使程序之间的依赖关系更清晰且易于处理。
第二个问题可能是由于判断语句中的数值是浮点数,而第一个循环后M中的数值可能存在精度误差,导致这些数值与判断语句中的数值看起来相同但实际不相等。这种情况下可以使用 `eps` 函数判断两个浮点数是否相等,例如 `abs(a-b) < eps` 表示a和b的差值小于eps,即认为a和b相等。同时可以使用 `format long` 命令将输出精度设置为更高的级别,以更精细地查看数值的差异。
以下是修改代码的示例,对M比较的语句中添加了eps函数的判断,同时使用format long命令将输出精度设置为了较高的级别。
% 第一个程序
N = 100;
M = zeros(N);
for i = 1:N
for j = 1:i
if j == 1
M(i,j) = 2;
else
M(i,j) = 2*eps^(2*j-i)+M(i,j-1);
end
end
end
% 第二个程序
format long
for i = 1:N
for j = i+1:N
if abs(M(i,j)-M(j,i)) > eps
fprintf('M(%d,%d)=%f, M(%d,%d)=%f
',i,j,M(i,j),j,i,M(j,i));
end
end
end解决 1无用