文档库 最新最全的文档下载
当前位置:文档库 › 追赶法解三对角矩阵

追赶法解三对角矩阵

追赶法解三对角矩阵
追赶法解三对角矩阵

实验追赶法解三对角方程组

一、实验目的

学会用追赶法解三对角方程组,并应用该算法于实际问题.

二、实验要求

给定三对角方程组,应用追赶法解得方程组的解。

三、实验内容

1、追赶法

2、以课本数值试验2为实例

3、如果有错,修改直至运行成功,查看运行结果;

四、实验环境

matlab

五、实验步骤和方法

1、程序设计

2、带入实例

3、撰写实验报告。

六、实验预习要求

得到实例的解

一、[源程序]

function x = my_zgf2(A,d,flag)

%MY_ZGF2 Summary of this function goes here

[m,n]=size(A); %计算矩阵的大小

if nargin==2; %输入变量等于2的时候,A中储存所有元素的值for i=1:n

a(i)=A(i+1,i);

b(i)=A(i,i);

c(i)=A(i,i+1);

end

a(1)=0; %补充不足的值

b(n)=A(n,n);

c(n)=0;

else

c=[A(1,:) 0]; %flag==1时

b=A(2,:);

a=[0 A(3,:)];

end

u(1)=b(1);

for i=2:n %第一次追赶,得到上、下三角矩阵

l(i)=a(i)/u(i-1);

u(i)=b(i)-c(i-1)*l(i);

end

y(1)=d(1); %解Ly=d

for i=2:n

y(i)=d(i)-l(i)*y(i-1);

end

x(n)=y(n)/u(n); %解Ux=y

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1))/u(i);

end

二、带入实例

A =

-2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 0

5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000

-2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 0

d= 8.1400 0 0 0 0 0 0 0

>> d=A(4,:);

my_zgf2(A,d,1)

ans =

2.0350 1.0174 0.5086 0.2541 0.1267 0.0626 0.0298 0.0119 >>

追赶法(经典计算)

一、算法理论 在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组 ??????? ? ??=???????? ?????????? ? ?-----n n n n n n n n n f f f f x x x x b a c b a c b a c b 121121111 22211 , 简记为f Ax =. 求解f Ax =等价于解两个三角形方程组: y f Ly 求,=;x y Ux 求,=.从而得到解三对角线方程组的追赶法公式: (1)计算{}i β的递推公式 ();1,,3,2,/,/111-=-==n i a b c b c i i i i i βββ (2)… (3) 解f Ly = ()();,,3,2,/,/11111n i a b y a f y b f y i i i i i i i =--==--β (4)解y Ux = .1,2,2,1,,1 --=-==+n n i x y x y x i i i i n n β 我们将计算系数 的过程称为追的过程,及n n y y y →→→→→→- 21121βββ 将计算方程组的解 的过程称为赶的过程。11x x x n n →→→- —

二、算法框图 ;

\ 三、 算法程序 #include <> #include <> #include<> #define N 20 double a[N], b[N], c[N-1], f[N], r[N]; int n; (1) void LUDecompose(); ???????? ??2100012100012100012100012A --------=??? ?? ?? ? ??=00001b 回车。 (2) 显示出 请输入下三角元素 输入4个a 值:-1 -1 -1 -1,回车。 (3) 显示出 请输入主对角线元素 输入5个b 值:2 2 2 2 2 ,回车。 (4) ! (5) 显示出 请输入上三角元素 输入4个c 值:-1 -1 -1 -1,回车。 (6) 显示出 请输入5个方程组右端顶:1 0 0 0 0,回车。 其解为????? ????166667 .0333333.0500000.0666667.0833333 .0 例2.用该程序计算三对角线方程组

追赶法解三对角程组

《数值分析》课程设计追赶法解三对角方程组 院(系)名称信息工程学院 专业班级10普本信计 学号100111014 学生姓名刘银朋 指导教师张荣艳 2013 年05 月31日

数值分析课程设计评阅书

