代数方程组数值解法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 追赶法消元过程
w1 c1 / b1 w i ci /(bi a i 1 w i 1 ) ( i 2,3, , n 1) g1 d 1 / b1 g i (d i a i 1 g i 1 ) /(bi a i 1 w i 1 ) ( i 2,3, , n 1)
5 x1 x2 x3 x4 4 x1 10x2 x3 x4 12 x1 x2 5 x3 x4 8 x1 x2 x3 10x4 34
7.2 迭代法解线性方程组 7.2.1 雅可比迭代法
例:用雅可比迭代解方程组
10 x1 x 2 2 x 3 7.2 x1 10 x 2 2 x 3 8.3 x x 5 x 4 .2 2 3 1
• 例7-2 用追赶法求解以下方程组
• clear,clc • a=[1 1 0 0 0;1 2 1 0 0;0 1 3 1 0;0 0 1 4 1;0 0 0 1 5]; %方程组系数矩阵赋值 • b=[3 8 15 24 29]'; %方程组常数向量赋值 • c=[a b]; • for i=1:length(b) • d(i)=a(i,i); • end • for i=1:length(b)-1 • e(i)=a(i,i+1); %对角线以上 • f(i)=a(i+1,i); %对角线以下 • end
x2 a1 n xn b1 x1 a12
以上方程分别乘 (- a i1 ) 后加到 第i行(i=2,3,…,n),得
x1 a12 x 2 a1 n x n b1 a 22 x 2 a 2 n x n b2 a n 2 x 2 a nn x n bn
• 上三角形方程组,将 方程组加工成三角形的 过程称为消元过程
(1) (1) (1) (1) 继续计算可得xn-2, x1 a12 x2 a13 x3 a1 x b n n 1 xn-3 ,…x1的值 (2) (2) (2) x2 a23 x3 a2 n xn b2 xn1 bn1 an1, n xn ( n 1) ( n 1) 计算可得xn-1的值 xn 1 an 1,n xn bn 1 (n) x b 直接得到xn的值 n n
7
代数方程组数值解法
代数方程组 线性 非线性
• 线性代数 方程组求解 方法
直接法:通过有限步运算,减少或消 去未知量个数,求得方程精确解 迭代法:反复运用迭代格式,逐步逼 近方程精确解的方法
• • • • • • • •
直接求解法: • 高斯消元法 • 列主元高斯消去法 • 追赶法 迭代解法: – 雅可比(Jacobian)迭代 – 高斯-赛德尔(Gauss- Siedel)迭代 – 松弛(SOR)迭代
• • • • • • • • • •
for i=1:length(b) c(i,:)=c(i,:)/c(i,i); end end a=c(1:length(b),1:length(b)); b=c(:,length(b)+1); n=length(b); x(n)=0; while n>=1; %回代过程 x(n)=b(n)/a(n,n)-a(n,:)*x'./a(n,n); %x为未知变量 • n=n-1; • end
7.1 直接法解线性方程组 7.1.1 高斯(Gauss)消去法 • 方法及步骤
第1行各项除以a11后得
a11 x1 a12 x2 a1n xn b1 a x a x a x b 21 1 22 2 2n n 2 an1 x1 an 2 x2 ann xn bn
来自百度文库
bn1 an
x d 1 1 x2 d 2 x n d n c n 1 bn
追赶法的步骤: 1、消元:将对角线元素化为1,并将下对角元素消去 2、进行回代计算
• h=find(abs(c(:,k))==g); % • e=max(h); • f=c(e,:); • c(e,:)=c(k,:); %所选列主元所在行与原 主元行换行 • c(k,:)=f; • d=c(k,k); • for i=(k+1):length(b); %消元过程 • c(i,:)=c(i,:)-c(k,:)*c(i,k)/d; • end
a11 x1 a12 x2 a1n xn b1 a x a x a x b • 设第l 个方程 21 1 22 2 2n n 2 系数alk 最大 k 1 k 1 a max a ik kin an1 x1 an 2 x2 ann xn bn lk
7.1.2 列主元高斯(Gauss)消去法
• 消元过程要用元素 akk中作除数,如果akk的绝对值 很小或者等于 0 ,计算过程中精度会严重损失甚至 溢出中断计算。预防办法是事先对方程进行处理
• 处理方法:每次消元前,检查所要加工的方程组 中变元 xk 的各个系数akk,ak+1,…,ank,挑选出绝 对值最大者作为第k步主元素。
• • • • • • • • • •
for i=1:length(b) c(i,:)=c(i,:)/c(i,i); end end a=c(1:length(b),1:length(b)); b=c(:,length(b)+1); n=length(b); x(n)=0; while n>=1; %回代过程 x(n)=b(n)/a(n,n)-a(n,:)*x'./a(n,n); % x 为未知变量 • n=n-1; • end • x
1
w1 1 w2 1
g1 g2
消元后 形式为
wn 1 1 gn
回代过程
xn gn
• 特点:计算量 很小,所需存贮 量小,三对角线 以外的零元素不 占存贮空间,程 序编写容易。
x i g i w i x i 1 ( i n 1, n 2, 1)
• n=length(b);x(n)=g(n); %回代过程(赶 的过程) • for i=(n-1):-1:1 • x(i)=g(i)-w(i)*x(i+1); • end • for i=1:length(x) • fprintf('\nx[%d]=%.2f',i,x(i)) %结果 输出 • end
%列主元高斯消去法求解
• • • • • • • clear a=[2 -1 3;4 2 5;1 2 0]; %方程组系数矩阵 b=[1;4;7]; %方程组常数向量赋值 c=[a,b]; for k=1:(length(b)-1); g=max(abs(c(k:length(b),k))); %选 取列主元
•高斯(Gauss)消去法 第2行各项除以a22后得 x1 a12 x 2 a1n x n b1 a 22 x 2 a 2 n x n b2 x2 a 23 x3 a2 n xn b2 将 以 上 方 程 分 别 乘 ( a x a x b n2 2 nn n n ai2)后加到第i行 (i=3,…,n),得
•7.1.3 追赶法解三对角线方程 组 b x c x
1 1 1 2
a 2 x1 b2 x 2 c2 x 3 ................................... a k x k 1 bk x k ck x k 1 .................................... a n 1 x n 2 bn 1 x n 1 cn 1 x n a n x n 1 bn x n
d1 d2 dk d n 1 dn
• 系数矩阵 是三对角 矩阵—— 只有主对 角线和相 邻的两条 对角线上 有非零元 素,其余 元素为零。
• 追赶法是高斯消去法用于解三对角矩阵的简化形 式,这种方法比较简单,计算量小,节省存贮量。
•三对角型方程组的系数矩阵
b1 c1 a b c 2 2 a i bi ci a n 1
• w(1)=e(1)/f(1);g(1)=b(1)/d(1); %消元 过程(追的过程) • for i=2:length(b)-1 • w(i)=e(i)/(d(i)-f(i-1)*w(i-1)); • end • for i=2:length(b) • g(i)=(b(i)-f(i-1)*g(i-1))/(d(i)-f(i1)*w(i-1)); • end
• 将第 l 个方程与第k个方程互换位置,也就是将 第 l 行与第k行的全部元素互换,使alk 成为新的主 元素akk,然后再进行消元。
例7-1 分别用Gauss消去和列主元Gauss消去求解 方程组 2 x x 3 x 1
4 x1 2 x 2 5 x 3 4 x 2x 7 2 1
•高斯(Gauss)消去法的回代过程
x n bn •逆 序 回 代 可 求 n (i ) (i ) x b a ,2,1. 得所有未知数 i i j x j i n 1, i j i 1 消元过程:通过减少变元个数将方程加工 •高 斯 (Gauss) 为上三角形方程组 消去法 回代过程:逆序回代求得未知数的解
1 2 3
解 MATLAB中,求解线性方程组最方便的是直 接使用左除符号 ‘\’,只须写为‚X=A\b‛,即 可求解。 为说明高斯消去和列主元高斯消去的求解过程,仍 按算法步骤编程计算。
高斯消去和列主元高斯消去的计算结果 x= 9 -1 -6
%高斯消去法求解
• • • • • • • • • clear a=[2 -1 3;4 2 5;1 2 0]; %方程组系数矩阵 b=[1;4;7]; %方程组常数向量赋值 c=[a,b]; for k=1:(length(b)-1); %消元过程 d=c(k,k); for i=(k+1):length(b); c(i,:)=c(i,:)-c(k,:)*c(i,k)/d; end
变元x2…xn的N-1阶方 x1 a12 x 2 a1n x n b1 程组 x 2 a 2 n x n b2
a 3 n x n b2 a 3 n x n a nn x n bn
N-2阶方程组
• 重复以上过程,n步后,得到以下方程组
(1) (1) (1) x1 a12 x2 a13 x3 a1(1) x b n n 1 (2) (2) (2) x2 a23 x3 a2 x b n n 2 ( n 1) ( n 1) x a x b n 1 n 1, n n n 1 (n) x b n n
代入一组近似值
•首先分离出x1、x2、x3