当我参加算法课程时,教授给我们一个关于矩阵计算的有趣问题。 给定n * n maxtrix A和n * 1列向量b,我们需要计算满足以下条件的相应x: Ax = b的 使用matlab语言,A和b定义如下:
A=[];
for j=1:n-1
aj=[];
aj=[aj;repmat(1,j-1,1)];
aj=[aj;1];
aj=[aj;repmat(-1,n-j,1)];
A=[A,aj];
end
A=[A,repmat(1,n,1)];
b=rand(n,1)*2;
我们只是通过输入得到x的值:
x=A\b;
然后我们通过以下方式检查结果:
res=A*x-b;
我们发现许多元素的res绝对值大于1。
但是,教授告诉我们:只需添加一个随机项目,如下所示
A1=(A1+rand(n,n)*0.0001)
x1=A1\b;
res1=A*x1-b; # there ,this is A not A1
我们会发现res1的元素都小于1e-4
但是,A和A1的条件数几乎相同。
我想这是一个累积的数值误差。但我无法用数学和充分的方法来解释这种现象。 数学极客或CSer知道吗?谢谢。
答案 0 :(得分:0)
这实际上取决于矩阵A.
那里有很多线性方程求解器,我们无法告诉你为什么在这种特殊情况下你会得到那种效果
看看这个:http://de.mathworks.com/help/matlab/ref/mldivide.html
正如您在“算法”中所看到的,对于普通输入矩阵,总共有7种不同的求解器
所有这些都具有某些可能会或多或少地影响数值误差的属性。