如何解决线性病态方程组

63(30天)
你好,我有一个典型的线性问题来解决 ,在那里 一个 是一个三对角,illconditioned矩阵。使用表示系统的解决方案,我计算一个向量 R ,这样 R = kv。* diff (x) 。我有什么我知道的正确的值 R ,我在接下来的几次执行此计算涉及我获得的线性系统的解决方案,并比较此值 R 我有。
我用两种方式来解决病态:
  1. 我使用了典型的L-U分解,然而我仍然得到一个警告,结果正如你所看到的并不准确。
  2. 我执行相同的过程,但是,我的条件U通过添加的单位矩阵似乎解决了调节问题。此外,我注意到结果R2的常数吗R2 (1)从已知的答案R被纠正,所以,这种方法似乎给我正确的答案。
清晰;clc
= (663100000,663100000,0,0,0,0,0,0,0,0,0,0,-663100000,1407100000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1865000000.00000,-1121000000.00000,0,0,0,0,0,0,0,0,0,0,-1121000000.00000,3086000000.00000,-1965000000.00000,0,0,0,0,0,0,0,0,0,0,-1965000000.00000,51965000000.0000,-50000000000.0000,0,0,0,0,0,0,0,0,0,0,-50000000000.0000,50022150000.0000,-22150000,0,0,0,0,0,0,0,0,0,0,-22150000,111860000,-89710000,0,0,0,0,0,0,0,0,0,0,-89710000,89710000);
b = [0, 97346.0079330557; 97020.9494874157; 97246.0491601032; 97462.7637751785; 97128.3959227217; 97326.7056988805; 0, 0, 0, 0; -460875.388953404);
R = [0, 97346.0079330557; 194366.957420471; 291613.006580575; 389075.770355753; 486204.166278475; 583530.871977355; 583530.871977355; 583530.871977355; 583530.871977355; 583530.871977355);
kv =诊断接头(1);
% L U分解
陆[L U] =(一个);
x1 = U \ (L \ b);
警告:矩阵接近奇异或严重了。结果可能是不准确的。RCOND = 1.113507 e-16。
R1 = kv。* diff (x1);
% L U分解预处理
x2 = (U +眼(长度(A))) \ (L \ b);
R2 = kv。*差异(x2);
%比较结果。R是正确的解决方案的问题
[R R1 R2-R2 (1)]
ans = 11×3
1.0 e + 5 * 0 0 0 0.9735 0.9650 0.9735 1.9437 1.9583 1.9437 2.9161 2.9233 2.9161 3.8908 3.8882 3.8908 4.8620 4.8532 4.8620 5.8353 5.8157 5.8353 5.8353 5.8468 5.8353 5.8353 5.7220 5.8353 5.8353 4.6126 5.8353
在此基础上我有两个问题:
  1. 我不能解释为什么我第二种方法的工作原理,具体为什么我要执行计算R2-R2 (1)为了得到正确的结果。这是一个巧合对于这种情况,还是我可以安全地概括这对于其他类似的坏脾气的矩阵呢一个我,这样我就可以正确解决类似的问题?
  2. 如果上面不是一个可靠的解决方案,你能建议的方法来处理这个问题?(我看着Tikhonov regularisationregtools但是我无法工作,因为它使返回的函数南)。
提前谢谢你的帮助。
2的评论
KostasK
KostasK 2021年11月7日
编辑:KostasK 2021年11月7日
R 不是suposed解决原始方程, x1 x2 是谁做的。 R ts计算这inolves解决线性方程中可以看到我发布的代码,这是 R = kv。* diff (x) 。它背后有一个物理意义, kv 刚度系数向量和吗 x 位移,所以呢 R 是春天的诱导力。
所以澄清你的评论, R 不是应该是系统的解决方案。我要编辑我的问题更清晰,我也改变了我的小错误。抱歉的误解。

登录置评。

接受的答案

马特·J
马特·J 2021年11月7日
编辑:马特·J 2021年11月8日
我不认为方程需要正规化。唯一向量的零空间的(12日1),但这种零向量R是不敏感因为kv。* (diff (x + c *(12日1))= kv。* diff (x)。
你得到的差异在版本R1似乎因为你的预期值R不正确或其他有一些错在你 A、b 数据,可能最后一行。我怀疑这是因为我从lsqlin得到下面的结果。我在这里解决最小二乘解的A * x =受约束R = kv。* diff (x)。正如你所看到的,最后方程在* x = b是不能很好地解决了相比其他方程。
= (663100000,663100000,0,0,0,0,0,0,0,0,0,0,-663100000,1407100000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1488000000.00000,-744000000,0,0,0,0,0,0,0,0,0,0,-744000000,1865000000.00000,-1121000000.00000,0,0,0,0,0,0,0,0,0,0,-1121000000.00000,3086000000.00000,-1965000000.00000,0,0,0,0,0,0,0,0,0,0,-1965000000.00000,51965000000.0000,-50000000000.0000,0,0,0,0,0,0,0,0,0,0,-50000000000.0000,50022150000.0000,-22150000,0,0,0,0,0,0,0,0,0,0,-22150000,111860000,-89710000,0,0,0,0,0,0,0,0,0,0,-89710000,89710000);
b = [0, 97346.0079330557; 97020.9494874157; 97246.0491601032; 97462.7637751785; 97128.3959227217; 97326.7056988805; 0, 0, 0, 0; -460875.388953404);
R = [0, 97346.0079330557; 194366.957420471; 291613.006580575; 389075.770355753; 486204.166278475; 583530.871977355; 583530.871977355; 583530.871977355; 583530.871977355; 583530.871977355);
s = 1 e6;
= A / s;b = b / s;R = R / s;
kv =诊断接头(1);
[m, n] =大小(一个);
E = kv (:)。* diff(眼(n));
选择= optimoptions (“lsqlin”,“OptimalityTolerance”1 e-20“ConstraintTolerance”1 e-20);
[x, fval] = lsqlin (A, b, [] [], E, R,[],[],[],选择);fval
最低发现满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
fval = 0.0150
equationError = *取向;
equationError([1:4,十12))
ans = 7×1
0 0 -0.0000 -0.0000 0.0000 0.0000 -0.1227
2的评论
马特·J
马特·J 2021年11月8日
我认为你不需要。我认为你可以做计算,
R = kv。* diff (pinv (A) * b)

登录置评。

更多的答案(0)

类别

找到更多的在数学帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的