3.3 约当消去法
- 格式:doc
- 大小:134.00 KB
- 文档页数:11
线性方程组的应用知识点总结线性方程组是数学中一个重要的概念,广泛应用于各个领域,包括物理学、经济学、计算机科学等。
在解决实际问题时,掌握线性方程组的应用知识点可以帮助我们更好地分析和解决问题。
本文将总结线性方程组的应用知识点,并利用这些知识点来解决实际问题。
一、线性方程组和矩阵的表示方法线性方程组可以用矩阵表示,通过矩阵的运算可以简化方程组的求解过程。
矩阵表示法简洁明了,便于计算机程序的实现。
对于一个m×n的线性方程组,可以将其表示为一个m×n的系数矩阵A和一个n×1的常数向量b,即Ax=b。
二、线性方程组的解法1. Cramer's法则:当系数矩阵的行列式不等于零时,可以使用Cramer's法则求解线性方程组的解。
该方法通过计算行列式的值来得到每个变量的解,但计算量较大,适用于小规模的线性方程组。
2. 列主元消去法:列主元消去法通过选取主元素(即绝对值最大的系数)来消去其他元素,从而将线性方程组转化为三角形式,即上三角形或下三角形。
通过反向代入可以求得线性方程组的解。
该方法适用于不论规模大小的线性方程组,但对于计算精度要求较高。
3. 高斯-约当消去法:高斯-约当消去法通过矩阵的行变换和列变换将线性方程组转化为简化行阶梯形式,即对角矩阵。
通过反向代入可以求得线性方程组的解。
该方法适用于不论规模大小的线性方程组,但对于计算精度要求较高。
三、线性方程组的应用1. 最小二乘法:最小二乘法是一种用于拟合数据的方法,可以通过求解线性方程组得到拟合曲线。
例如,可以利用最小二乘法来拟合实验数据,从而得到物理模型的参数。
2. 线性规划:线性规划是一种优化方法,其目标是使目标函数取得最大值或最小值,同时满足一系列线性约束条件。
线性规划可以通过求解线性方程组得到问题的最优解。
例如,在生产计划中,可以利用线性规划来确定最佳的生产量和资源分配。
3. 电路分析:电路分析可以通过线性方程组来描述电路元件之间的关系。
趣味数学之消去法温故知新,转换思维对于一些并列条件的应用题,根据已知条件,可以把题中的数量关系对应的排列起来,再根据题中数据特点,通过分析比较,去同存异,设法抵消掉其中的一个或两个未知数,求出其它的未知数,这种解决问题的策略方法就叫做消去法。
在小学,对于这类问题的解决方式通常是把已知条件写成数量关系式并对这些关系式进行分析、对比,再利用运算把关系式进行变形,消去其中的一个未知量,达到解题效果。
在初中,对于这类问题,我们往往根据题目中的等量关系,列出含有两个或者两个以上的方程组,然后根据方程组的特征,采用代入法或加减法,转变为只含有一个未知数的方程,达到解题效果。
消去法是一种很重要的数学思想方法,是分析问题、解决问题的基本思想方法之一,也是初中解答一次方程组的主要方法之一,适当渗透,有利于后期学习。
1、6筐花生和 6筐大豆共重 96 千克, 1 筐花生和 1 筐大豆共重()千克。
2、5件上衣和 5条裤子共值 400 元, 15 件上衣和 15 条裤子共值()元。
学法点击,举一反三例 1 . 2 条毛巾和 3 条枕巾共 48 元, 5 条毛巾和 4 条枕巾共 78 元,,一条毛巾和一条枕巾各多少元?解析:根据题意,可得出下列等量关系:2 条毛巾的价钱 +3 条枕巾的价钱 =48(元) (1)5 条毛巾的价钱 +4 条枕巾的价钱 =78(元) (2)精选文库用等式2) 减去等式1) 得3条毛巾的价格+1 条枕巾的价格 =30(元) 3)把等式3) 的每一个量都乘以 3 得,9条毛巾的价格+3 条枕巾的价格 =90(元) (4)用等式(4) 减去等式1) 得 7 条毛巾的价格 = 42(元)解:由题意可知, 3条毛巾和 1 条枕巾的价格: 78-48=30(元)9条毛巾和 3 条枕巾的价格 :30 3=90(元)7 条毛巾的价格: 90-48=42 (元)1 条毛巾的价格: 42÷7=6(元)1 条枕巾的价格: (48-62) ÷3=12(元)答: 1 条毛巾的价格是 6 元, 1 条枕巾的价格是 12 元。
常见的线性代数求解方法
1.列主元消去法
列主元消去法是一种经典的求解线性方程组的方法。
它通过将
方程组转化为上三角矩阵的形式来求解。
这个方法的关键在于选取
主元的策略。
一种常见的选取主元的策略是选择当前列中绝对值最
大的元素作为主元,然后进行消去操作,直到将矩阵转化为上三角
矩阵。
2.高斯-约当消去法
高斯-约当消去法是另一种常见的线性方程组求解方法。
它通
过消去矩阵的下三角部分来将线性方程组转化为上三角矩阵的形式。
这个方法也需要选择主元,常见的选择策略是选取当前行中绝对值
最大的元素作为主元,然后进行消去操作。
3.LU分解法
LU分解法是将矩阵分解为一对矩阵的乘积的方法。
这个方法的思想是先将矩阵分解为一个下三角矩阵和一个上三角矩阵,然后通过求解上三角矩阵和下三角矩阵的两个方程组来求解原始的线性方程组。
4.Jacobi迭代法
Jacobi迭代法是一种迭代求解线性方程组的方法。
它通过将原始的线性方程组转化为一个对角矩阵和另一个矩阵的乘积的形式,然后通过迭代求解这个对角矩阵和另一个矩阵的方程组来逼近线性方程组的解。
5.Gauss-Seidel迭代法
Gauss-Seidel迭代法是另一种迭代求解线性方程组的方法。
它与Jacobi迭代法类似,但是在每一次迭代中,它使用前一次迭代得到的部分解来更新当前的解。
这个方法通常比Jacobi迭代法收敛得更快。
以上是一些常见的线性代数求解方法。
每种方法都有其特点和适用范围,我们可以根据具体情况选择合适的方法来求解线性方程组的问题。
线性代数发展简史代数学可以笼统地解释为关于字母运算的学科。
在中学所学的初等代数中,字母仅用来表示数。
初等代数从最简单的一元一次方程开始,一方面进而讨论二元及三元的一次方程组,另一方面研究二次以上及可以转化为二次的方程组。
沿着这两个方向继续发展,代数学在讨论任意多个未知数的一次方程组,也叫线性方程组的同时,还研究次数更高的一元方程及多元方程组。
发展到这个阶段,就叫做高等代数。
线性代数是高等代数的一大分支,是研究如何求解线性方程组而发展起来的。
线性代数的主要内容有行列式、矩阵、向量、线性方程组、线性空间、线性变换、欧氏空间和二次型等。
在线性代数中,字母的含义也推广了,它不仅用来表示数,也可以表示行列式、矩阵、向量等代数量。
笼统地说,线性代数是研究具有线性关系的代数量的一门学科。
线性代数不仅在内容上,更重要的是在观点和方法上比初等代数有很大提高。
在线性代数中最重要的内容就是行列式和矩阵。
虽然表面上看,行列式和矩阵不过是一种语言或速记,但从数学史上来看,优良的数学符号和生动的概念是数学思想产生的动力和钥匙。
行列式出现于线性方程组的求解。
行列式的概念最早是由十七世纪日本数学家关孝和提出来的,他在1683年写了一部叫做《解伏题之法》的著作,标题的意思是“解行列式问题的方法”,书里对行列式的概念和它的展开已经有了清楚的叙述。
欧洲第一个提出行列式概念的是德国的数学家、微积分学奠基人之一莱布尼兹(Leibnitz)。
1750年克莱姆(Cramer)在他的《线性代数分析导言》中发表了求解线性方程组的重要基本公式(即人们熟悉的Cramer 克莱姆法则)。
1764年,法国数学家贝佐特(Bezout)把确定行列式每一项的符号的手续系统化了。
对给定了含n个未知量的n个齐次线性方程,Bezout证明了系数行列式等于零是该方程组有非零解的条件。
法国数学家范德蒙(Vandermonde)是第一个对行列式理论进行系统的阐述(即把行列式理论与线性方程组求解相分离)的人,并且给出了一条法则,用二阶子式和它们的余子式来展开行列式。
消去法(Elimination Method)1. 什么是消去法?消去法,也称为线性方程组的消元法,是一种用于求解多个线性方程组成的方程组的方法。
它通过不断地对方程组进行变换,将未知数的系数逐步消去,从而得到一个简化后的方程组。
最终,通过进一步求解这个简化后的方程组,可以得到所有未知数的值。
2. 消去法的基本原理消去法基于以下两个基本原理:2.1 主元素在一个线性方程组中,主元素是指每个方程中首次出现非零系数的变量对应的系数。
在消去法中,我们通过交换两个方程或者将某个方程乘以一个非零常数来保证每个方程中主元素都不为零。
2.2 消元操作在一个线性方程组中,我们可以通过以下三种操作来改变方程的形式:•将某个方程乘以一个非零常数;•将某两个方程相加(或相减);•交换两个方程。
这些操作不会改变线性方程组的解集。
3. 消去法求解步骤使用消去法求解线性方程组可以分为以下几个步骤:3.1 确定主元素首先,我们需要在方程组中确定每个方程的主元素。
为此,可以通过观察每个方程中首次出现非零系数的变量对应的系数。
3.2 交换方程如果某个方程的主元素为零,我们可以通过交换两个方程来确保该方程的主元素不为零。
交换方程时,需要注意保持其他方程的顺序不变。
3.3 消元操作接下来,我们需要使用消元操作将未知数的系数逐步消去。
具体步骤如下:•首先,选择一个主元素非零的方程作为基准方程。
•然后,将其他所有方程中该未知数的系数乘以基准方程中该未知数对应的系数,并将乘积加到对应位置上,从而使其他所有方程中该未知数的系数变为零。
•重复以上步骤,直到所有未知数都只在一个方程中有非零系数。
3.4 解简化后的方程组最后,我们可以通过求解简化后得到的只包含一个未知数的简化线性方程组来求解原始线性方程组。
这可以通过反向代入法或者回代法来实现。
4. 消去法示例下面通过一个具体的例子来演示消去法的求解过程。
假设有如下线性方程组:2x + 3y - z = 7x - 2y + 4z = -13x + y - z = 6首先,我们确定主元素。
§2高斯主元素消去法⎪⎩⎪⎨⎧=++-=++=++00.357.404.100.200.224.563.200.100.100.200.10120.0321321321x x x x x x x x x 解:clear alla=[0.0120 1.00 2.00;1.00 2.63 5.24;-2.00 1.04 4.57]; b=[1.00;2.00;3.00];x=a\b方程组的三位有效数字的解:Tx )266.0,476.0,645.0(*-=Gauss 消去法求解(取三位有效数字):[]⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡---−−→−⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡------−−−→−⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡-==-==00.300.5003.811627.80000.100.200.10120.016432916603.811627.80000.100.200.10120.000.357.404.100.200.224.563.200.100.100.200.10120.006.21673.83323121l l l b A 解出Tx )60.0,197.0,25.0(--≈。
【注】1)设Ax=b,其中A 为n 阶非奇异矩阵,可以应用高斯消元法。
2)消元过程中,即使0)(≠k kk a ,用其作除数)/()()(k kk k ik ik a a l =会导致计算中间结果数量级严重增长和舍入误差的累积、扩大,最后使得计算结果不可靠。
3)应避免采用绝对值很小的主元素)(k kk a ;对一般的系数矩阵,最好保持乘数1≤ik l ,因此,在高斯消去法中应引进选主元技巧,以便减少计算过程中舍入误差对求解的影响。
clear alla=[0.0120 1.00 2.00;1.00 2.63 5.24;-2.00 1.04 4.57]; b=[1.00;2.00;3.00];x_value=vpa(a\b,15)%10位有效数字的近似解a=[a,b];eps=1e-6;[n,m]=size(a);Gauss,x=vpa(x,15) %对比高斯消去法的结果一、列主元素消去法基本思想:在每轮消元之前,选列主元素(绝对值最大的元素),使乘数(即消元因子)1≤ik l步骤:设已进行k-1轮消元,得矩阵⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=)()()()()2(2)2(2)2(22)1(1)1(1)1(12)1(11)(k nn k nkk kn k kkn kn kk a a a a a a a a a a a A一落千丈 1 23S1:选列主元素: )()(0max k ik ni k k k i a a ≤≤= (1)S2:换行:如果)(0k k i a →0,则方程组解不唯一,停止运算; 否则,如果i0=k , 则可进行下一轮消元;如果k i ≠0,则r i0 r k ,然后进行下一轮消元。
计算机科学与技术蔡梦卿学号:09211289高斯—约当消去法解线性方程组源代码:#include<iostream>#include<cmath>#include<iomanip>#define kk 50 //定义最大方程元数int n;using namespace std;void changer(double *p,double *q);main(){int i,j,k,s;double A[kk][kk],r,l[kk][kk],b[kk],u,temp;aa: cout<<"输入的方程元数"<<endl;cin>>n;cout<<"请输入方程系数矩阵:"<<"\n";for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>A[i][j];cout<<"请输入右边向量:"<<"\n";for(i=0;i<n;i++)cin>>b[i];for(k=0;k<n-1;k++){s=k;r=fabs(A[k][k]);for(i=k;i<n;i++)if(r<fabs(A[i][k])){r=fabs(A[i][k]);s=i;}//获取主元if(s!=k){changer(*(A+k),*(A+s));//交换行元素temp=b[k];b[k]=b[s];b[s]=temp; //右边向量的交换}cout<<"第"<<k+1<<"次选取主元并交换行的顺序"<<endl;for (i=0;i<n;i++){for (j=0;j<n;j++)cout<<setw(4)<<setprecision(4)<<A[i][j]<<" ";cout<<b[i]<<endl;}//cout<<endl;for(i=k+1;i<n;i++){l[i][k]=A[i][k]/A[k][k];//计算消去系数for(j=k;j<n;j++)A[i][j]=A[i][j]-l[i][k]*A[k][j];b[i]=b[i]-l[i][k]*b[k];}//消元过程cout<<"第"<<k+1<<"次消元"<<endl;for (int e=0;e<n;e++){for (j=0;j<n;j++)cout<<setw(4)<<setprecision(4)<<A[e][j]<<" ";cout<<b[e]<<endl;}cout<<endl;}if(A[k][k]<0.0001){cout<<"系数矩阵是非奇异矩阵!"<<"\n";cout<<"所以:方程无唯一解!"<<"\n";cout<<"请问是否?"<<endl;cout<<"退出请输入1"<<endl;cout<<"要继续请输入任意非1的整数"<<endl;int g;cin>>g;if(g!=1)goto aa;else exit(1);}//判断系数矩阵的奇异性for(i=n-1;i>=0;i--){u=0;for(j=i+1;j<n;j++)u=u+A[i][j]*b[j];b[i]=(b[i]-u)/A[i][i];}cout<<"最后得方程的根为:"<<"\n";for(i=0;i<n;i++)cout<<"x"<<i+1<<"="<<b[i]<<"\n";system("pause");return 0;}void changer(double *p,double *q) {int i;double temp;for(i=0;i<n;i++){temp=*(p+i);*(p+i)=*(q+i);*(q+i)=temp;}} //交换行元素的函数例题:方程组:3X1 +4X2 -X3 +X4 ≒38 ﹣X1 +2X2 +5X3 -X4 ≒38 X1 -4X2 +3X3 +2X4 ≒﹣3 2X1 -X2 +4X3 +5X4 ≒32X1≒5, X2≒7, X3≒6, X4≒1。
消去法解题基础知识
1.等式的性质(一):等式两边同时加上或减去相同或相等的数或式子,等式仍成立。
2.等式的性质(二):等式的两边同时乘或除以相同的数(零除外)或式子,等式仍成立。
3.一个等式的两边分别加上或减去另一个等式的两边,得到的还是等式。
4.等量代换:在一个式子、等式或不等式中,一个量可以用与它相等的量代换。
5.解题步骤:
(1)审题,并把每个条件转化成等式.
(2)利用等式的性质对每个等式进行转化.找到列式解答的方法.
(3)列式计算.
(4)检验正确后,写出答语.
(5)想三想:一想这个题还有什么解法(一题多解);二想这个题还可以求什么(一题多变);三想有什么规律(这一类题的规律)。
计算方法教案新疆医科大学数学教研室张利萍一、课程基本信息1、课程英文名称:Numerical Analysis2、课程类别:专业基础课程3、课程学时:总学时544、学分:45、先修课程:《高等数学》、《线性代数》、《Matlab 语言》二、课程的目的与任务:计算方法是信息管理与信息系统专业的重要理论基础课程,是现代数学的一个重要分支。
其主要任务是介绍进行科学计算的理论方法,即在计算机上对来自科学研究和工程实际中的数学问题进行数值计算和分析的理论和方法。
通过本课程的学习,不仅使学生初步掌握数值分析的基本理论知识,而且使学生具备一定的科学计算的能力、分析问题和解决问题的能力,为学习后继课程以及将来从事科学计算、计算机应用和科学研究等工作奠定必要的数学基础。
三、课程的基本要求:1.掌握计算方法的常用的基本的数值计算方法2.掌握计算方法的基本理论、分析方法和原理3.能利用计算机解决科学和工程中的某些数值计算应用问题,增强学生综合运用知识的能力4.了解科学计算的发展方向和应用前景四、教学内容、要求及学时分配:(一) 理论教学:引论(2学时)第一讲(1-2节)1.教学内容:计算方法(数值分析)这门课程的形成背景及主要研究内容、研究方法、主要特点;算法的有关概念及要求;误差的来源、意义、及其有关概念。
数值计算中应注意的一些问题。
2.重点难点:算法设计及其表达法;误差的基本概念。
数值计算中应注意的一些问题。
3.教学目标:了解数值分析的基本概念;掌握误差的基本概念:误差、相对误差、误差限、相对误差限、有效数字;理解有效数字与误差的关系。
学会选用相对较好的数值计算方法。
A 算法B 误差第二讲典型例题第二章线性方程组的直接法(4学时)第三讲1.教学内容:线性方程组的消去法、Gauss消去法及其Gauss列主元素消去法的计算过程;三种消去法的程序设计。
2.重点难点:约当消去法,Gauss消去法,Gauss列主元素消去法3.教学目标:了解线性方程组的解法;掌握约当消去法、Gauss消去法、Gauss列主元素消去的基本思想;能利用这三种消去法对线性方程组进行求解,并编制相应的应用程序。
高斯·约当消元法By CaptainChen 高斯消元法,用于解多元一次方程(几乎类似模拟手动解方程)。
思路:通过等式的乘除,把方程1的x1x1系数a11a11分别化为方程2~方程n的x1x1系数,然后将方程2~方程n减去得到的新方程,从而消掉方程2~方程n中的x1x1。
接着用方程2的x2x2继续把方程3~方程n中的x2x2消掉……大概系数就成了这个样子↓举个例子:一个问题:遇到这种情况0.0000000000001×1x1++x2x2==120.0000000000001×1+x2=1x1+x2=2就会出现精度问题,处理成x10++1000000000000x2999999999999x2==10000000000002x1+10000 00000000x2=10000000000000+999999999999x2=2而当位数一多,我们的计算机就有可能存不了那么多9,从而忽略掉一堆,原本的误差就扩散得越来越大,这时候我们需要选主消元(比如把刚才两个式子交换一下),选择当前这一项系数绝对值最大的方程作为主元,来消掉其它方程。
高斯·约当消元:高斯消元是当执行到第i个方程的x k xk时,消掉i以后的x k xk。
而约当就同时消掉i以前的x k xk,使系数变成一条对角线解得情况:高斯消元完成后,下面若有方程系数全部为00×1+0×2+0×3+...+0×n=00×1+0×2+0×3+...+0×n=0则说明有多解如果为0×1+0×2+0×3+...+0×n=非00×1+0×2+0×3+...+0×n=非0 则无解代码:#include<cstdio>#include<cmath>#include<algorithm>using std::swap;#define MAXN 405#define EPS 1e-8typedef double Matrix[MAXN][MAXN];//系数矩阵int n,m;int Rank;//有效方程的行数,Rank之后的方程x系数为0double X[MAXN];//解bool Free[MAXN];//是否为自由变量Matrix A;//系数矩阵//浮点数比较int fcmp(double a,double b){if((a-b)>EPS)return1;else if((a-b)>-EPS)return0;return -1;}//高斯·约当消元void Gauss(){int r,c,mxr;for(r=1,c=1;r<=n&&c<m;r++,c++){//寻找绝对值最大(选主)mxr=r;for(int i=r+1;i<=n;i++)if(fcmp(fabs(A[i][c]),fabs(A[mxr][c]))>0) mxr=i;//第c项在第r个方程之后系数都为0if(fcmp(A[mxr][c],0.0)==0){r--;continue;}//执行下一项//选好主,交换方程if(mxr!=r)swap(A[mxr],A[r]);//消元for(int i=1;i<=n;i++)if(i!=r&&fcmp(A[i][c],0.0)!=0)for(int j=m;j>=c;j--)A[i][j]-=A[r][j]/A[r][c]*A[i][c];}Rank=r-1;}//判断是否有解bool check(){//判断是否无解for(int i=Rank+1;i<=n;i++)if(fcmp(A[i][m],0.0)!=0)//在x系数为0时,结果不为0 return0;//初始所有都是未知变量for(int i=1;i<m;i++)Free[i]=1;//计算解for(int i=Rank,cnt=0,pos;i>0;i--){cnt=0;//记数当前方程未知变量个数for(int j=1;j<m;j++)if(Free[j]&&fcmp(A[i][j],0.0)!=0) cnt++,pos=j;if(cnt==1)//一个未知变量,可计算{Free[pos]=0;X[pos]=A[i][m]/A[i][pos];}}return1;}int main(){freopen("Gauss_data.in","r",stdin);scanf("%d%d",&n,&m);m++;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%lf",&A[i][j]);Gauss();if(!check())printf("No solution\n");else{if(Rank<m-1){printf("Multiple solution, free_num: %d\n",m-1-Rank);for(int i=1;i<m;i++)if(Free[i])printf("X[%d] not determined\n",i);elseprintf("X[%d] = %.4lf\n",i,X[i]);}elsefor(int i=1;i<m;i++)printf("X[%d] = %.4lf\n",i,X[i]);}return0; }。
高斯消元法-简述
高斯消元法,又称高斯消去法,实际上就是我们俗称的加减消元法.
数学上,高斯消去法或称高斯-约当消去法,由高斯和约当得名(很多人将高斯消去作为完整的高斯-约当消去的前半部分),它是线性代数中的一个算法,用于决定线性方程组的解,决定矩阵的秩,以及决定可逆方矩阵的逆.当用于一个矩阵时,高斯消去产生“行消去梯形形式”.
例如:一个二元一次方程组,设法对每个等式进行变形,使两个等式中的同一个未知数的系数相等,这两个等式相减,得到一个新的等式,在这个新的等式中,细数相等的未知数就被除去了(系数为0).同样的也适合多元多次方程组.。
子结构法进行上部结构刚度凝聚对于复杂的大型结构,当采用有限元方法进行计算时,一个突出的矛盾就是结构的未知量较多,而计算机的内存总是有限的,解题的规模往往受到限制。
为了解决这个矛盾,除了采用不同形式存储整体刚度矩阵和采用不同的方程组解法外,还可以通过结构本身来实现。
子结构方法就是求解大型结构的一种有效方法。
1.子结构分析的基本思路子结构的概念是单元概念的推广和扩大,即将若干个基本单元装配在一起,组成一个新的结构单元,这个新的结构单元称为原结构的子结构或称为广义单元(大单元)。
将一个大型的复杂结构划分为若干个子结构,先分别确定各子结构的刚度特性,然后再将子结构装配成整体结构,最后确定整体结构的刚度特性。
这种结构分析的方法称为子结构法。
采用子结构分析,可将一个大型问题化为若干各小问题,将大型的联立方程组分解为若干组小型的方程组,从减小计算机的内存,实现微机解大题的作用。
图1所示的钢架按照一般有限元解法,共有24各未知节点位移,需解24元的联立方程。
如果把两侧钢架各看成一个子结构,则可将原结构看成是由子结构Ⅰ、Ⅱ和杆单元Ⅲ的组合体系。
子结构Ⅰ、Ⅱ各有12个未知的结构位移,而组合体系仅有6个未知的结构位移。
图 1 子结构法示意图在所有的结点中,子结构与子结构或子结构与一般单元连接的节点占有重要的地位,这种节点称为交界节点或外部节点,如图1的节点C、B。
因此,可以将子结构看成是在外部节点处与组合体系的其他单元连接的广义单元(大单元)。
这个广义单元本身就是由若干一般单元组成的,而组合体系则是由若干广义单元与一般单元所组合成的。
2.子结构分析的基本思路1)建立子结构外部节点位移与外部节点力之间的刚度关系,由此得到子结构相对于外部结点位移的刚度矩阵。
此刚度矩阵简称为子结构外部结点刚度矩阵。
2)求出个子结构的刚度矩阵后,按照子结构的外部节点自由度在总刚矩阵的对应自由度上叠加刚度矩阵元素,然后按照有限元的基本方法分析组合体系,从而得到组合体系的全部结点位移,其中包括外部结点位移。
目录第一章非线性方程求根 (3)1.1迭代法 (3)1.2牛顿法 (4)1.3弦截法 (5)1.4二分法 (6)第二章插值 (7)2.1线性插值 (7)2.2二次插值 (8)2.3拉格朗日插值 (9)2.4分段线性插值 (10)2.5分段二次插值 (11)第三章数值积分 (13)3.1复化矩形积分法 (13)3.2复化梯形积分法 (14)3.3辛普森积分法 (15)3.4变步长梯形积分法 (16)第四章线性方程组数值法 (17)4.1约当消去法 (17)4.2高斯消去法 (18)4.3三角分解法 (20)4.4雅可比迭代法 (21)4.5高斯—赛德尔迭代法 (23)第五章常积分方程数值法 (25)5.1显示欧拉公式法 (25)5.2欧拉公式预测校正法 (26)5.3改进欧拉公式法 (27)5.4四阶龙格—库塔法 (28)数值计算方法第一章非线性方程求根1.1迭代法程序代码:Private Sub Command1_Click()x0 = Val(InputBox("请输入初始值x0"))ep = Val(InputBox(请输入误差限ep))f = 0While f = 0X1 = (Exp(2 * x0) - x0) / 5If Abs(X1 - x0) < ep ThenPrint X1f = 1Elsex0 = X1End IfWendEnd Sub例:求f(x)=e2x-6x=0在x=0.5附近的根(ep=10-10)1.2牛顿法程序代码:Private Sub Command1_Click()b = Val(InputBox("请输入被开方数x0"))ep = Val(InputBox(请输入误差限ep))f = 0While f = 0X1 = x0 - (x0 ^ 2 - b) / (2 * b)If Abs(X1 - x0) < ep ThenPrint X1f = 1Elsex0 = X1End IfWendEnd Sub例:求56的值。
约当消去法和高斯消去法的应用一、 题目:求解方程组:⎪⎩⎪⎨⎧=+--=-+-=--2.453.82102.72321321321x x x x x x x x x 10误差分析范围为e=0.0001.二、引言线性方程组的解法大致分为直接法与迭代法两大类。
迭代法的突出优点是算法简单,编程容易。
但迭代法的缺点是它要求迭代过程具有收敛性,发散的迭代过程是没有实用价值的。
前面我们通过对迭代法的学习,已经大致掌握了有关迭代法的基本思想,此处我们将学习解决线性方程组的另一种方法——直接法这种算法思想简单并且容易掌握,结果精确,这虽然是一种古老的算法,但用在现代计算机上仍十分有效,所以这依然是一种十分有效的解决线性方程组的一种方法,下面我们一起来学习这种算法!三、算法直接法中我们接触到的有约当消去法和高斯消去法,下面我们将逐一介绍两种算法:1、 约当消去法:考察一般形式的线性方程组∑==n j i j ijb x a 1,i=1,2,3,…,n (1)第一步,先把方程(1)中的第一个方程的x的系数化为1,并从其1余的方程中消去x,得到方程(1)11第二步,先把方程中的第二个方程的x的系数化为1,并从其余的方2程中消去x,得到方程(1)22第K步,先把方程中的第k个方程的x的系数化为1,并从其的k方程中消去x,得到方程(1)Kk第n步,先把方程中的第n个方程的x系数化为1,并从其与方程n中消去x。
这样经过n步的消去就可以得到原方程组的解。
n2、高斯消去法高斯消去法包括两个过程:消去过程和回代过程(1)消去过程:第一步,把方程中的第一个方程的x(1)的系数化为1,并从其余方程中的x1消去,得到新的方程(1)1第二步,把方程(1)1中的第二个方程的x(2)的系数化为1,从第三个方程开始一直到第n个方程中消去x(2)得到新的方程(1)2第k步,把方程(1)k-1中的第k个方程中的x(k)的系数化为1,并且从k+1个方程开始一直到第n个方程中消去x(k),得到新的方程(1)k第n步,把方程(1)n-1中的第n个方程的x(n)的系数化为1,得到新的方程(1)n这样,通过n步转化就可以得到x(n)的值(2)回代过程:由(1)n方程得到x(n)的值,再把x(n)带回到方程(1)n-1中得到x(n-2),按此方式,一次将其回代,就可以得到所要求的方程的解这就是高斯消去法四、程序代码及数据1、约当消去法Program fjs3implicit noneinteger::k,i,jinteger,parameter::m=3,n=3real::a(m,n)=(/10,-1,-1,-1,10,-1,-2,-2,5/)real::b(m)=(/7.2,8.3,4.2/)do k=1,ndo j=k+1,na(k,j)=a(k,j)/a(k,k)end dob(k)=b(k)/a(k,k)do i=1,nif(i/=k) thendo j=k+1,na(i,j)=a(i,j)-a(i,k)*a(k,j)end dob(i)=b(i)-a(i,k)*b(k)end ifend doend dowrite(*,*) b(1),b(2),b(3)stopend1.100000 1.200000 1.300000 Press any key to continue2、高斯消去法program fjs3implicit noneinteger::k,i,jinteger,parameter::m=3,n=3real::a(m,n)=(/10,-1,-1,-1,10,-1,-2,-2,5/)real::b(m)=(/7.2,8.3,4.2/)do k=1,ndo j=k+1,na(k,j)=a(k,j)/a(k,k)end dob(k)=b(k)/a(k,k)do i=k+1,ndo j=k+1,na(i,j)=a(i,j)-a(i,k)*a(k,j)end doend dodo i=k+1,nb(i)=b(i)-a(i,k)*b(k)end doend dodo i=n-1,1,-1do j=i+1,nb(i)=b(i)-a(i,j)*b(j)end doend dowrite(*,*) b(1),b(2),b(3)stopEnd1.100000 1.200000 1.300000Press any key to continue五、算法评估直接算法:优点是工作量小精度高缺点是程序复杂对于高阶矩阵,受计算机容量限制,适合与中小型方程组所以对线性方程组来说,总的来说有两种计算方法,一种是迭代法另一种是消去法。
高斯-约旦消元法
高斯-约旦消元法是一种线性代数解题的方法,在求解线性方程组时较为常用。
该方法通过矩阵变换的方式,将增广矩阵消元成上三角矩阵,进而得到线性方程组的解。
具体步骤如下:
1.将增广矩阵左侧的系数矩阵化为上三角矩阵。
首先将第一列中的元素中的最大值所在的行与第一行交换位置,然后使用第一行的倍数消去其他行该列中的元素。
以此类推,对每一列进行相同的操作,直到将系数矩阵转化为上三角矩阵。
2.对上三角矩阵使用回代法求解线性方程组。
具体做法是从方程组最后一行开始,先计算未知量的值,再带入前面的方程中,以此类推,直至求出所有未知量的值。
高斯-约旦消元法的优点是具有较高的精度和较快的计算速度,能够求解大规模的线性方程组。
但由于其计算时需要进行大量的浮点运算,系数矩阵过于接近于奇异则无法适用,并且需要占用较大的计算资源。
3.3 约当消去法大概是由于以前人们使用计算工具非常落后,所以计算量较小的计算方法更受欢迎。
解线性方程组的约当消去法的计算量比高斯消去法稍大一些,这对于我们现在使用的计算机来说,完全算不了什么。
约当消去法算法更简单,编程的方式更灵活,还可用来求解有无数组解的线性方程组,还可用来求矩阵的逆。
所以约当消去法的价值超过了高斯消去法。
高斯消去法的回顾高斯消去法的的关键是把线性方程组化为上三角形线性方程组,也就是利用a K K不为零来消去a K+1,K,…,a N,K,不急于消去a1,K,…,a K-1,K仅仅是为了减少计算量,并非一定要留下一个回代过程。
结论,我们当然可以利用a K K不为零来同时消去a1,K,…,a-K-1,K,方法与消去a K+1,K,…,a N,K是类似的,从而可以免去回代过程。
牢记:如果a K K不为零,我们可以从第K个方程中解出x K从而可以从其它方程中消去x K,这就是约当消去法的核心思想。
2.算法说明对K=1,2,…,M:1.将第K个方程两边同时除以x K项的系数a KK;;2.对I=1,…,M:A.如果I==K,CONTINUE;B.方程(I)=方程(I)-[方程(K)]* a I K;计算量的估计:第K步计算量为:M·(M+1-K)=O(M2-MK+M)=O(M2+MK)总计算量为:O(0.5M3)参看并测试C语言代码4.推广应用:矩阵求逆用约当消去法解线性方程组Ax=b的实际效果是将原方程组两边同时左乘以A的逆A-1,从而直接得到x=A-1b,问题是如何将A-1保存下来。
对于M×M可逆矩阵A,我们可以构造M×2M矩阵T=(A I),那么用约当消去法把T的左边M列化为单位矩阵后,其效果相当于用A-1左乘T,从而得到A-1(A I)=(I A-1),所以T的后面的M列就是我们所要求的A-15.两个算法的对比分析计算量:高斯消去法为O(0.33N3),约当消去法为O(0.5N3),从现代的观点看,两者的数量级相同;算法简单:约当消去法占优;通用性:约当消去法占优;数字稳定性:约当消去法更易于与解决。
结论:如果用手工或计算器求解线性方程组(比如应付考试),用高斯消去法较好,如果编程用计算机求解线性方程组,则用约当消去法更好。
3.4选主元消去法无论是高斯消去法还是约当消去法解线性方程组,我们都要进行除法运算。
当某个a KK的绝对值非常小时,这两种方法的数值稳定性可能不好,为此。
我们可用选主元消去法。
选主元的思想就是把a KK,a K+1K,…,a MK中绝对值最大的元素移到主对角线上来。
1,找到主元,并记下它的位置这个问题看起来很简单,编程又有点麻烦,又由于很多场合都有这类问题,所以我们首先进行一般性讨论。
假如X是一般的N维数组,我们要找出X的绝对值最大的成员,并记住它的下标值,可按下面方式完成:j0=0;x0=fabs(x[0]);for(j=1;j<N;j++){ if(fabs(x[j])<x0) continue;x0=fabs(x[j]);j0=j;}类似地,我们也可以找出多维数组中的绝对值最大元以及所在位置。
2.选列主元方法无论那种消元方法,我们都可以选列主元进行消元。
选列主元算法相对说来简单,而且也很有效,所以提倡采用。
假如算法进行到第K步,选列主元的方法可表述为找出a KK,a K+1K,…, a nK中绝对值最大者a MK;把第K个方程和第M个方程的位置互换;参看(类似)C语言的源代码提示:虽然还可以进一步形成全组元消去法,实际已经没有必要了。
大家再多用点功也不难变出来,不过更麻烦些。
也就是说不难,但挺麻烦,而且没多大实际用处。
3.5 解三对角方程的追赶法如果线性方程组Ax=b 的系数矩阵除了主对角限和次主对角线上的元素外,其余的元素均为零,则称为是三对角线性方程组。
三对角线性方程组的一般形式为⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧=+=++=++=++=+-------NN N N N N N N N N N N d x b x a d x c x b x a d x c x b x a d x c x b x a d x c x b 11111213433323232221212111许多大规模的线性方程组正好是三对角形式,所以利用它的特殊性而形成更有效的方法就很有意义。
三对角线性方程组的存贮方式对于N 个变元利用三对角线性方程组,我们可以说明4个长度为N 的一维数组A[N],B[N],C[N],D[N]来存贮所有的非零元素。
注意到方程组中的a1和cN 没有定义,我们可以简单地把数组中相应的元素设为零。
由于C 语言数组的下标是从零开始的,所以我们编程时也要作相应的调整。
解的递推形式为了讨论,计算,编程的方便,我们再定义两个数组U[N]和V[N],计算格式为:N k v a b v a d v v a b u a d u b c v b d u k k k k k k k k k k k k k k,,2,1,1111111111 =∀⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧--=--=⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧==---- 结论:对于上面定义的向量U,V ,我们有 x k =u k -v k ·x k+1,K=1,2,…,N-1.从而可以形成一个算法。
解下来我们将用数学归纳法推出上面的公式,为此用n 来指示所考虑的是那一个方程。
当n=1时,由 12111d x c x b =+ 得 211111x b cb d x -=记 111111,b c v b d u == 得2111x v u x -=所以结论成立。
为了简化我们的讨论,我们假定原始问题会使得所出现的所有表达式都有意义,具体说来就是分母不会为零。
当n=2时由 ⎩⎨⎧=+++=13222122111d x c x b x a x v u x得 212221221222x v a b c v a b u a d x ⋅--⋅-⋅-=记 122221221222,v a b c v v a b u a d u ⋅-=⋅-⋅-= 得3222x v u x -=所以结论对于n=2也是成立的。
作为数学归纳法来说,这一步也可以不要,我们只是先熟悉推导的思路。
FOR N=K-1(K<N)假如当n=K-1(K<N)时我们推得了⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅-=⋅-=⋅-⋅-=-------------KK K K K K K K K K K K K K K K x v u x v a b c v va b u a d u 1211112112111那么当n=K 时由可推得 1111+---⋅--⋅-⋅-=K K K K KK K K K K K K x v a b c v a b u a d x记 111,---⋅-=⋅-⋅-=K K K Kk K K K K K K K v a b c v v a b u a d u 得1+-=K K K K x v u x⎩⎨⎧=+++=+---KK K K K K K KK K K d x c x b x a x v u x 1111当K=N 时,由 ⎩⎨⎧=++=----NK N N N NN N N d x b x a x v u x 1111可推得 11--⋅-⋅-=N N N N N N N v a b u a d x重要结论首先我们可以利用下面一组递推公式N k v a b v a d v v a b u a d u b c v b d u k k k k k k k k k k k k k k ,,2,1,1111111111 =∀⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧--=--=⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧==---- 计算并保存{(u k ,v k ),k=1,2,…,N},接下来再利用递推公式⎩⎨⎧--=∀+==+1,,2,1,1 N N k x v u x u x k k k k NN 即可求出诸},,,{21N x x x ,从而完成问题求解。
我们把上面的第一个过程称为追过程,而把第二个过程称为赶过程,而把所形成的方法称为追赶法。
算法说明STEP1:输入数组a[N],b[N],c[N],d[N]定义数组u[N],v[N]STEP2: (执行追过程)1,u[1]=d[1]/b[1]2,v[1]=c[1]/b[1]3,对k=2,3,…,N1,w=b[k]-a[k]*v[k-1]2,u[k]=(d[k]-a[k]*u[k-1])/w3,v[k]=c[k]/wSTEP3:(执行赶过程)1,x[N]=u[N]2,对=N-1,N-2,…,11,x[k]=u[k]+v[k]*x[k]STEP4:输出{(x[k],u[k],v[k])t,k=1,2,…,N},停机注:数组中没有定义的元素都设为零比较好。
关于算法的讨论把追赶法与高斯消去法对比分析可知,追赶法实际就是高斯消去法在特殊条件下的应用。
不难看出,追赶法的计算量特别小,它仅与N 成正比,而高斯消去法的计算量是与N 的三次方成正比。
可以证明,如果所有的||||||i i i c a b +≥,则所给的方程组是主对角线占优的,此时算法的稳定性能好。