提问人:Maxomega 提问时间:2/21/2020 最后编辑:Cris LuengoMaxomega 更新时间:2/21/2020 访问量:80
1 不等于 1?MATLAB 中的矩阵条目比较
1 doesn't equal 1? Matrix entry comparison in MATLAB
问:
我正在尝试通过将矩阵相乘得到 1 来测试矩阵的反转。我检查它是否等于 1,如果不是,则打印一条消息和矩阵条目的值。
问题是打印的矩阵条目是 1。我甚至使用我知道有效的舍入函数来确保浮点不准确没有问题。
这是我的代码:
function [D1,f]=stiff(D,y)
n = size(D,2);
D1 = inv(D);
f = D1 * y;
for i = 1:n
for j = 1:n
if j == i % checking for diagonal entry
yTempVar = D * D1 (1:n, i);
if truncateFunction (yTempVar(j), 1) ~= 1
fprintf ("something's wrong")
truncateFunction (yTempVar(j), 1)
return
end
end
end
end
function B=truncateFunction(A,pow)
A(abs(A)<10^-pow)=0;
B=A;
相应的输出是这样的:
something's wrong
ans = 1.0000
我也尝试过没有舍入功能,我试过用 1.0000
这是我在实时脚本中要测试的内容
D=rand(4)*0.1;
y=randi([10 20], 4,1);
stiff(D,y)
答:
2赞
Mark Snyder
2/21/2020
#1
truncateFunction
不会做你认为它所做的事情。它仅将低于给定 10 幂的值舍入为零 - 除非该整数为零,否则它根本不会四舍五入到最接近的整数。
一般来说,对于浮点问题(就是这样),最好检查值是否在小值内,而不是相等。
epsilon = .00001
if abs(yTempVar(j)-1) > epsilon
fprintf ("something's wrong")
truncateFunction (yTempVar(j), 1)
return
评论
D
n
truncateFunction
truncateFunction
truncateFunction
if abs(yTempVar(j) - 1) > .000001
function B=truncateFunction(A,pow)
A(abs(A)<10^-pow)=0;
B=A;