1不等于1? MATLAB中的矩阵条目比较

时间:2020-02-21 00:49:05

标签: matlab floating-point equality

我试图通过乘以得到1来测试矩阵的求逆。我检查它是否等于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)

1 个答案:

答案 0 :(得分:2)

truncateFunction并没有您认为的那样。它只会将低于给定10的幂的值四舍五入为零-除非该整数为零,否则根本不会四舍五入为最接近的整数。

通常,对于浮点问题(这是),最好检查值是否在较小值之内而不是相等。

epsilon = .00001
if abs(yTempVar(j)-1) > epsilon
    fprintf ("something's wrong")
    truncateFunction (yTempVar(j), 1)
    return
相关问题