课程设计任务书 2012—2013学年第二学期 专业班级:10普本信息与计算科学学号:100111014 姓名:刘银朋 课程设计名称:数值分析Ⅰ、Ⅱ 设计题目:追赶法解三对角方程组 完成期限:自2013 年05月21 日至2013年05 月31日共10天 设计依据、要求及主要内容: 一、设计目的 理解追赶法,掌握追赶法的算法设计以及关于追赶法的分析和综合应用,能 够较熟练的应用Matlab软件编写求解追赶法的程序和应用Matlab软件数据库软 件. 二、设计内容 (1)认真挑选有代表性的三对角方程组. (2)认真梳理解三对角方程组的解题思路. (3)比较追赶法和高斯消去法的计算精度. 三、设计要求 1.先用Matlab数据库中的相应的函数对选定的方程,求出具有一定精度的解. 2.然后使用所用的方法编写Matlab程序求解. 3.对于使用多个方程解同意问题的,在界面上要设计成菜单的形式. 计划答辩时间:2013年06 月 5 日 工作任务鱼工作量要求: 查阅文献资料不少于3篇,课程设计报告1篇不少于3000字. 指导教师(签字):教研室主任(签字): 批准日期:2013 年05 月20 日

追赶法解三对角方程组 摘要 本文主要通过运用追赶法来求解三对角方程组的问题.追赶法是用来求解三对角方程组的专用方法,对于三对角方程组,追赶法比Gauss消去法的计算量要小的多,本文主要介绍了追赶法的原理,并用Matlab编写求解程序,以实现对三对角方程组的求解,进一步解决实际中的问题.并且根据所得出的结果分析追赶法算法和高斯消去的法的计算精度. 关键词:追赶法,三对角方程组,追赶法的Matlab程序

追赶法求解三对角线性方程组

追赶法求解三对角线性方程组 一 实验目的 利用编程方法实现追赶法求解三对角线性方程组。 二 实验内容 1、 学习和理解追赶法求解三对角线性方程组的原理及方法; 2、 利用MATLAB 编程实现追赶法; 3、 举例进行求解,并对结果进行分。 三 实验原理 设n 元线性方程组Ax=d 的系数矩阵A 为非奇异的三对角矩阵 11222=(1)(n 1)()()a c b a c A a n c b n a n ??????????--?????? ………… 这种方程组称为三对角线性方程组。显然,A 是上下半宽带都是1的带状矩阵。设A 的前n-1个顺序主子式都不为零,根据定理2.5的推论,A 有唯一的Crout 分解,并且是保留带宽的。 其中L 是下三角矩阵,U 是单位上三角矩阵。利用矩阵相乘法,可以1112212(1)1u(n 1)()()1l u m l u A LU l n m n l n ????????????????==?????--????????????……………

得到: 由上列各式可以得到L 和U 。 引入中间量y ,令 y Ux =,则有: 已知 L 和d ,可求得y 。 则可得到y 的求解表达式: 11/1 2,3,,()(1)*y()=()[()(1)]/y d l i n m i y i li i di y i di m i y i li ==-+=--… 1111111/1(2)(1)(1)u (1)(11)/(1)(1)(1)l a l u c u c l mi bi i n a i m i i l i i n ci li ui ui ci li l i a i b i ui =*===≤≤+=+++≤≤-=?=+=+-+Ax LUx Ly d Ly d ====1112222(1)(n 1)(n 1)()()(n)(n)l y d m l y d l n y d m n l n y d ?????????????????????????=??????---?????????????????? ……………

追赶法

一、实验题目 用追赶法解线性三对角方程组: ????? ???????--=????????????????????????322141141141124321x x x x 二、实验目的 1.熟悉掌握追赶法法的基本原理和基本方法。 2.学会用追赶法法解简单的方程组。 三、实验原理 (1)f Ly =,求y ;(2)y Ux =,求x ; 从而得到解三对角线方程组的追赶法公式。 1. 计算的递推公式: 111/b c =β )/(1--=i i i i i a b c ββ 2. 解:f Ly = 111/b f y = a a b y a f y i i i i i i i )/()(11----=β 3. 解:y Ux = n n y x = 1+-=i i i i x y x β 四、实验内容及结果 原始数据:a=[1,1,1]; b=[2,4,4,4]; c=[1,1,1]; d=[1,-2,2,-3]; 追赶法解三对角方程组:

程序源代码 %machase.m function x=machase(a,b,c,d) %用途:追赶法解三对角方程组Ax=d %格式:x= machase(a,b,c,d) a为次下对角线元素向量,b主对角元素 % 向量,c为次上对角线元素向量,d为右端向量,x返回解向量 n=length(a); for k=2:n b(k)=b(k)-a(k)/b(k-1)*c(k-1); d(k)=d(k)-a(k)/b(k-1)*d(k-1); end x(n)=d(n)/b(n); for k=n-1:-1:1 x(k)=(d(k)-c(k)*x(k+1))/b(k); end 输入:a=[1,1,1]; b=[2,4,4,4]; c=[1,1,1]; d=[1,-2,2,-3]; machase(a,b,c,d) 结果:ans = 0.9615 -0.9231 0.7308 五、实验结果分析 追赶法为一种特殊的LU分解法。追赶法是求解三对角矩阵的常用方法,但从整体编程角度分析,其程序编写较迭代法复杂,但通用性较好。追赶法求解三对角矩阵不但节省存储单元,而且可以减少计算量。

实验3 追赶法解三对角方程组 2

《数值分析》实验3 一.实验名称:追赶法 二、实验目的: (1)学会用追赶法解三对角方程组。 三、实验要求 (1) 按照题目要求完成实验内容 (2) 写出相应的C 语言程序 (3) 给出实验结果 (4) 写出相应的实验报告 四、实验题目 1. 追赶法解线性方程组 ?????? ? ??=??????? ????????? ??------500021121121124321x x x x 2.用追赶法解下列n 阶方程组 123141271411514115141151415n n x x x x x ---????????????--????????????--=??????????????????--??????--?????? ?? 取n=10和n=100。 #include #include int main(){ int n=10,i,j,m=n+1; float a[m][m],u[m][m],l[m][m],t,x[m],y[m],b[m],d=1,e=-4,f=1; for(i=2;i<=n;i++) b[i]=-15; b[1]=-27; for(i=2;i<=n;i++) { a[i][i-1]=d; //2,1_n,n-1 a[i-1][i-1]=e; //1,1_n-1,n-1 a[i-1][i]=f; //1,2_n-1,n } a[n][n]=e; //n,n u[1][1]=a[1][1]; for(i=2;i<=n;i++)

{ l[i][i-1]=a[i][i-1]/u[i-1][i-1]; u[i][i]=a[i][i]-l[i][i-1]*a[i-1][i]; } y[1]=b[1]; for(i=2;i<=n;i++) y[i]=b[i]-l[i][i-1]*y[i-1]; x[n]=y[n]/u[n][n]; for(i=n-1;i>=1;i--) x[i]=(y[i]-a[i][i+1]*x[i+1])/u[i][i]; for(i=1;i<=n;i++) printf(" x[%d]=%f\n",i,x[i]); } x[1]=8.705771 x[2]=7.823085 x[3]=7.586571 x[4]=7.523196 x[5]=7.506216 x[6]=7.501665 x[7]=7.500446 x[8]=7.500119 x[9]=7.500031 x[10]=7.500008 x[11]=7.500002 x[12]=7.500000 x[13]=7.500000 x[14]=7.500000

【良心出品】MATLAB 追赶法求解三对角方程组的算法原理例题与程序

3)三对角形线性方程组 123456789104100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014x x x x x x x x x x -????????--????????--????--????????--????--????????--????--???????--??????-???? 7513261214455????????-?? ?? ??=??-?? ???? -?? ?????? ???-?? *(2,1,3,0,1,2,3,0,1,1)T x =--- 二、数学原理 设系数矩阵为三对角矩阵 1 122233111000000000 000000 n n n n n b c a b c a b A a b c a b ---?? ? ? ?= ? ? ? ? ?? ? 则方程组Ax=f 称为三对角方程组。 设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记 1 122 233 1 10 00010 000 0001000 000100,00000000 00 0001n n n n b L U γαβγββγβ--???? ? ? ? ? ? ??== ? ? ? ? ? ? ? ? ? ??? ? ? ? 可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。

事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。其计算公式为: 1111, 1111 ,111 ,2,3,,,1,2,,1i i i i i i i i i i i i i i n n i i i i c f b y i n c a b a f y y x y i n n x y x βγββαβγγβαβγ--+? ===?? =?? ?==-= ??? -?=?? =??=--?=-??对对(*) 三、程序设计 function x=chase(a,b,c,f) %求解线性方程组Ax=f,其中A 是三对角阵 %a 是矩阵A 的下对角线元素a(1)=0 %b 是矩阵A 的对角线元素 %c 是矩阵A 的上对角线元素c(n)=0 %f 是方程组的右端向量 n=length(f); x=zeros(1,n);y=zeros(1,n); d=zeros(1,n);u= zeros(1,n); %预处理 d(1)=b(1); for i=1:n-1 u(i)=c(i)/d(i); d(i+1)=b(i+1)-a(i+1)*u(i); end %追的过程 y(1)=f(1)/d(1); for i=2:n y(i)=(f(i)-a(i)*y(i-1))/d(i); end %赶的过程 x(n)=y(n); for i=n-1:-1:1 x(i)=y(i)-u(i)*x(i+1); end

