Sté*_*ent 4 matlab linear-algebra octave numerical-methods least-squares
A*(A\D)下面的结果怎么可能不等于D?

它应该产生D- 这是Octave文档的摘录:
线性方程组在数值分析中普遍存在.要求解线性方程组Ax = b,请使用左除法运算符'\':x = A\b
以下是想要尝试的人的代码:
A = [1,1,1;0,0,0;2,1,2;2,1,2;3,5,6]
D = [1;2;3;4;5]
% A is of rank 3:
rank(A)
% therefore the system Ax=D has a unique solution
x = A\D
% but Octave has not given the good solution:
A*x
Run Code Online (Sandbox Code Playgroud)
有人说我Matlab产生完全相同的结果.
编辑10/10/2012:在阅读了答案之后,让我指出我犯了一个严重错误的地方:声明"A是等级3因此系统Ax = D有一个独特的解决方案"是绝对错误的!顺便说一句,上面显示的文档非常令人不安.
A有5行,所以是D.它们都有3列.因此,您有一个包含3个变量的5个方程的超定系统.在大多数情况下,这意味着你无法准确地求解方程,因为你有太多的约束.
一旦你这样做了
x = A\D;
Run Code Online (Sandbox Code Playgroud)
你得到最小二乘解决方案.
0.8333
-1.5000
1.6667
Run Code Online (Sandbox Code Playgroud)
这个解决方案是什么?这是一种最小化误差平方和的解决方案.我们来计算错误:
r = A*x-D;
totalError = sum( r.^2);
Run Code Online (Sandbox Code Playgroud)
这意味着你将无法找到任何x这样sum(sqr(A*x-D))具有更小的误差.
小注:在你的情况下,你还有一行零 - 这导致实际的方程数变为4
让我们再来看看A*(A\D):
>> A* (A\D)
ans =
1.0000
0
3.5000
3.5000
5.0000
Run Code Online (Sandbox Code Playgroud)
看起来很熟悉!非常接近[1; 2; 3; 4; 5].第一行和最后一行是相同的.第二个是零,因为你放了一行零.在第3行和第4行中,A中的行具有完全相同的行,但B中的值不同,对应于
2*x+ 1*y + 2*z = 3;
2*x+ 1*y + 2*z = 4;
Run Code Online (Sandbox Code Playgroud)
而且你的平均水平!这是有道理的,因为平均值是最小化到3和4的距离之和的值.
这是一个更简单的例子,假设您想要求解以下方程组:
x = 1;
x = 2;
Run Code Online (Sandbox Code Playgroud)
显然,x不能1和2同时.最小化误差平方和的解决方案是1.5
A = [1;1];
b = [1;2];
A\b
ans =
1.5000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |