数值实验三--LU分解法的优点(共6页).docx
精选优质文档-倾情为你奉上 数值实验三 LU分解法的优点一:实验目的 给定矩阵A与向量b A= n n-121n32对称n n-1n b=1000 (1) 求A的LU分解(2) 利用A的LU分解解下列方程:A*x=b A2*x=b A3*x=b对第题分析一下,如果先求M=A3,再解M*相比有何缺点?(3)利用A的LU分解法求A-1 ,其中n由自己选择,例如取n=5二:实验原理输入方程阶数n,系数矩阵A,右端向量bK=1,n(分解A=L*U)uk j=ak j-s=1k-1lks*us j (j=k,n) uk k F =0 T 输出失败信息,停 k= F 0 Tli k=(ai k-s=1k-1li sus k)/ukk (i=k+1,n) yk=b k-s=1k-1lk sys ) (k=1,2,n)(解方程组L*y=b) x k=(y k-s=k+1nuk sxs )/ukk (k=n,n-1,1) 输出x1,x2,xn,结束三:实验过程实验代码:Option Base 1 Dim a() As Single, u() As Single, l() As Single Private Sub Command1_Click() Dim m As Integer, p As Integer, n As Integer, k As Integer, i As Integer, j As Integer, s As Integer, t As Single n = Val(Text1.Text) ReDim a(n, n), u(n, n), l(n, n) For i = 1 To n For j = i To n a(i, j) = n + i - j a(j, i) = n + i - j Next Next t = 0 For k = 1 To n For j = k To n t = 0 For s = 1 To k - 1 t = t + l(k, s) * u(s, j) Next u(k, j) = a(k, j) - t Next If k <> n Then For i = k + 1 To n t = 0 For s = 1 To k - 1 t = t + l(i, s) * u(s, k) Next l(i, k) = (a(i, k) - t) / u(k, k) Next End If Next For m = 1 To n l(m, m) = 1 Next For i = 1 To n For j = 1 To n Text2.Text = Text2.Text & a(i, j) & vbCrLf Next Next For i = 1 To n For j = 1 To n Text3.Text = Text3.Text & l(i, j) & vbCrLf Next Next For i = 1 To n For j = 1 To n Text4.Text = Text4.Text & u(i, j) & vbCrLf Next NextEnd SubPrivate Sub Command2_Click() Dim y() As Single, x() As Single, b() As Single Dim n As Integer, k As Integer, i As Integer, j As Integer, s As Integer, t As Single n = Val(Text1.Text) ReDim y(n), x(n), b(n) b(1) = 1 For i = 2 To n b(i) = 0 Next i For k = 1 To n t = 0 For s = 1 To k - 1 t = t + l(k, s) * y(s) Next y(k) = b(k) - t Next For k = n To 1 Step -1 t = 0 For s = k + 1 To n t = t + u(k, s) * x(s) Next x(k) = (y(k) - t) / u(k, k) Next For i = 1 To n Text5.Text = Text5.Text & x(i) & vbCrLf Next End SubPrivate Sub Command3_Click() Dim y() As Single, x() As Single, b() As Single Dim n As Integer, k As Integer, i As Integer, j As Integer, s As Integer, t As Single n = Val(Text1.Text) ReDim y(n), x(n), b(n) b(1) = 1 For i = 2 To n b(i) = 0 Next i For i = 1 To 2 For k = 1 To n t = 0 For s = 1 To (k - 1) t = t + l(k, s) * y(s) Next y(k) = b(k) - t Next For k = n To 1 Step -1 t = 0 For s = k + 1 To n t = t + u(k, s) * x(s) Next x(k) = (y(k) - t) / u(k, k) Next For j = 1 To n b(j) = x(j) Next Next For i = 1 To n Text6.Text = Text6.Text & b(i) & vbCrLf NextEnd SubPrivate Sub Command4_Click() Dim y() As Single, x() As Single, b() As Single, v() As Single Dim n As Integer, k As Integer, i As Integer, j As Integer, s As Integer, t As Single n = Val(Text1.Text) ReDim y(n), x(n), b(n) b(1) = 1 For i = 2 To n b(i) = 0 Next i For i = 1 To 3 For k = 1 To n t = 0 For s = 1 To (k - 1) t = t + l(k, s) * y(s) Next y(k) = b(k) - t Next For k = n To 1 Step -1 t = 0 For s = k + 1 To n t = t + u(k, s) * x(s) Next x(k) = (y(k) - t) / u(k, k) Next For j = 1 To n b(j) = x(j) Next Next For i = 1 To n Text7.Text = Text7.Text & b(i) & vbCrLf NextEnd SubPrivate Sub Command5_Click() EndEnd SubPrivate Sub Command6_Click() Dim y() As Single, x() As Single, b() As Single, v() As Single Dim n As Integer, k As Integer, i As Integer, j As Integer, s As Integer, t As Single n = Val(Text1.Text) ReDim v(1 To n, 1 To n) ReDim y(1 To n) For i = 1 To n ReDim b(1 To n) b(i) = 1 For k = 1 To n t = 0 For s = 1 To k - 1 t = t + l(k, s) * y(s) Next y(k) = b(k) - t Next For k = n To 1 Step -1 t = 0 For s = k + 1 To n t = t + u(k, s) * v(s, i) Next v(k, i) = (y(k) - t) / u(k, k) Next Next For i = 1 To n For j = 1 To n Text8.Text = Text8.Text & v(i, j) & vbCrLf Next Next End Sub四:实验结果当n=10时A*x=b的解x1=【0 .,-0.,-3.E-07,2.5836E-07,-1.E-07,8.E-08,-5.E-08,2.E-08,-3.E-08,4.E-02】-1A2*x=b 的解为 x2=【0.,-0.,0.,8.E-07,-4.E-07,3.E-07,-2.65427E-07,9.E-08,-2.E-02,4.E-02】-1A3*x=b的解为 x3=【0.,-1.,0.,-0.,-1.1815E-069.E-07,-7.E-07,1.E-02,-4.E-02,6.E-02】-1五:实验分析LU分解法比较简便迅速,当解多个系数矩阵为A的线性方程做时,LU分解法就显得特别优越,只要对系数矩阵做一次LU分解,以后只要解三角形方程即可。也可以更具系数矩阵的形状来设计算法专心-专注-专业