Я пытаюсь проверить инверсию матрицы, умножив ее, чтобы получить 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)