如何充分计算这个矩阵

时间:2014-12-14 09:05:32

标签: algorithm matlab random matrix numerical

当我参加算法课程时,教授给我们一个关于矩阵计算的有趣问题。 给定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知道吗?谢谢。

1 个答案:

答案 0 :(得分:0)

这实际上取决于矩阵A.
那里有很多线性方程求解器,我们无法告诉你为什么在这种特殊情况下你会得到那种效果 看看这个:http://de.mathworks.com/help/matlab/ref/mldivide.html

正如您在“算法”中所看到的,对于普通输入矩阵,总共有7种不同的求解器 所有这些都具有某些可能会或多或少地影响数值误差的属性。