用追赶法求解三对角方程组Ax
- 格式:doc
- 大小:26.00 KB
- 文档页数:2
matlab追赶法求解方程组方程组是数学中常见的问题之一,解决方程组可以帮助我们理解和解决实际问题。
在数值计算中,matlab是一种常用的工具,它提供了许多求解方程组的方法。
其中,追赶法是一种常用的方法之一,它可以高效地求解三对角线方程组。
三对角线方程组是指方程组中只有主对角线和两个相邻的次对角线上有非零元素,其余元素均为零。
这种方程组在实际问题中经常出现,例如求解热传导方程、电路分析等。
追赶法是一种特殊的高斯消元法,它通过对方程组进行变换,将其转化为一个上三角形方程组和一个下三角形方程组,从而简化求解过程。
追赶法的基本思想是通过迭代的方式,逐步消去次对角线上的元素,最终得到方程组的解。
具体步骤如下:1. 将原方程组表示为矩阵形式,设为A*X=B,其中A是一个n×n的矩阵,X和B是n维列向量。
2. 对A进行LU分解,得到一个上三角矩阵U和一个下三角矩阵L,使得A=L*U。
3. 将方程组A*X=B转化为L*U*X=B。
4. 令Y=U*X,将方程组转化为L*Y=B。
5. 通过迭代的方式,逐步求解Y和X。
首先求解L*Y=B,然后求解U*X=Y。
6. 求解L*Y=B时,从第一行开始,逐行求解Y的每个分量。
设第i 行的元素为y(i),则有y(i)=B(i)-L(i,i-1)*y(i-1),其中L(i,i-1)是L矩阵中第i行第i-1列的元素。
7. 求解U*X=Y时,从最后一行开始,逐行求解X的每个分量。
设第i行的元素为x(i),则有x(i)=(Y(i)-U(i,i+1)*x(i+1))/U(i,i),其中U(i,i+1)是U矩阵中第i行第i+1列的元素。
通过以上步骤,我们可以得到方程组的解X。
追赶法是一种高效的求解三对角线方程组的方法,它的时间复杂度为O(n),其中n是方程组的维数。
相比于其他求解方法,追赶法具有计算量小、速度快的优势。
在matlab中,我们可以使用tridiag函数来实现追赶法求解方程组。
一、实验题目用追赶法解线性三对角方程组:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡--=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡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 ab 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.mfunction 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:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(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分解法。
追赶法是求解三对角矩阵的常用方法,但从整体编程角度分析,其程序编写较迭代法复杂,但通用性较好。
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 <stdio.h>#include <math.h>#include<stdlib.h>#define N 20double 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<n; i++)scanf("%lf", &a[i]);getchar();printf("\n输入主对角线元素\n");printf("输入%d个b值: ", n);for (i=0; i<n; i++)scanf("%lf", &b[i]);getchar();printf("\n输入上三角元素\n");printf("输入%d个c值: ", n-1);for (i=0; i<n-1; i++)scanf("%lf", &c[i]);getchar();printf("\n输入%d个方程组右端项: \n", n);for (i=0; i<n; i++)scanf("%lf", &f[i]);getchar();LUDecompose();backSubs();printf("\n线性方程组的解为: \n");for (i=0; i<n; i++)printf("x%d=%lf\n", i+1, f[i]);}void LUDecompose(){ //α被b取代, β被c取代, 以节省存储空间c[0]=c[0]/b[0];for(i=1;i<n-1;i++){r[i]=a[i];b[i]=b[i]-r[i]*c[i-1];c[i]=c[i]/b[i];}r[i]=a[i];b[i]=b[i]-r[i]*c[i-1];}void backSubs(){ // y被f取代, x也被f取代, 以节省存储空间f[0]=f[0]/b[0];for(i=1; i<n; i++)f[i]=(f[i]-r[i]*f[i-1])/b[i];f[n-1]=f[n-1];for(i=n-2;i>=0;i--)f[i]=f[i]-c[i]*f[i+1];}四、 算法实现例1.用该程序计算三对角线方程组2100012100A 012100012100012⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭---=-----, 10000b ⎛⎫⎪ ⎪⎪= ⎪ ⎪ ⎪⎝⎭计算其方程组的解。
在探讨MATLAB追赶法解101阶三对角方程组之前,我们首先需要了解什么是追赶法和什么是三对角方程组。
追赶法又称托马斯算法,是一种用于求解带状矩阵(即只有主对角线和两条相邻的对角线上有非零元素的矩阵)的线性方程组的方法。
而三对角矩阵就是只有主对角线和两条相邻的对角线上有非零元素的矩阵。
在实际应用中,求解带状矩阵的线性方程组是非常常见的,特别是在数值计算和科学工程领域。
现在,让我们深入探讨MATLAB追赶法解101阶三对角方程组的方法和具体步骤。
一、MATLAB追赶法解101阶三对角方程组1. 概念介绍101阶三对角方程组是一个非常大的线性方程组,通常使用传统的高斯消元法来求解会耗费大量的时间和计算资源。
而MATLAB追赶法通过利用三对角矩阵的特殊性质,可以有效地简化计算过程,并且节省大量的内存和计算资源。
2. 追赶法步骤(1)将原方程组化为追赶法所需的形式;(2)利用追赶法求解三对角线性方程组。
二、追赶法求解101阶三对角方程组的实现过程1. 将原方程组化为追赶法所需的形式对于101阶三对角方程组,我们首先需要将其化为追赶法所需的形式。
这个过程涉及到选取合适的追赶元和追赶子以及对原方程组的变形,将其化为追赶法能够直接处理的形式。
2. 利用追赶法求解线性方程组一旦将原方程组化为追赶法所需的形式,我们就可以利用追赶法对其进行求解。
追赶法的核心是通过追赶子的迭代计算,逐步求得线性方程组的解。
在MATLAB中,可以使用内置的追赶法求解函数,也可以编写自定义的追赶法算法来实现对101阶三对角方程组的求解。
三、个人观点和理解在实际工程和科学计算中,追赶法是一种非常有效的求解带状矩阵线性方程组的方法。
对于大规模的三对角方程组,特别是高阶的情况,传统的直接求解方法往往会遇到内存和计算资源的限制,而追赶法能够通过精巧的迭代计算,在保证解的精度的显著提高计算效率。
在MATLAB中,通过调用内置的追赶法函数,可以快速地求解大规模的三对角方程组,极大地方便了工程实践中的数值计算工作。
云南大学数学与统计学实验教学中心实验报告一、实验目的加强"追赶法"在解方程组中的应用,掌握多种不同的解线性方程组的解法以及编程的应用二、实验内容用追赶法解下列严格对角优势的三对角线方程组⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡--------4114114114114⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡10020020020010054321x x x x x三、实验环境C 语言,Turboc四.实验方法追赶法;其算法如下:(1)计算::/i i i i c c b β← )/(i i i i i c c c b a ←- (i=2,3,4……n-1)(2)解111/LY=f:x b x ← 111/)(f y α=()/()i i i i i i i x a x b a c x ←-- (i=2,3,4……,n)1()/()i i i i i f r y y α-=- (3)解1:i i i i x c x UX Y x +←-= (i=n-1,n-2,……,2,1) 1)(n n i i i i y x y x x β+==-不用做,五、实验过程1实验步骤(1)编程: 根据所用算法及选用语言编出源程序(2). 开机, 打开所用语言系统输入所编源程序.(3). 调试程序, 修改错误直至能正确运行.(4). 运行程序并输出计算结果.2 关键代码及其解释#include <stdio.h> #include <conio.h> #include <math.h> /*预处理指令*/ #define MAX_n 100 /*宏定义,即最多可输入100阶方阵*/#define PRECISION 0.000001 /*精度*/void SulutionOutput(float x[],int n) /*输出方程组的解*/ /*带分号的为声明*/void TriDiagonalMatrixInput(float a[],float b[],float c[],float f[],int n)/*三对角元素的输入*/int Z_G_method(float a[],float b[],float c[],float f[],int n) /*三对角方程组求解—追赶法*/void main() /*主函数*/{int n;float a[MAX_n],b[MAX_n],c[MAX_n], d[MAX_n],f[MAX_n]; /*定义数组*/ printf("\nInput n=");scanf("%d",&n);TriDiagonalMatrixInput(a,b,c,,d,f,n); /*以下三行均为调用函数声明*/Z_G_method(a,b,c,,d,f,n);SulutionOutput(f,n);}3 调试过程1.本打算用递归调用,但是对那个不太熟悉,就改为用循环了;2.首先用do……while循环,出现语法错误太多;无法调试;后改为了do……while循环了;5.逐步调试修改程序,达到预期结果;六、实验总结1.遇到的问题及解决过程(1)对C语言掌握不太好,编写程序时语法错误较多.解决过程:耐心修改,逐步排除!(2)首先对牛顿法掌握不太好.解决过程:认真看书,问同学。
3)三对角形线性方程组123456789104100000000141000000001410000000014100000000141000000001410000000014100000000141000000001410000000014x x x x x x x x x x -⎡⎤⎡⎤⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎥⎢⎥--⎢⎥⎢⎥--⎢⎥⎢⎥⎢⎢⎥--⎢⎢⎥⎢⎢⎥-⎣⎦⎣⎦7513261214455⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥=⎢⎥-⎢⎥⎢⎥⎢⎥-⎢⎥⎥⎢⎥⎥⎢⎥⎥⎢⎥-⎣⎦*(2,1,3,0,1,2,3,0,1,1)T x =--- 二、数学原理设系数矩阵为三对角矩阵1122233111000000000000000n n n nn b c a b c a b A a b c a b ---⎛⎫ ⎪ ⎪ ⎪=⎪ ⎪ ⎪⎪ ⎪⎝⎭则方程组Ax=f 称为三对角方程组。
设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记1122233110000100000001000000100,00000000000001n n nn b L U γαβγββγβ--⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪ ⎪ ⎪∂==⎪⎪ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪∂⎝⎭⎝⎭可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。
事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。
其计算公式为:1111,1111,111,2,3,,,1,2,,1ii i i i i i i ii i i i i n ni 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:ny(i)=(f(i)-a(i)*y(i-1))/d(i); end%赶的过程 x(n)=y(n); for i=n-1:-1:1x(i)=y(i)-u(i)*x(i+1); end>> a=[0,-1,-1,-1,-1,-1,-1,-1,-1,-1];>> b=[4,4,4,4,4,4,4,4,4,4];>> c=[-1,-1,-1,-1,-1,-1,-1,-1,-1,0];>> f=[7,5,-13,2,6,-12,14,-4,5,-5];>> x=chase(a,b,c,f)x =2.00001.0000-3.00000.00001.0000-2.00003.0000-0.00001.0000-1.0000四、结果分析和讨论追赶法求解的结果为x=(2,1,-3,0,1,-2,3,0,1,-1)T。
追赶法求解三对角线性方程组一 实验目的利用编程方法实现追赶法求解三对角线性方程组。
二 实验内容1、 学习和理解追赶法求解三对角线性方程组的原理及方法;2、 利用MA TLAB 编程实现追赶法;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 ,令yUx =,则有:已知L 和d ,可求得y 。
则可得到y 的求解表达式:11/12,3,,()(1)*y()=()[()(1)]/y d l i nm 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 ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⨯=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦……………由y Ux =得:111112221u(n 1)(n 1)(n 1)1(n)(n)u x y u x y x y x y ⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⨯=⎢⎥⎢⎥⎢⎥---⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦⎣⎦⎣⎦………… 可得到X 的求解表达式:()()1,2,,1()()u()(1)x n y n i n n x i y i i x i ==--=-+… 从而得到Ax=d 的解x 。
追赶法求解三对角方程组要求:对于给定的三对角系数矩阵和右端项,可以求解线性代数方程组一、 追赶法的数学理论设系数矩阵为三对角矩阵112223311100000000000000n n n nn b c a b c a b A a b c a b ---⎛⎫ ⎪ ⎪ ⎪=⎪ ⎪ ⎪⎪ ⎪⎝⎭则方程组Ax=f 称为三对角方程组。
设矩阵A 非奇异,A 有Crout 分解A=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记1122233110000100000001000000100,00000000000001n n nn b L U γαβγββγβ--⎛⎫⎛⎫ ⎪⎪ ⎪ ⎪ ⎪ ⎪∂==⎪⎪ ⎪⎪ ⎪ ⎪⎪ ⎪ ⎪ ⎪∂⎝⎭⎝⎭可先依次求出L ,U 中的元素后,令Ux=y ,先求解下三角方程组Ly=f 得出y ,再求解上三角方程组Ux=y 。
事实上,求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法更为紧凑。
其计算公式为:1111,1111,111,2,3,,,1,2,,1ii i i i i i i ii i i i i n ni 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 111i 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=⎩⎨⎧-==-逆序得出方程组的解i x :n x →1-n x →…→1x其计算公式按式为1,2,1,1,⋯--=⎩⎨⎧-==+n n i x u y x y x i i i in n 三、 追赶法的Matlab 实现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-1u(i)=c(i)/d(i);d(i+1)=b(i+1)-a(i+1)*u(i); endy(1)=f(1)/d(1); for i=2:Ny(i)=(f(i)-a(i)*y(i-1))/d(i); end %赶的过程 x(N)=y(N); for i=N-1:-1:1x(i)=y(i)-u(i)*x(i+1); end四、 追赶法的算例实现算例 用追赶法求解方程组⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡1016432153-1-21-2-31-1-2x x x x 解答令a=[0,-1,-1,-3]; b=[2,3,2,5]; c=[-1,-2,-1,0]; f=[6,1,0,1];在命令窗口运行语句 x=chase(a,b,c,f) 得结果为 x=5 4 3 2。
计算方法与实习上机实验(二)实验名称:编写用追赶法解三对角线性方程组的程序,并解下列方程组:(1)⎪⎪⎩⎪⎪⎨⎧-=+-=-+--=-+-=-12,112,122,524343232121x x x x x x x x x x (2)Ax=b,其中A 10×10=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-----41141.........14114114, b 10×1=⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--1515...15-15-27- 程序代码:#include<iostream>using namespace std;#include<iomanip>int main(){float a[100],b[100],c[100],x[100];int i,k,N;while(1){int ability=1; ability=0; break;}else{ a[k+1]=a[k+1]/b[k];b[k+1]=b[k+1]-a[k+1]*c[k];x[k+1]=x[k+1]-a[k+1]*x[k];//这个过程执行的是消元过程(即追赶法的追):对应于书上的βi=bi-lic(i-1),yi=di-liy(i-1)}}if(ability){x[N-1]=x[N-1]/b[N-1]; //回代法的第一项 for(i=N-2;i>=0;i--) //下标从大到小变化,是赶的过程{x[i]=(x[i]-c[i]*x[i+1])/b[i];}cout<<"此方程的解为:"<<endl;for(i=0;i<N;i++){cout<<setiosflags(ios::showpoint);cout<<"x["<<i+1<<"]="<<setiosflags(ios::fixed)<<setprecision(1)<<x[i]<<endl; //保留一位有效数字}}}return 0;}运行结果:。
数值分析引论课后习题与答案易大义版第一章绪论习题一1.设x>0,x*的相对误差为δ,求f(x)=ln x的误差限。
解:求lnx的误差极限就是求f(x)=lnx的误差限,由公式(1.2.4)有已知x*的相对误差满足,而,故即2.下列各数都是经过四舍五入得到的近似值,试指出它们有几位有效数字,并给出其误差限与相对误差限。
解:直接根据定义和式(1.2.2)(1.2.3)则得有5位有效数字,其误差限,相对误差限有2位有效数字,有5位有效数字,3.下列公式如何才比较准确?(1)(2)解:要使计算较准确,主要是避免两相近数相减,故应变换所给公式。
(1)(2)4.近似数x*=0.0310,是 3 位有数数字。
5.计算取,利用:式计算误差最小。
四个选项:第二、三章插值与函数逼近习题二、三1. 给定的数值表用线性插值与二次插值计算ln0.54的近似值并估计误差限.解:仍可使用n=1及n=2的Lagrange插值或Newton插值,并应用误差估计(5.8)。
线性插值时,用0.5及0.6两点,用Newton插值误差限,因,故二次插值时,用0.5,0.6,0.7三点,作二次Newton插值误差限,故2. 在-4≤x≤4上给出的等距节点函数表,若用二次插值法求的近似值,要使误差不超过,函数表的步长h应取多少?解:用误差估计式(5.8),令因得3. 若,求和.解:由均差与导数关系于是4. 若互异,求的值,这里p≤n+1.解:,由均差对称性可知当有而当P=n+1时于是得5. 求证.解:解:只要按差分定义直接展开得6. 已知的函数表求出三次Newton均差插值多项式,计算f(0.23)的近似值并用均差的余项表达式估计误差.解:根据给定函数表构造均差表由式(5.14)当n=3时得Newton均差插值多项式N3(x)=1.0067x+0.08367x(x-0.2)+0.17400x(x-0.2)(x-0.3)由此可得f(0.23) N3(0.23)=0.23203由余项表达式(5.15)可得由于7. 给定f(x)=cosx的函数表用Newton等距插值公式计算cos 0.048及cos 0.566的近似值并估计误差解:先构造差分表计算,用n=4得Newton前插公式误差估计由公式(5.17)得其中计算时用Newton后插公式(5.18)误差估计由公式(5.19)得这里仍为0.5658.求一个次数不高于四次的多项式p(x),使它满足解:这种题目可以有很多方法去做,但应以简单为宜。
WORD格式.分享第5章复习与思考题1、用高斯消去法为什么要选主元?哪些方程组可以不选主元?k答:使用高斯消去法时,在消元过程中可能出现a的情况,这时消去法无法进行;即kkk时主元素0和舍入增长a,但相对很小时,用其做除数,会导致其它元素数量级的严重kk计误差的扩散,最后也使得计算不准确。
因此高斯消去法需要选主元,以保证计算的进行和算的准确性。
当主对角元素明显占优(远大于同行或同列的元素)时,可以不用选择主元。
计算时一般选择列主元消去法。
2、高斯消去法与LU分解有什么关系?用它们解线性方程组Ax=b有何不同?A要满足什么条件?答:高斯消去法实质上产生了一个将A分解为两个三角形矩阵相乘的因式分解,其中一个为上三角矩阵U,一个为下三角矩阵L。
用LU分解解线性方程组可以简化计算,减少计算量,提高计算精度。
A需要满足的条件是,顺序主子式(1,2,⋯,n-1)不为零。
3、楚列斯基分解与LU分解相比,有什么优点?楚列斯基分解是LU分解的一种,当限定下三角矩阵L的对角元素为正时,楚列斯基分解具有唯一解。
4、哪种线性方程组可用平方根法求解?为什么说平方根法计算稳定?具有对称正定系数矩阵的线性方程可以使用平方根法求解。
,切对角元素恒为正数,因此,是一个稳定的平方根法在分解过程中元素的数量级不会增长算法。
5、什么样的线性方程组可用追赶法求解并能保证计算稳定?对角占优的三对角方程组6、何谓向量范数?给出三种常用的向量范数。
向量范数定义见p53,符合3个运算法则。
正定性齐次性三角不等式x为向量,则三种常用的向量范数为:(第3章p53,第5章p165)设n||x|||x|1ii11n22||x||(x)2ii1||x||max|x i|1in7、何谓矩阵范数?何谓矩阵的算子范数?给出矩阵A=(a ij)的三种范数||A||1,||A||2,精品.资料WORD格式.分享||A||∞,||A||1与||A||2哪个更容易计算?为什么?向量范数定义见p162,需要满足四个条件。
三对角线线性方程组的解法三对角线线性方程组是数学中常见的一类特殊线性方程组,只有3个变量,并且具有特殊的结构:它们具有三条对角线,每条对角线上的变量只与它中心对角线上的变量相关。
本文旨在介绍三对角线线性方程组的解法,包括求解一般三对角线线性方程组的方法和求解特殊的三对角线线性方程组的方法。
首先,来看一般的三对角线线性方程组的求解。
在求解一般的三对角线线性方程组时,可以使用首先求出Y的方法。
将三对角线线性方程组表示为形如AX=Y的一维形式,其中A是一个对角矩阵,X和Y 分别为它们右边的向量,可以通过简单的消去法求出Y:Y(i)=B(i)+A(i,i+1)y(i+1)+A(i,i-1)y(i-1)其中i=1,2,…n,B(i)为右边的向量,A(i,i+1)和A(i,i-1)分别为矩阵A的元素。
求出y之后,只需将它代入方程组,求出x即可。
求解一般的三对角线线性方程组的方法虽简单,但是有时我们需要求解某些特殊的三对角线线性方程组,比如方程组中有两个相邻的元素相等的特殊情况。
这种情况下,求解三对角线线性方程组的方法会有所不同。
比如,当方程组中有a(i,i+1)=a(i+1,1)时,可以将其改写为增广矩阵形式:(a11 a12 a13 0)(0 a23 a24 0)(0 0 a33 a34)(0 0 0 a44)然后可以使用追赶法求出矩阵的解,将矩阵拆分为若干个三对角线线性方程组,再利用上文介绍的求解一般三对角线线性方程组的方法,求出每个三对角线线性方程组的解。
此外,当三对角线线性方程组的右端向量Y有一些特殊的性质时,也可以考虑使用其它方法求解。
比如,当Y只有有限个非零元素时,可以使用推广追赶法,先求出右端向量Y的细节,再由此求出未知向量X;当Y具有一些相似特性时,可以考虑使用前后推法,或者使用DN技巧。
总而言之,三对角线线性方程组是数学中常见的一种特殊的线性方程组,它们的解法有很多种,涵盖了一般的三对角线线性方程组和特殊的三对角线线性方程组,以及当右端向量Y具有一些特殊的性质时的其它求解方法。
matlab追赶法求解三对角方程组追赶法是一种求解三对角方程组的有效方法,可以通过简化矩阵的求解过程来提高计算效率。
以下是使用追赶法求解三对角方程组的具体步骤:1. 将三对角矩阵表示为下三角矩阵L、上三角矩阵U和对角矩阵D的乘积形式:A=LDU,其中L是下三角矩阵,U是上三角矩阵,D是对角矩阵。
2. 将方程组Ax=b转化为LDUx=b。
3. 首先使用前向代入法(forward substitution)解下三角方程Ly=b,其中y是临时向量。
4. 然后使用对角方程Dz=y解决z=D^-1y,其中z是临时向量。
5. 最后使用后向代入法(backward substitution)解上三角方程Ux=z,得到方程组的解x。
追赶法的时间复杂度为O(n),相比于高斯消元法等其他方法,追赶法在求解三对角方程组时具有更快的计算速度。
在MATLAB中可以使用专门的函数tridiag来实现追赶法,示例如下:```matlabfunction x = tridiag_solver(a, b, c, d)n = length(b);% 前向代入for i = 2:nm = a(i) / b(i-1);b(i) = b(i) - m * c(i-1);d(i) = d(i) - m * d(i-1);end% 后向代入x = zeros(n, 1);x(n) = d(n) / b(n);for i = n-1:-1:1x(i) = (d(i) - c(i) * x(i+1)) / b(i);endend```其中a、b和c分别是三对角方程组的次对角线、主对角线和超对角线上的元素,d是方程组的右侧常数向量。
函数返回方程组的解x。
实验追赶法解三对角方程组一、实验目的学会用追赶法解三对角方程组,并应用该算法于实际问题.二、实验要求给定三对角方程组,应用追赶法解得方程组的解。
三、实验内容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:na(i)=A(i+1,i);b(i)=A(i,i);c(i)=A(i,i+1);enda(1)=0; %补充不足的值b(n)=A(n,n);c(n)=0;elsec=[A(1,:) 0]; %flag==1时b=A(2,:);a=[0 A(3,:)];endu(1)=b(1);for i=2:n %第一次追赶,得到上、下三角矩阵l(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*l(i);endy(1)=d(1); %解Ly=dfor i=2:ny(i)=d(i)-l(i)*y(i-1);endx(n)=y(n)/u(n); %解Ux=yfor i=n-1:-1:1x(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 05.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 0d= 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 >>。