[我试图通过将其乘以得到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)
truncateFunction
不执行您认为的操作。它仅将低于给定10的幂的值四舍五入为零-除非该整数为零,否则根本不舍入为最接近的整数。
通常,对于浮点问题(这是最好的),检查值是否在较小的值内而不是相等。
epsilon = .00001
if abs(yTempVar(j)-1) > epsilon
fprintf ("something's wrong")
truncateFunction (yTempVar(j), 1)
return