追赶法解三对角矩阵

实验追赶法解三对角方程组 一、实验目的 学会用追赶法解三对角方程组,并应用该算法于实际问题. 二、实验要求 给定三对角方程组,应用追赶法解得方程组的解。 三、实验内容 1、追赶法 2、以课本数值试验2为实例 3、如果有错,修改直至运行成功,查看运行结果; 四、实验环境 matlab 五、实验步骤和方法 1、程序设计 2、带入实例 3、撰写实验报告。 六、实验预习要求 得到实例的解 一、[源程序] function x = my_zgf2(A,d,flag) %MY_ZGF2 Summary of this function goes here [m,n]=size(A); %计算矩阵的大小 if nargin==2; %输入变量等于2的时候,A中储存所有元素的值for i=1:n a(i)=A(i+1,i); b(i)=A(i,i); c(i)=A(i,i+1); end a(1)=0; %补充不足的值 b(n)=A(n,n); c(n)=0; else c=[A(1,:) 0]; %flag==1时 b=A(2,:); a=[0 A(3,:)]; end

u(1)=b(1); for i=2:n %第一次追赶,得到上、下三角矩阵 l(i)=a(i)/u(i-1); u(i)=b(i)-c(i-1)*l(i); end y(1)=d(1); %解Ly=d for i=2:n y(i)=d(i)-l(i)*y(i-1); end x(n)=y(n)/u(n); %解Ux=y for i=n-1:-1:1 x(i)=(y(i)-c(i)*x(i+1))/u(i); end 二、带入实例 A = -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 0 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 5.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 -2.0000 0 d= 8.1400 0 0 0 0 0 0 0 >> d=A(4,:); my_zgf2(A,d,1) ans = 2.0350 1.0174 0.5086 0.2541 0.1267 0.0626 0.0298 0.0119 >>

追赶法解三角矩阵

#include"iostream" #include"cmath" using namespace std; double a[100][100],l[100][100],u[100][100],b[100],y[100],x[100]; int n,s,i; void main(){ cout<<"请输入三对角阵的规模:"<>n; cout<<"请输入三对角阵:"<>a[i][s]; } cout<>b[i]; } for( i=0;i

数值计算实验解三对角线性方程组的追赶法

实验课程名称计算机数值计算 实验项目名称追赶法 年级10级 专业信计 学生姓名成富 学号1007010167 理学院 实验时间:2012 年 3月 26 日

学生实验室守则 一、按教学安排准时到实验室上实验课,不得迟到、早退和旷课。 二、进入实验室必须遵守实验室的各项规章制度,保持室内安静、整洁,不准在室内打闹、喧哗、吸烟、吃食物、随地吐痰、乱扔杂物,不准做与实验内容无关的事,非实验用品一律不准带进实验室。 三、实验前必须做好预习(或按要求写好预习报告),未做预习者不准参加实验。 四、实验必须服从教师的安排和指导,认真按规程操作,未经教师允许不得擅自动用仪器设备,特别是与本实验无关的仪器设备和设施,如擅自动用或违反操作规程造成损坏,应按规定赔偿,严重者给予纪律处分。 五、实验中要节约水、电、气及其它消耗材料。 六、细心观察、如实记录实验现象和结果,不得抄袭或随意更改原始记录和数据,不得擅离操作岗位和干扰他人实验。 七、使用易燃、易爆、腐蚀性、有毒有害物品或接触带电设备进行实验,应特别注意规范操作,注意防护;若发生意外,要保持冷静,并及时向指导教师和管理人员报告,不得自行处理。仪器设备发生故障和损坏,应立即停止实验,并主动向指导教师报告,不得自行拆卸查看和拼装。 八、实验完毕,应清理好实验仪器设备并放回原位,清扫好实验现场,经指导教师检查认可并将实验记录交指导教师检查签字后方可离去。 九、无故不参加实验者,应写出检查,提出申请并缴纳相应的实验费及材料消耗费,经批准后,方可补做。 十、自选实验,应事先预约,拟订出实验方案,经实验室主任同意后,在指导教师或实验技术人员的指导下进行。 十一、实验室内一切物品未经允许严禁带出室外,确需带出,必须经过批准并办理手续。

