线性代数方程:
设线性代数方程组具有如下特征:
算法框架
- (1)设置线性代数方程组的初值X=(x1,…,xn-1 ,xn);
- (2)构造迭代方程xi=gi (X) (i=1,…,n-1,n)及精度求解方法;
- (3)达到迭代次数或精度结束迭代。
雅克比算法:
k的意义:第k次运算(迭代)
没有利用前一次计算的结果。
就是移项。
更快。
这个评价是在数值分析课程中。
ρ(B)是表示谱半径,也就是矩阵特征向量中的最大值。
是否收敛与谱半径有关:当谱半径<1,或任意一个特征范式<1,
【例3-8】求下列解线性方程组的解
计算模型
算法设计与描述 | |
输入: | |
输出: | |
Jacobi (x[],k) { i <- k; while (i) //用次数来算 { x11 <- ( 20+3*x[2]-2*x[3])/8; x12 <- ( 33-4*x[1]-x[3])/11; x13 <- ( 36-6*x[1]-3*x[2])/12; x[1] <- x11; x[2] <- x12 ;x[3] <- x13 ;//算完再更新 i <- i-1 ; } output(x[]); } | 时间复杂度分析 由于计算模型已列出,ρ(B)=0.3592, R(B)=-lnρ(B)=1.02276,于是有 k≥(5ln10)/ 1.02276=11.2567, 则实际k可取12次可达到要求。 |
Gauss_Seidel (x[],k) { i <- k; while ( i ) { x[1] <- ( 20+3*x[2]-2*x[3])/8; //直接更新 x[2] <- ( 33-4*x[1]-x[3])/11; x[3] <- ( 36-6*x[1]-3*x[2])/12; i <- i-1 ; } output(x[]); } | 运行结果分析 Jacobi算法: k=12,结果: 2.999988 2.000008 1.000014 k=16,结果: 3.000000 2.000000 1.000000 Gauss_Seidel 算法: k=12, 结果: 3.000000 2.000000 1.000000 |
思考题:求下列解线性方程组的解
思考题(1)不收敛
思考题(2)
delta:0.00109925 u: -0.415718 v:-0.516958
x1:-0.932676 x2:(0.466338,0.0876765) x3:(0.466338,-0.0876765)
k:133
jacobi:
x[1]:-4 x[2]:3 x[3]:2
Gauss_Seidel:
x[1]:-4 x[2]:3 x[3]:2