nullnull第二章 解线性方程组的直接法
/* Direct Method for Solving Linear Systems */§1 高斯消元法 /* Gaussian Elimination */ 高斯消元法:null§1 Gaussian Elimination – The Method消元共进行 ? 步n 1null回代No unique solution exists.What if we can’t find such k ?No unique solution exists.定理 若A的所有顺序主子式 /* determinant of leading principal submatrices */ 均不为0,则高斯消元无需换行即可进行到底,得到唯一解。注:事实上,只要 A 非奇异,即 A1 存在,则可通过逐次消元及行交换,将方程组化为三角形方程组,求出唯一解。§1 Gaussian Elimination – The Methodnull 选主元消去法 /* Pivoting Strategies */用Gaussian Elimination计算:小主元 /* Small pivot element */ 可能导致计算失败。§1 Gaussian Elimination – Pivoting Strategiesnull 完全主元消去法 /* Complete Pivoting */② If ik k then 交换第 k 行与第 ik 行;
If jk k then 交换第 k 列与第 jk 列;③ 消元注:列交换改变了 xi 的顺序,须
记录
混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载
交换次序,解完后再换回来。 列主元消去法 /* Partial Pivoting, or maximal column pivoting */省去换列的步骤,每次仅选一列中最大的元。§1 Gaussian Elimination – Pivoting Strategiesnull例:注:列主元法没有全主元法稳定。§1 Gaussian Elimination – Pivoting Strategiesnull§1 Gaussian Elimination – Pivoting Strategies实际应用中直接调用Gauss Elimination 解3阶线性方程组的结果:结合全主元消去后的结果:null 高斯-若当消去法 /* Gauss-Jordan Method */与 Gaussian Elimination 的主要区别: 每步不计算 mik ,而是先将当前主元 akk(k) 变为 1; 把 akk(k) 所在列的上、下元素全消为0;Hey! Isn’t it better than Gaussian Elimination?What makes you say so?Obviously we no longer need the backward substitution!You’d better wait till we go through the next section to draw your conclusion…§1 Gaussian Elimination – Gauss-Jordan Methodnull 运算量 /* Amount of Computation */§1 Gaussian Elimination – Amount of Computation由于计算机中乘除 /* multiplications / divisions */ 运算的时间远远超过加减 /* additions / subtractions */ 运算的时间,故估计某种算法的运算量时,往往只估计乘除的次数,而且通常以乘除次数的最高次幂为运算量的数量级。 Gaussian Elimination:(n k) 次(n k)2 次(n k) 次1 次(n i +1) 次null§1 Gaussian Elimination – Amount of Computation Complete Pivoting: Partial Pivoting: Gauss-Jordan Method:nullMatlab程序Matlab程序function y=gauss(a,b,n)
n=length(a);
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
b(i)=b(i)-a(i,k)*b(k);
end
end
nullx(n)=b(n)/a(n,n);
for k=n-1:-1:1
s=b(k);
for j=k+1:n
s=s-a(k,j)*x(j);
end
x(k)=s/a(k,k);
end
y=x;
null 输入数据:
a=[1 2 1 -3;2 5 0 -5;1 0 14 1;-3 -5 1 15];
b=[1;2;16;8]
gauss(a,b,n)
执行结果如下:
ans =
1 1 1 1