(完整word版)追赶法求解三对角方程及其算例

追赶法求解三对角方程组 要求:对于给定的三对角系数矩阵和右端项,可以求 解线性代数方程组 一、 追赶法的数学理论 设系数矩阵为三对角矩阵 112223311100000000 000000 n n n n n b c a b c a b A a b c a b ---?? ? ? ?= ? ? ? ? ?? ? 则方程组Ax=f 称为三对角方程组。 设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记 1 122 233 1 10 00010 000 0001000 000100,00000000 00 0001n n n n b L U γαβγββγβ--???? ? ? ? ? ? ??== ? ? ? ? ? ? ? ? ? ??? ? ? ? 可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。

事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。其计算公式为: 1111, 1111 ,111 ,2,3,,,1,2,,1i i i i i i i i i i i i i i n n i i i i c f b y i n c a b a f y y x y i n n x y x βγββαβγγβαβγ--+?===?? =?? ?==-= ??? -?=?? =??=--?=-??对对(*) 二、 追赶法的算法和流程图 1.预处理 生成方程组的系数i u 及其除数i d ,事实上,按式(*)可交替生成i d 与i u : 1d →1u →2d →…→1-n u →n d 其计算公式为 ??? ??-=-===+++1,...,2,1, ,/c u b 111 i i 11n i u a b d d d i i i i i 2.追的过程 顺序生成方程组右端: i y →2y →…→n y 据式(*)的计算公式为 n i d y a f y d f y i i i i i ,...,3,2, /)(/1111=?? ? -==-

追赶法求解三对角线性方程组

作业五:编写用追赶法求解三对角线性方程组的标准程序,并求下列方程组的解。matlab 1233212417259x x x -???????????? =-?????????????????? function [ x,flag ] =zgf(A,b) % A 为方程组的系数矩阵 % b 为方程组的右端项 % x 为方程组的解 % flag 为指标向量,flag=‘failure ’表示失败,flag=‘OK ’表示成功 [n,m]=size(A);n=length(b); [L,U,flag]=LU_decom(A); for i=1:n if i==1 y(i)=b(i)/L(i,i); else y(i)=(b(i)-L(i,i-1)*y(i-1))/L(i,i); end end x(n)=y(n)/U(n,n); for k=n-1:-1:1 y(k)=y(k)-U(k,k+1)*x(k+1);

x(k)=y(k)/U(k,k); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [L,U,flag]=LU_decom(A) [n,m]=size(A); if n~=m error('The rows and columns of matrix A must be equal!'); return; end L=eye(n); U=zeros(n); flag='OK'; for k=1:n for j=k:n z=0; for q=1:k-1 z=z+L(k,q)*U(q,j); end U(k,j)=A(k,j)-z; end if abs(U(k,k))

三对角方程组的追赶法

2013-2014(1)专业课程实践论文题目:三对角方程组的追赶法

一、算法理论 在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组 11112222211111n n n n n n n n n b c x f a b c x f a b c x f a b x f -----????? ? ??? ? ??? ? ??? ?= ??? ? ??? ? ??? ?????? ? , 简记为Ax f =。 求解Ax f =:等价于解两个三角形方程组 ,Ly f y =求;,Ux y x =求.从而得到解三对角线方程组的追赶法公式: (1)计算{}i β的递推公式 ()111/,/,2,3,,1;i i i i i c b c b a i n βββ==-=- (2) 解Ly f = ()()11111/,/,2,3,,;i i i i i i i y f b y f a y b a i n β--==--= (3)解Ux y = 1,,1,2,2,1.n n i i i i x y x y x i n n β+==-=-- 我们将计算系数 12112n n y y y βββ-→→→→→→ 及的过程称为追的过程, 将计算方程组的解 11n n x x x -→→→ 的过程称为赶的过程。

#include #include #include #define N 20 double a[N], b[N], c[N-1], f[N], r[N]; int n; int i; void LUDecompose(); // LU分解 void backSubs(); // 回代 void main() { printf("请输入方程的维数n="); scanf("%d",&n); getchar(); if(n>N||n<=0) { printf("由于该维数过于犀利, 导致程序退出!"); return; } printf("\n输入下三角元素\n"); printf("输入%d个a值: ", n-1); for (i=1; i

追赶法解线性方程组报告

计算方法与实习实验报告 4.编写用追赶法解三对角线性方程组的程序,并解下列方程组:(1) 2X1-X2=5 -X1+2X2-X3=-12 -X2+2X3-X4=11 -X3+2X4=-1 #include #include void main(void) { doublei=0,j=0,k=0,x1,x2,x3,x4; double a[4][5]; cout<<"请输入对应的增广矩阵:"<>setw(12)>>a[z][w]; } } i=a[1][0]/a[0][0]; a[1][0]=a[1][0]-i*a[0][0]; a[1][1]=a[1][1]-i*a[0][1]; a[1][2]=a[1][2]-i*a[0][2]; a[1][3]=a[1][3]-i*a[0][3]; a[1][4]=a[1][4]-i*a[0][4]; j=a[2][1]/a[1][1]; a[2][1]=a[2][1]-j*a[1][1]; a[2][2]=a[2][2]-j*a[1][2]; a[2][3]=a[2][3]-j*a[1][3]; a[2][4]=a[2][4]-j*a[1][4]; k=a[3][2]/a[2][2]; a[3][2]=a[3][2]-k*a[2][2]; a[3][3]=a[3][3]-k*a[2][3]; a[3][4]=a[3][4]-k*a[2][4]; cout<<"对应的三角矩阵为:"<

计算方法追赶法解三对角矩阵方程

计算方法实验报告 实验:追赶法解三对角矩阵方程 1.实验目的 ①熟悉matlab 软件的使用 ②掌握追赶法的基本方法 ③编程实现追赶法解三对角矩阵方程 2.实验内容 題目:用追赶法解方程组 ????????????????--------4114114114114????????????????54321x x x x x =??????? ?????????100200200200100 3.求解: 1.追赶法代码 function [x]=ZhuiGan(a,b,c,f) r=size(a); m=r(2); r=size(b); n=r(2); if size(a)~=size(b)|(m~=n-1)|size(b)~=size(f) error('变量不匹配,检查变量输入情况!'); end p=ones(1,m); Y=ones(1,n); x=Y; p(1)=a(1)/b(1); Y(1)=f(1)/b(1); t=0; for i=2:m t=b(i)-a(i-1)*p(i-1); p(i)=c(i)/t; Y(i)=(f(i)-a(i-1)*Y(i-1))/t;

end Y(n)=(f(n)-a(n-1)*Y(n-1))/(b(n)-a(n-1)*p(n-1)); x(n)=Y(n);for i=n-1:-1:1 x(i)=Y(i)-p(i)*x(i+1); end 2.输入 >> a=-1*ones(1,4); >> c=a; >> b=4*ones(1,5); >> f=[100 200 200 200 100]; >> [x]=ZhuiGan(a,b,c,f) 4.结果 x =46.15384615384615 84.61538461538461 92.30769230769231 84.61538461538461 46.15384615384615 3总结 追赶法具有计算量少,方法简单,算法稳定等优点。

追赶法

9.用追赶法解三对角方程组A x=b,其中 A= ( 2?10 ?1 2?1 0?12 ?1 0 0?1 2?1 0 0 0 ?1 2) ,b= ( 1 0) . 解:对于对角占优的三对角线性矩阵可用追赶法求解采用Fortran编程计算如下: program main implicit none integer::i,j,in,nb real::x real::a(1:100),b(1:100),c(1:100),f(1:100) real::d(1:100),y(1:100),v(1:100) open(unit=100,file='a.dat') open(unit=101,file='b.dat') open(unit=102,file='c.dat') open(unit=103,file='f.dat') open(unit=104,file='v.dat') do while(.not.eof(100)) read(unit=100,fmt=*)in,x a(in)=x end do nb=0 do while(.not.eof(101)) read(unit=101,fmt=*)in,x b(in)=x nb=nb+1 end do do while(.not.eof(102)) read(unit=102,fmt=*)in,x c(in)=x end do do while(.not.eof(103))

read(unit=103,fmt=*)in,x f(in)=x end do d(1)=c(1)/b(1) do i=2,nb-1 d(i)=c(i)/(b(i)-a(i)*d(i-1)) end do y(1)=f(1)/b(1) do i=2,nb y(i)=(f(i)-a(i)*y(i-1))/(b(i)-a(i)*d(i-1)) end do v(nb)=y(nb) do i=nb-1,1,-1 v(i)=y(i)-d(i)*v(i+1) end do write(unit=104,fmt=201)'y(i)',',','x(i)' do i=1,nb write(unit=104,fmt=200)y(i),',',v(i) end do 200 format(f7.4,a1,f7.4) 201 format(a7,a1,a7) end program 其中a.dat、b.dat、c.dat和f.dat的内容分别如图1、图2、图3和图4所示;计算结果保存在v.dat中,如图5所示: 图1 图2 图3 图4 图5

追赶法构造过程

追赶法构造过程 追赶法仍然保持LU 分解特性,它是一种特殊的LU 分解。追赶法充分利用了系数矩阵的三对角特点,而且使之分解更简单,得到对三对角线性方程组的快速解法。 解出。 及可由时, 当,表示 ,则三对角方程的矩阵若记的计算公式,为: 和的及的元素于是得计算,,,有: 由矩阵乘法及相等定义y Ux d Ly LU A d Ax d d d d p b q n k c q a p b q q U p L n k c b p q a q p b q T n k k k k k k k k k i i i k k k k k k k k k =====-========+==--------),,,() ,,3,2() ,,3,2(211 111 1 111111 1 γγγγγ????????????????????????????????=????????????????----n n n n n n n n q q q p p p b a c b a c b a c b Doolittle 1221132111222 111111γγγ 分解形式 矩阵

2) 追赶法算法 1.输入变量个数n 、系数矩阵对应的三个向量a,b,c 、常数项b 2. For k=2,3,…,n 2.1 如果b k-1=0,则输出“追赶法失败”提示并终止 2.2 a k ? a k /b k-1 2.3 b k ?b k - a k *c k-1 2.4 d k ?d k - a k *d k-1 3.For k=n,n-1,…,1 3.1 x k ? (d k - c k *x k+1)/b k 时不能进行。 消元法的缺点,即当在消元法,因此也存 来源于空间,但是因为追赶法节省了计算时间和存贮程, 。追赶法的特殊求解过法次数仅有较简单,计算量、乘除追赶法。 组的方法亦称为追赶法用这组公式解线性方程,,, 分解的计算公式: 综合以上,求解出计算公式为: 0451 ,,1)(,,3,21 ,,2,1)(,,3,211111111111 1=-?????????-=-==-==-====--=-===-==+---+-k k k k k k n n n k k k k k k k k k k k k k k k k n n n k k k k q Gauss Gauss n n k q x c y x q y x y p d y n k c p b q q a p d y b q Doolittle n n k q x c y x q y x n k y p d y d y

追赶法求解三对角线性方程组

追赶法求解三对角线性方程组 一 实验目的 利用编程方法实现追赶法求解三对角线性方程组。 二 实验容 1、 学习和理解追赶法求解三对角线性方程组的原理及方法; 2、 利用MATLAB 编程实现追赶法; 3、 举例进行求解,并对结果进行分。 三 实验原理 设n 元线性方程组Ax=d 的系数矩阵A 为非奇异的三对角矩阵 11222=(1)(n 1)()()a c b a c A a n c b n a n ??????????--?????? ………… 这种方程组称为三对角线性方程组。显然,A 是上下半宽带都是1的带状矩阵。设A 的前n-1个顺序主子式都不为零,根据定理2.5的推论,A 有唯一的Crout 分解,并且是保留带宽的。 其中L 是下三角矩阵,U 是单位上三角矩阵。利用矩阵相乘法,可以1112212(1)1u(n 1)()()1l u m l u A LU l n m n l n ????????????????==?????--????????????……………

得到: 由上列各式可以得到L 和U 。 引入中间量y ,令y Ux =,则有: 已知 L 和d ,可求得y 。 则可得到y 的求解表达式: 11/1 2,3,,()(1)*y()=()[()(1)]/y d l i n m i y i li i di y i di m i y i li ==-+=--… 1111111/1(2)(1)(1)u (1)(11)/(1)(1)(1)l a l u c u c l mi bi i n a i m i i l i i n ci li ui ui ci li l i a i b i ui =*===≤≤+=+++≤≤-=?=+=+-+Ax LUx Ly d Ly d ====1112222(1)(n 1)(n 1)()()(n)(n)l y d m l y d l n y d m n l n y d ?????????????????????????=??????---?????????????????? ……………

相关文档
相关文档 最新文档