实验三:解线性方程组的直接法(一)
计算方法-解线性方程组的直接法实验报告

计算方法实验二实验报告专业班级:姓名:学号:实验成绩:1.【实验题目】解线性方程组的直接法2.【实验目的】●掌握高斯消元法及选列主元素的技术●掌握三角分解法与追赶法●掌握向量与矩阵的三种范数及其计算方法●理解方程组的性态、条件数及误差分析3.【实验内容】求解方程组,AX=b 其中4. 【实验要求】(1)分别列选主元消去法与不选主元消去法分别对以上两个方程组求解(2)观察小主元并分析对计算结果的影响。
(3)用追赶法求下述三对角线性方程组的解5. 【算法描述】6. 【源程序(带注释)】(1)一:列主元素消去法#include<iostream>#include<cmath>#define N 20using namespace std;void load();float a[N][N];int m;int main(){int i,j;int c,k,n,p,r;float x[N],l[N][N],s,d;cout<<"下面请输入未知数的个数m=";cin>>m;cout<<endl;cout<<"请按顺序输入增广矩阵a:"<<endl;load();for(i=0;i<m;i++){for(j=i;j<m;j++)c=(fabs(a[j][i])>fabs(a[i][i]))?j:i; /*找列最大元素*/ for(n=0;n<m+1;n++){s=a[i][n];a[i][n]=a[c][n];a[c][n]=s;}/*将列最大数防在对角线上*/for(p=0;p<m+1;p++)cout<<a[i][p]<<"\t";cout<<endl;for(k=i+1;k<m;k++){l[k][i]=a[k][i]/a[i][i];for(r=i;r<m+1;r++) /*化成三角阵*/a[k][r]=a[k][r]-l[k][i]*a[i][r];}}x[m-1]=a[m-1][m]/a[m-1][m-1];for(i=m-2;i>=0;i--){d=0;for(j=i+1;j<m;j++)d=d+a[i][j]*x[j];x[i]=(a[i][m]-d)/a[i][i]; /*求解*/}cout<<"该方程组的解为:"<<endl;for(i=0;i<m;i++)cout<<"x["<<i<<"]="<<x[i]<<"\t";//system("pause");return 0;}void load(){int i,j;for(i=0;i<m;i++)for(j=0;j<m+1;j++)cin>>a[i][j];}一般消去法#include<stdio.h>void solve(float l[][100],float u[][100],float b[],float x[],int n){int i,j;float t,s1,s2;float y[100];for(i=1;i<=n;i++) /* 第一次回代过程开始*/{s1=0;for(j=1;j<i;j++){t=-l[i][j];s1=s1+t*y[j];}y[i]=(b[i]+s1)/l[i][i];}for(i=n;i>=1;i--) /* 第二次回代过程开始*/{s2=0;for(j=n;j>i;j--){t=-u[i][j];s2=s2+t*x[j];}x[i]=(y[i]+s2)/u[i][i];}}void main(){float a[100][100],l[100][100],u[100][100],x[100],b[100];int i,j,n,r,k; float s1,s2;for(i=1;i<=99;i++)/*将所有的数组置零,同时将L矩阵的对角值设为1*/ for(j=1;j<=99;j++){l[i][j]=0,u[i][j]=0;if(j==i) l[i][j]=1;}printf ("input n:\n");/*输入方程组的个数*/scanf("%d",&n);printf ("input array A:\n");/*读取原矩阵A*/for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%f",&a[i][j]);printf ("input array B:\n");/*读取列矩阵B*/for(i=1;i<=n;i++)scanf("%f",&b[i]);for(r=1;r<=n;r++)/*求解矩阵L和U*/{for(i=r;i<=n;i++){s1=0;for(k=1;k<=r-1;k++)s1=s1+l[r][k]*u[k][i];u[r][i]=a[r][i]-s1;}for(i=r+1;i<=n;i++){s2=0;for(k=1;k<=r-1;k++)s2=s2+l[i][k]*u[k][r];l[i][r]=(a[i][r]-s2)/u[r][r];}}printf("array L:\n");/*输出矩阵L*/ for(i=1;i<=n;i++) {for(j=1;j<=n;j++)printf("%7.3f ",l[i][j]);printf("\n");}printf("array U:\n");/*输出矩阵U*/for(i=1;i<=n;i++){for(j=1;j<=n;j++)printf("%7.3f ",u[i][j]); printf("\n");}solve(l,u,b,x,n);printf("解为:\n");for(i=1;i<=n;i++)printf("x%d=%f\n",i,x[i]);}(2)(3)#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;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 (int 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(){c[0]=c[0]/b[0];for(int 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(){f[0]=f[0]/b[0];for(int 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];}7.【实验结果与分析总结(含运行结果截图)】。
实验报告一

实验一姓名:专业:班级:实验题目:解线性方程组的直接法日期:一、实验目的及意义1)掌握Gausum消去法及Gausum列主元消去法,能用这两种方法求解方程组。
2)掌握追赶法;3)掌握高斯消去法进行到底的条件;4)了解选主元素高斯消去法的优点。
二、实验重点及难点1)列主元素消去法2)矩阵的LU分解三、实验条件1)每人一台计算机2)应用软件:Matlab四、实验要求1)验证Gausum列主元消去法2)设计LU分解法程序3)设计追赶法程序五、实验内容1)补充程序,使程序完整,用列主元素消去法解方程组⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎭⎫⎝⎛⎪⎪⎪⎭⎫⎝⎛2/52/11931423222321xxx。
function x=Gaussumxiaoqufa(A,b)% 用Gauss列主元消去法解线性方程组Ax=b n=length(b);x=zeros(n,1);c=zeros(1,n);% 寻找最大主元t=0;for i=1:n-1max=abs(A(i,i));m=i;for j=i+1:nif max<abs(A(j,i)) max=abs(A(j,i)); m=j; end end if m~=ifor k=1:nc(k)=A(i,k); A(i,k)=A(m,k); A(m,k)=c(k); end t=b(i); b(i)=b(m); b(m)=t; endfor k=i+1:n for j=i+1:nA(k,j)=A(k,j)-A(i,j)*A(k,i)/A(i,i); endb(k)=b(k)-b(i)*A(k,i)/A(i,i); A(k,i)=0; end end % 回代求解x(n)=b(n)/A(n,n); for i=n-1:-1:1 sum=0; for j=i+1:nsum=sum+A(i,j)*x(j); endx(i)=(b(i)-sum)/A(i,i); end2)补充程序,使程序完整,用LU 分解法解方程组⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛2/52/11931423222321x x x 。
实验2_求解线性方程组直接法(1)范文

数值分析实验报告二求解线性方程组的直接方法(2学时)班级专业 11信科一班 姓名 李国中 学号 18 日期 4/9一 实验目的1.掌握求解线性方程组的高斯消元法及列主元素法;2. 掌握求解线性方程组的克劳特法;3. 掌握求解线性方程组的平方根法。
二 实验内容1.用高斯消元法求解方程组(精度要求为610-=ε):1231231233272212240x x x x x x x x x -+=⎧⎪-+-=-⎨⎪-+=⎩ 2.用克劳特法求解上述方程组(精度要求为610-=ε)。
3. 用平方根法求解上述方程组(精度要求为610-=ε)。
4. 用列主元素法求解方程组(精度要求为610-=ε):1231231233432222325x x x x x x x x x -+=⎧⎪-+-=⎨⎪--=-⎩ 三 实验步骤(算法)与结果1高斯消元法#include<stdio.h>#include <stdlib.h>#include <conio.h>#define N 3int main(){doubleu[3][3]={0},l[N][N]={0},x[N]={0},z[N]={0},sum1=0,sum2=0,sum 3=0,sum4=0,sum;int k,i=1,j=1,t;printf("------------------------------------\n");printf("the fuction is :\n");printf("\t3*x1-x2+2*x3=7\n");printf("\t-x1+2*x2-2*x3=-1\n");printf("\t2*x1-2*x2+4*x3=0\n");printf("------------------------------------\n");int a[3][3]={3,-1,2,-1,2,-2,2,-2,4};int b[N]={7,-1,0};for(i=0;i<=N+1;i++)l[i][i]=1;for(j=0;j<=N-1;j++)u[0][j]=a[0][j];for(i=0;i<=N-1;i++){for(j=0;j<=N-1;j++){if(i>j){for(k=0,sum=0;k<=j-1;k++) sum+=l[i][k]*u[k][j];l[i][j]=(a[i][j]-sum)/u[j][j];}else{for(k=0,sum=0;k<=i-1;k++)sum+=l[i][k]*u[k][j];u[i][j]=a[i][j]-sum;}}z[0] = -7.0;z[1]=b[1]-l[1][0]*z[0];z[2]=b[2]-l[2][0]*z[0]-l[2][1]*z[1];}x[2]=b[2]/u[2][2];x[1]=(b[1]-u[1][2]*x[2])/u[1][1];x[0]=(b[0]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0]; printf("\n");printf("l矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%lf ",l[i][j]);}printf("\n");}printf("\n");printf("u矩阵如下\n");for(i=0;i<=N-1;i++){for(j=0;j<=N-1;j++)printf("%-10lf",u[i][j]);printf("%-10lf\n",-z[i]);}x[0]=3.5;x[1]=1.0;x[2]=1.25;for(i=0;i<=N-1;i++)printf("x(%d)=%-lf\n",i+1,x[i]);return 0;}2克劳特法#include <stdio.h>#include <stdlib.h>#include <conio.h>#define N 3int main(){int i,j;double a[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0}; double u[3][4]={0};double l[3][3]={0};double x[3]={0};printf("------------------------------------\n");printf("the fuction is :\n");printf("\t3*x1-x2+2*x3=7\n");printf("\t-x1+2*x2-2*x3=-1\n");printf("\t2*x1-2*x2+4*x3=0\n");printf("------------------------------------\n");i=0;while(i<N)//u[i][i]=1{u[i][i]=1;i++;}printf("a矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%lf ",a[i][j]);}printf("\n");}l[0][0]=a[0][0];u[0][1]=a[0][1]/l[0][0];u[0][2]=a[0][2]/l[0][0];u[0][3]=a[0][3]/l[0][0];l[1][0]=a[1][0]/u[0][0];l[1][1]=a[1][1]-l[1][0]*u[0][1];u[1][2]=(a[1][2]-l[1][0]*u[0][2])/l[1][1];u[1][3]=(a[1][3]-l[1][0]*u[0][3])/l[1][1];l[2][0]=a[2][0]/u[0][0];l[2][1]=(a[2][1]-l[2][0]*u[0][1])/ u[1][1];l[2][2]=a[2][2]-l[2][0]*u[0][2]-l[2][1]*u[1][2];u[2][3]=(a[2][3]-l[2][0]*u[0][3]-l[2][1]*u[1][3])/l[2][2]; printf("------------------------------------\n");printf("l矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%lf ",l[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n");printf("u矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%lf ",u[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); x[2]=u[2][3]/u[2][2];x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1];x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0];for(i=0;i<=N-1;i++)printf("x(%d)=%-lf\n",i+1,x[i]);getch();return 0;}3.平方跟法#include <stdio.h>#include <stdlib.h>#include <conio.h>#include <math.h>#define N 3int main(){double u[3][4]={0};double l[3][3]={0};double x[3]={0};double a[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0};int i=0,j=0;printf("------------------------------------\n"); printf("the fuction is :\n");printf("\t3*x1-x2+2*x3=7\n");printf("\t-x1+2*x2-2*x3=-1\n");printf("\t2*x1-2*x2+4*x3=0\n");printf("------------------------------------\n");u[0][0]=sqrt(a[0][0]);l[0][0]=sqrt(a[0][0]);u[0][1]=a[0][1]/l[0][0];u[0][2]=a[0][2]/l[0][0];u[0][3]=a[0][3]/l[0][0];l[1][0]=a[1][0]/u[0][0];l[1][1]=sqrt(a[1][1]-l[1][0]*u[0][1]);u[1][1]=l[1][1];u[1][2]=(a[1][2]-l[1][0]*u[0][2])/l[1][1];u[1][3]=(a[1][3]-l[1][0]*u[0][3])/l[1][1];l[2][0]=a[2][0]/u[0][0];l[2][1]=(a[2][1]-l[2][0]*u[0][1])/ u[1][1];l[2][2]=sqrt(a[2][2]-l[2][0]*u[0][2]-l[2][1]*u[1][2]); u[2][2]=l[2][2];u[2][3]=(a[2][3]-l[2][0]*u[0][3]-l[2][1]*u[1][3])/l[2][2];printf("a矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%lf ",a[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); printf("l矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%lf ",l[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); printf("u矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%lf ",u[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n");x[2]=u[2][3]/u[2][2];x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1];x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0];for(i=0;i<=N-1;i++)printf("x(%d)=%-lf\n",i+1,x[i]);getch();return 0;}4列主元素法#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <math.h> #define N 3int main(){int i,j;double max;double a[3][4]={3,-1,2,7,-1,2,-2,1,2,-2,4,0};double u[3][4]={0};double l[3][3]={0};double x[3]={0};printf("------------------------------------\n");printf("the fuction is :\n");printf("\t3*x1-x2+4*x3=3\n");printf("\t-x1+2*x2-2*x3=2\n");printf("\t2*x1-3*x2-2*x3=5\n");printf("------------------------------------\n");printf("a矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%-10lf ",a[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n");if(fabs(a[0][0])<fabs(a[1][0])){if(fabs(a[1][0])<fabs(a[2][0])){for(j=0;j<3;j++){max=a[2][j]; a[2][j]=a[0][j];a[0][j]=max;} }else{for(j=0;j<3;j++){max=a[1][j]; a[1][j]=a[0][j];a[0][j]=max;} }}else{if(fabs(a[0][0])<fabs(a[2][0])){for(j=0;j<3;j++){max=a[2][j]; a[2][j]=a[0][j];a[0][j]=max;} }}printf("a转换后矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%-10lf ",a[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); for(i=0;i<N;i++)l[i][i]=1;for(j=0,i=0;j<N+1;j++)u[i][j]=a[i][j]/l[0][0];l[1][0]=a[1][0]/u[0][0];l[2][0]=a[2][0]/u[0][0];u[1][1]=a[1][1]-l[1][0]*a[0][1];u[1][2]=a[1][2]-l[1][0]*a[0][2];u[1][3]=a[1][3]-l[1][0]*a[0][3];u[2][1]=a[2][1]-l[2][0]*a[0][1];u[2][2]=a[2][2]-l[2][0]*a[0][2];u[2][3]=a[2][3]-l[2][0]*a[0][3];if(u[1][1]<u[2][1]){for(j=1;j<N+1;j++)max=u[2][j];u[2][j]=u[1][j];u[1][j]=max; }l[2][1]=u[2][1]/u[1][1];u[2][1]=0;u[2][2]=u[2][2]-l[2][1]*u[1][2];u[2][3]=u[2][3]-l[2][1]*u[1][3];printf("l矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N;j++){printf("%lf ",l[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); printf("u矩阵如下\n");for(i=0;i<N;i++){for(j=0;j<N+1;j++){printf("%lf ",u[i][j]);}printf("\n");}printf("\n");printf("------------------------------------\n"); x[2]=u[2][3]/u[2][2];x[1]=(u[1][3]-u[1][2]*x[2])/u[1][1];x[0]=(u[0][3]-u[0][1]*x[1]-u[0][2]*x[2])/u[0][0];for(i=0;i<=N-1;i++)printf("x(%d)=%-lf\n",i+1,x[i]);return 0;}四实验收获与教师评语。
解线性代数方程

解线性代数方程————————————————————————————————作者:————————————————————————————————日期:求解线性方程组的直接解法5.3特殊矩阵的三角分解①实对称矩阵的LDL T分解设A是实对称阵,且A的所有顺序主子式均不为零,则LDR分解中R=L T, 故可用以作LDL T分解.这就是说,当A的对角元素非零时,我们可以作LU分解,也就得到LDL T分解,L相同,是单位上三角阵,U的对角元素构成D.不过没有利用对称性,存储量运算量都未能节省—预计是一半。
试用n=3的计算表格说明如何实现节省。
d1=u11 =a11u12=a12l21=u12/d1u13=a13l31=u13/d1d2=u22=a22-l21u12u23=a23-l21u13l32=u23/d2u33=a33-l31u13-l32u23这样,可用上半部元素逐列计算D,L T。
也可用下半部元素逐行计算L,D。
引进輔助量t1, t2代替u1j,u2j,并利用对称性得到:d1=a11t1=a21l21= t1/d1d2= a22-t1l21t1=a31 l31=t1/d1t2=a32-t1l21l32=t2/d2d3=a33-t1l31-t2l32据此不难写出LDL T分解A=LDL T的计算公式和程序(逐行计算L,D).d1=a11for i=2:nfor j=1:i-1t j=a ij-l j1t1-l j2t2-…-l j,j-1t j-1l ij=t j/d jendd i=a ii-l i1t1-l i2t2-…- l i,i-1t i-1end存储约n(n+1)/2单元,乘加运算各约n3/6.利用LDL T分解解Ax=b分四步:1.分解A=LDL T2.解Lg=b 求g3.解Dy=g 求y4.解L T x=y 求x②实对称正定矩阵的LL T分解A实对称正定时顺序主子式皆正,可作LDL T,D的对角元素皆正,有正的平方根。
(整理)线性方程组的直接法

第二章线性方程组的直接法在近代数学数值计算和工程应用中,求解线性方程组是重要的课题。
例如,样条插值中形成的关系式,曲线拟合形成的法方程等,都落实到解一个元线性方程组,尤其是大型方程组的求解,即求线性方程组(2.1)的未知量的数值。
(2.1)其中ai j,bi为常数。
上式可写成矩阵形式Ax = b,即(2.2)其中,为系数矩阵,为解向量,为常数向量。
当detA=D0时,由线性代数中的克莱姆法则,方程组的解存在且惟一,且有为系数矩阵的第列元素以代替的矩阵的行列式的值。
克莱姆法则在建立线性方程组解的理论基础中功不可没,但是在实际计算中,我们难以承受它的计算量。
例如,解一个100阶的线性方程组,乘除法次数约为(101·100!·99),即使以每秒的运算速度,也需要近年的时间。
在石油勘探、天气预报等问题中常常出现成百上千阶的方程组,也就产生了各种形式方程组数值解法的需求。
研究大型方程组的解是目前计算数学中的一个重要方向和课题。
解方程组的方法可归纳为直接解法和迭代解法。
从理论上来说,直接法经过有限次四则运算,假定每一步运算过程中没有舍入误差,那么,最后得到方程组的解就是精确解。
但是,这只是理想化的假定,在计算过程中,完全杜绝舍入误差是不可能的,只能控制和约束由有限位算术运算带来的舍入误差的增长和危害,这样直接法得到的解也不一定是绝对精确的。
迭代法是将方程组的解看作某种极限过程的向量极限的值,像第2章中非线性方程求解一样,计算极限过程是用迭代过程完成的,只不过将迭代式中单变量换成向量而已。
在用迭代算法时,我们不可能将极限过程算到底,只能将迭代进行有限多次,得到满足一定精度要求的方程组的近似解。
在数值计算历史上,直接解法和迭代解法交替生辉。
一种解法的兴旺与计算机的硬件环境和问题规模是密切相关的。
一般说来,对同等规模的线性方程组,直接法对计算机的要求高于迭代法。
对于中等规模的线性方程组,由于直接法的准确性和可靠性高,一般都用直接法求解。
数值分析实验报告

%消元过程
fori=k+1:n
m=A(i,k)/A(k,k);
forj=k+1:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*A(k,k);
end
det=det*A(n,n);
%回代过程
ifabs(A(n,n))<1e-10
flag='failure';return;
*x=(x0,x1….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Pn(x)在t处的函数值
*返回值 插值函数Pn(x)在t处的函数值
*/
procedureNewton
forj=0to n
d1jyj;
endfor
forj=1to n
fori=j to n
[n,m]=size(A);nb=length(b)
%当方程组行与列的维数不相等时,停止计算,并输出出错信息
ifn~=m
error('The row and columns of matrix A must beepual!');
return;
end
%当方程组与右端项的维数不匹配时,停止计算,并输出错误信息
clear
fprintf('gauss-seidel迭代法')
x1_(1)=0;
x2_(1)=0;
x3_(1)=0;
fori=1:9
x1_(i+1)=7.2+0.1*x2_(i)+0.2*x3_(i);
戴维定理验证实验报告

戴维定理验证实验报告戴维定理验证实验报告引言:戴维定理是由英国数学家戴维于1837年提出的,它是代数几何中的一个重要定理,也被称为戴维-弗斯特定理。
该定理是指任意一个代数方程组的解可以通过适当的代数运算和根式运算得到。
戴维定理的发现对于解决代数方程组问题起到了重要的指导作用。
为了验证戴维定理的正确性,我们进行了一系列的实验。
实验一:线性方程组的解我们首先选择了一个简单的线性方程组进行实验。
假设有以下方程组:2x + 3y = 74x - 2y = 2我们可以通过代数运算将这个方程组转化为矩阵形式:| 2 3 | | x | | 7 || 4 -2 | * | y | = | 2 |通过高斯消元法,我们可以求解出x和y的值,得到解x = 1,y = 2。
这个结果与戴维定理所预言的结果一致,验证了戴维定理在线性方程组中的适用性。
实验二:二次方程的解接下来,我们进行了一个二次方程的实验。
假设有以下方程:x^2 + 3x + 2 = 0我们可以通过配方法将这个方程转化为标准二次方程的形式:(x + 1)(x + 2) = 0从中我们可以得到两个解x = -1和x = -2。
这个结果也与戴维定理所预言的结果一致。
实验三:高次方程的解为了进一步验证戴维定理的适用性,我们选择了一个高次方程进行实验。
假设有以下方程:x^4 - 5x^2 + 4 = 0通过代数运算,我们可以将这个方程转化为两个二次方程的形式:(x^2 - 1)(x^2 - 4) = 0进一步化简,我们可以得到四个解x = -2,x = -1,x = 1和x = 2。
这个结果再次验证了戴维定理在高次方程中的适用性。
结论:通过以上实验,我们验证了戴维定理在不同类型的方程中的适用性。
无论是线性方程组、二次方程还是高次方程,戴维定理都能够给出准确的解。
这证明了戴维定理在代数几何中的重要性和实用性。
戴维定理的发现不仅对于解决数学问题有着重要的意义,也为代数几何的发展做出了巨大贡献。
第三章 线性代数方程组的直接解法1

for
j = n : −1 : 2
y( j ) = y( j ) u( j , j )
y (1 : j − 1) = y (1 : j − 1) − y ( j )u(1 : j − 1, j )
end
y(1) = y(1) u(1,1)
加减乘除运算次数之和)均为 两种算法的工作量(加减乘除运算次数之和 两种算法的工作量 加减乘除运算次数之和 均为 n
高斯变换
a 0
(1) 11
取
L = I +l e 1
其中 l i 1
T 1 1
l1 = (0, l21,⋯, ln1)
a
(1) 11
T
=
−1 1
a
(1) i1
i = 2, 3,⋯ , n
−1 1 T 1 1
记
A
( 2)
=L A
(1)
L = I −l e
(1 a11) 0 I n−1 c1 T 1
(i ) ii
的各阶顺序主子式都不等于零 顺序主子式都不等于 A 的各阶顺序主子式都不等于零,即
−1 −1 1 2
1 4 7 0 −3 − 6 = U L2 L1 A = 0 0 1
∴ A = L L U = LU
其中
1 0 0 2 1 0 −1 − 1 L = L1 L2 = 3 2 1
Gauss消去法的矩阵表示 消去法的矩阵表示 设给定 n 阶矩阵 记
1 0 0 −2 1 0 L1 = −3 0 1
设给定矩阵
则有
7 1 4 0 −3 −6 L1 A = 0 −6 −11
第三章 解线性方程组的直接法

第三章 解线性方程组的直接法3.1 引言许多科学技术问题要归结为解含有多个未知量x 1, x 2, …, x n 的线性方程组。
例如,用最小二乘法求实验数据的曲线拟合问题,三次样条函数问题,解非线性方程组的问题,用差分法或有限元法解常微分方程、偏微分方程的边值等,最后都归结为求解线性代数方程组。
关于线性方程组的数值解法一般有两类:直接法和迭代法。
1. 直接法直接法就是经过有限步算术运算,可求得线性方程组精确解的方法(假设计算过程中没有舍 入误差)。
但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解。
本章将阐述这类算法中最基本的高斯消去法及其某些变形。
2. 迭代法迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法,迭代法需要的计算机存储 单元少、程序设计简单、原始系数矩阵在计算过程中不变,这些都是迭代法的优点;但是存在收敛性和收敛速度的问题。
迭代法适用于解大型的稀疏矩阵方程组。
为了讨论线性方程组的数值解法,需要复习一些基本的矩阵代数知识。
3.1.1 向量和矩阵 用nm ⨯R表示全部n m ⨯实矩阵的向量空间,nm C⨯表示全部n m ⨯复矩阵的向量空间。
()⎪⎪⎪⎪⎪⎭⎫⎝⎛==⇔∈⨯nn n n n n ij nm a a aa a aa a a a212222111211A R A 此实数排成的矩形表,称为m 行n 列矩阵。
⎪⎪⎪⎪⎪⎭⎫⎝⎛=⇔∈n n x x x 21x R x x 称为n 维列向量矩阵A 也可以写成)(n 21a ,,a ,a A = 其中 a i 为A 的第i 列。
同理⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=T T T n 21b b b A其中T i b 为A 的第i 行。
矩阵的基本运算:(1) 矩阵加法 )( ,n m n m R C ,R B ,R A B A C ⨯⨯⨯∈∈∈+=+=n m ij ij ij b a c . (2) 矩阵与标量的乘法 ij j a ci αα== ,A C (3) 矩阵与矩阵乘法 p nk kjik b acij ⨯⨯⨯=∈∈∈==∑m p n n m R C ,R B ,R A AB C ( ,1(4) 转置矩阵 ji ij T nm a c ==∈⨯ , ,A C RA(5) 单位矩阵 ()n n ⨯∈=R e ,,e ,e I n 21 ,其中 ()Tk e 0,0,1,0,0 = k=1,2,…,n(6) 非奇异矩阵 设nn ⨯∈RA ,nn ⨯∈RB 。
计算方法第三章线性方程组的直接解法

5 3
3 1
r3
r1 6
6 1 18 2
1 0
4 5 1 3
3 1
r3 r225
1 0
4 1
5 3
3 1
0 25 48 16
0 0 27 9
林龙
计算方法
6
化原方程组为三角方程组的过程为消元过程. 解三角方程组的过程为回代过程.
也可将上边的增广矩阵进一步化简.
1 4 5 3
1 0 7 1
xi
Di D
(i
1, 2,3,
),由于方程含有n 1个
行列式.如对每个行列式按展开定理来计算.
用克莱姆法则求解,所需要的乘除运算量为
n!(n2 1) n次,若n 20用每秒一千万次的
计算机要三百万年,所以并不是凡直接法都
可以用来做实际运算.
林龙
计算方法
4
设有
§3.1直接法
a11x1 a12 x2 a21x1 a22 x2
解 : 10
7
0
7
r1 r2
5 1 5 6
林龙
计算方法
16
10 3 5
7 2 1
0 6 5
7 4 6
r2
3 10
r1
r3
5 10
r1
10
0
0
7 0.1 2.5
0 7 6 6.1 5 2.5
r2 r3
r3
1 25
r2
10 7 0 7 x3 1
0
2.5
5
2.5
x2
2.5 5x
nn
a11 a12 .... a1n 1 0 0
a21
a22
线性方程组的直接解法迭代解法

广东金融学院实验报告课程名称:数值分析实验目的及要求实验目的:题一:通过数值实验,从中体会解线性方程组选主元的必要性和LU分解法的优点,以及方程组系数矩阵和右端向最的微小变化对解向最的影响。
比较各种直接接法在解线性方程组中的效果;题二:认识齐种迭代法收敛的含义、影响齐迭代法收敛速度的因素。
实验要求:题一:(1)在MATLAB中编写程序用列主元高斯消去法和LU分解求解上述方程组,输出曲b中矩阵A 及向量b和A二LU分解中的L及U, detA及解向量X.(2)将方程组中的2. 099999改为2. 1, 5. 900001改为5. 9,用列主元高斯消去法求解变换后的方程组,输出解向最x及detA,并与(1)中的结果比较。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出方程组的解。
请与列主元高斯消公法和LU分解法求出的解进行比较,体会选主元的方法具有良好的数值稳定性。
用MATLAB的内部曲数det求出系数行列式的值,并与(1)、(2)中输出的系数行列式的值进行比较。
(4)比较以上各种直接解法在解线性方程组中的效果。
题二:(1)选取不同的初始向M:X(0)及右端向最b,给泄迭代误差要求,用Jacobi迭代法和Gauss-Seidel迭代法求解,观察得到的序列是否收敛?若收敛,记录迭代次数,分析计算结果并得出你的结论。
列岀算法清单。
(2)用SOR迭代法求上述方程组的解,松弛系数血取1<69<2的不同的三个值,在< 10"5时停止迭代,记录迭代次数,分析计算结呆与松弛系数血的关系并得出你的结论。
(3)用MATLAB的内部函数inv求出系数矩阵的逆矩阵.再输入命令^inv(A)*b>即可求出上述各个方程组的解.并与上述三种方法求出的解进行比较。
请将比较结果列入卜表。
方程组的解X1 Xr■迭代次数误差楮确解Jacibi解法Gause・seidel 解法SOR 解法00= 60= 60=实验环境及相关情况(包含使用软件、实验设备、主要仪器及材料等)1. Win72. Mat lab 7.0实验内容及步骤(包含简要的实验步骤流程) 实验内容:题一:解卜列线性方程组'10 -7‘X 】、(8、-3 2.099999 62Xr5.9000015-1 5 -15、12> 0< 1 >题二研究解线性方程组 做=b 迭代法的收敛性、收敛速度以及SOR 方法中/佳松弛因子的选取问题, 用迭代法求解做二b,其中・4 -1r■7 A=4 -81 ,b =-21-2 ■1515实验结果(包括程序或图表、结论陈述.数据记录及分析等,可附页)题一:直接解法解线性方程组(1)列主兀高斯消去法与LU 分解求解列主元高斯消去法:编写matalab 程序(见附录gaosi.m ),输出矩阵10.000 -7.000 0.000= 0.000 2.5000-5.000一 0.000 0.0006.0000020.000 0.000 0.000向量8 b =1 8.300 L5.0800J解向量:X = (0 ・-1 , 1 r I )7 其中系数行列式的值det (A )=762.00009LU 分解求解:编J matalab 程序(见附录zhjLU. m 和LU ・m ),执行输出:-1.5 2.300 5.080-3.0001.000000.00000.5000 -25000001.0000 0.2000 -24000000.9600 10.0000 -7.0000 0.0000 1.0000n = 0.0000-0.0000010.0000 2.3000 —0.0000 0.000015000000 57500000.0000 0.0000 0.0000 5.0800在matlab 命令窗II 输入L*U ,可以得到A 二L*U ,即分解结果正确。
数值计算方法实验报告

数值分析实验报告实验一、解线性方程组的直接方法——梯形电阻电路问题利用追赶法求解三对角方程组的方法,解决梯形电阻电路问题:电路中的各个电流{1i ,2i ,…,8i }须满足下列线性方程组:R V i i =- 22 210 252321=-+-i i i 0 252 432=-+-i i i 0 252 543=-+-i i i 0 252 654=-+-i i i 0 252 765=-+-i i i 0 252 876=-+-i i i 052 87=+-i i设V 220=V ,Ω=27R ,运用追赶法,求各段电路的电流量。
问题分析:上述方程组可用矩阵表示为:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡--------------00000001481.8522520000002520000002520000002520000002520000002520000002287654321i i i i i i i i问题转化为求解A x b =,8阶方阵A 满足顺序主子式(1,2...7)0i A i =≠,因此矩阵A存在唯一的Doolittle 分解,可以采用解三对角矩阵的追赶法!追赶法a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0]; d=[220/27 0 0 0 0 0 0 0];Matlab 程序function x= zhuiganfa( a,b,c,d )%追赶法实现要求:|b1|>|C1|>0,|bi|>=|ai|+|ci| n=length(b); u=ones(1,n); L=ones(1,n); y=ones(1,n); u(1)=b(1); y(1)=d(1); for i=2:nL(i)=a(i)/u(i-1);u(i)=b(i)-c(i-1)*L(i); y(i)=d(i)-y(i-1)*L(i); endx(n)=y(n)/u(n); for k=n-1:-1:1x(k)=(y(k)-c(k)*x(k+1))/u(k); end endMATLAB 命令窗口输入:a=[0 -2 -2 -2 -2 -2 -2 -2]; b=[2 5 5 5 5 5 5 5];c=[-2 -2 -2 -2 -2 -2 -2 0] d=[220/27 0 0 0 0 0 0 0];x= zhuiganfa(a,b,c,d )运行结果为:x =8.1478 4.0737 2.0365 1.0175 0.5073 0.2506 0.1194 0.0477存在问题根据电路分析中的所讲到的回路电流法,可以列出8个以回路电流为独立变量的方程,课本上给出的第八个回路电流方程存在问题,正确的应该是78240i i -+=;或者可以根据电路并联分流的知识,同样可以确定78240i i -+=。
MATLAB实验一 解线性方程组的直接法

输出 Ax b 中系数 A LU 分解的矩阵 L 和 U ,解向量 x 和 det(A) ;用列主元法 的行交换次序解向量 x 和求 det(A) ;比较两种方法所得结果。
2、用列主高斯消元法解线性方程组 Ax b 。
3.01 6.03 1.99 x1 1 4.16 1.23 x 2 1 (1) 、 1.27 0.987 4.81 9.34 x 1 3 3.00 6.03 1.99 x1 1 4.16 1.23 x 2 1 (2) 、 1.27 0.990 4.81 9.34 x 1 3
index = 1 3、在 MATLAB 窗口:
A=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10]; b=[32 23 33 31]'; x=A\b b1=[32.1 22.9 33.1 30.9]'; x1=A\b1 A1=[10 7 8.1 7.2;7.08 5.04 6 5;8 5.98 9.89 9;6.99 5 9 9.98]; x2=A1\b delta_b=norm(b-b1)/norm(b) delta_A=norm(A-A1)/norm(A) delta_x1=norm(x-x1)/norm(x) delta_x2=norm(x-x2)/norm(x)
二. 实验要求 1、按照题目要求完成实验内容; 2、写出相应的 Matlab 程序; 3、给出实验结果(可以用表格展示实验结果); 4、分析和讨论实验结果并提出可能的优化实验。 5、写出实验报告。 三. 实验步骤 1、用 LU 分解及列主元高斯消去法解线性方程组
7 10 3 2.099999 a) 5 1 2 1 1 x1 8 6 2 x 2 5.900001 , 5 1 x3 5 0 2 1 x 4 0
线性方程组的直接解法程序设计(计算方法与数学实验)

线性方程组的直接解法2.1实验目的理解线性方程组计算机解法中的直接解法的求解过程和特点,学习科学计算的方法和简单的编程技术。
2.2程序中Mathematica语句解释1.MatrixForm[a] 以矩阵的形式显示a2.Table[Random[Integer,{xa,xb}],{n}] 产生xa 到xb 之间的n个随机整数的向量3. x=Table[0,{n}] 定义变量x为n维向量4. a=Table[0,{n},{n}] 定义变量a为n n矩阵5. Timing[expr] 给出计算表达式expr所用的计算机时间2.3方法、程序、实验解线性方程组的直接法是用有限次运算求出线性方程组 Ax=b 的解的方法。
线性方程组的直接法主要有Gauss消元法及其变形、LU(如Doolittle、Crout方法等)分解法和一些求解特殊线性方程组的方法(如追赶法、LDLT法等)1. Gauss消元法1) Gauss消元法的构造过程Gauss消元法是一个古老的直接法,由它改进得到的选主元的消元法,是目前计算机上常用于求低阶稠密矩阵方程组的有效方法,它是通过消元将一般线性方程组的求解问题转化为三角方程组的求解问题的。
Gauss消元法的求解过程可分为两个阶段:首先,把原方程组化为上三角形方程组,称之为“消去”过程;然后,用逆次序逐一求出三角方程组(原方程组的等价方程组)的解,并称之为“回代”过程,其“消去”和“回2) Gauss消元法程序Clear[a,b,x];n= Input[“线性方程组阶数n=”];a=Input["系数矩阵A="];b=Input["常数项b="];eps1=0.000000001;t=1;Do[If[Abs[a[[k,k]]]<eps1,Print["Gauss消元失效"];t=0;Break[]];Do[m=-a[[i,k]]/a[[k,k]];Do[a[[i,j]]=a[[i,j]]+m*a[[k,j]],{j,k+1,n}];b[[i]]=b[[i]]+m*b[[k]],{i,k+1,n}],{k,1,n}];x=Table[0,{n}];If[t==1,x[[n]]=b[[n]]/a[[n,n]];Do[x[[k]]=(b[[k]]-Sum[a[[k,j]]*x[[j]],{j,k+1,n}])/a[[k,k]],{k,n-1,1,-1}]];Print[“Ax=b 的解为 ” , x]说明 本程序用于求线性方程组Ax=b 的解。
数值计算方法-第5章_解线性方程组的直接法

本章讲解直接法
5.1 消元法
我们知道,下面有3种方程的解我们可以直接求出:
①
n次运算
A
diag(a11, a22 ,
, ann )
xi
bi aii
,i
1,
,n
②
(n+1)n/2次运算
l11
A
l21 ln1
l22 ln2
(aik
k 1
liklkr ) r 1 lkk
,i k 1, , n
因此不常用
又 l11
1
l11
l21 l22
ln1
ln2
lnn
l '21 l 'n1
1 l'n2
1
l22
lnn
则有
A L~D~D~T L~T LDLT
L~
D~
1
L
l21 ln1
lnn
xi
bi
i 1
lij x j
j 1
lii
,i
1,
,n
③
(n+1)n/2次运算
u11
A
u12 u22
u1n
u2n unn
xi
bi
n
uij x j
j i 1
uii
,i
n,
,1
对方程组,作如下的变换,解不变 ①交换两个方程的次序 ②一个方程的两边同时乘以一个非0的数 ③一个方程的两边同时乘以一个非0数,加到另一个方程
1 ln2
1
d1
D
d2
dn
a11 a12
a21 a22
计算方法实验:解线性方程组的直接法

实验二解线性方程组的直接法一、实验目的用列主元素高斯消去法和三角分解法解线性方程组Ax=b。
式中,A为n阶非奇异方阵,x,b是n阶列向量,并分析选主元素的重要性。
二、实验方法(1)列主元素高斯消去法通过变换,将系数矩阵换成等价的上三角矩阵,在每步消元过程中,选列主元素。
对k=1,2,……n-1,逐次计算l ik=a ik(k-1)/a kk(k-1) (i=k+1,k+2,……,n)a ij(k)=a ij(k-1)-l ik a kj(k-1) (i,j=k+1,k+2,……,n)b i(k)=b i(k-1)-l ik b k(k-1) (i=k+1,k+2,……,n)逐步回代气的原方程组的解X n=b i(n-1)/a nn(n-1)X k=(b k(k-1)_a kj(k-1)x j)/a kk(k-1) (k=n-1,n-2, (1)(2)直接三角分解法由于两个矩阵相等就是它们的对应元素相等,因此通过比较A与LU的对应元素,即可得到直接计算L,U的元素的公式。
设A=L×U,其中U的第一行、L的第一列的元素分别为对(依次:U的第二行,L的第二列,U的第三行,L的第三列……),有由上述两种方法得到矩阵A的LU分解后,求解Ly=b与Ux=y的计算公式为∑+=n1kj三、实验内容解下列方程组·=四、实验程序(1)列主元素高斯消去法(2)直接三角分解法0147.06721.109998.42371.13142.17643.89217.44129.35435.15330.27875.15301.04017.31651.18326.31348.14321xxxx9237.164231.183941.65342.9五、实验结果(仅供参考)精确解为:(1,1,1,1)T六、结果分析实验的数学原理很容易理解,也容易上手。
把运算的结果带入原方程组,可以发现符合的还是比较好。
这说明列主元消去法计算这类方程的有效性。
3解线性方程组的直接法习题+答案

2 1 2 1 2
1 5 2 3 5
1
3
2
3
5
1 0 0
2 1 1
得
A
LU
,其中 L
1 2
1
0
,
U
0
5 2
3
2
1
3
1
0
0
3
2 5
姓名
第三章 线性方程组的直接解法
学号
班级
习题主要考察点:高斯消去法,LU 分解法,平方根法和追赶法解线性方程组。
要点:(1)利用列主元高斯消去法求解线性方程组
(2)矩阵的 Doolittle 分解
(3)利用系数矩阵的 Doolittle 分解求解线性方程组
例 1 用列主元消元法的方程组
2
x
1
3 x1
4 0 0
5 7
3 1 22 12 6
15
7
2
31
4 5 7 15 4 5 7 15
0 12 6 31 0 12 6 31
主元 0
3
1
7
消去
0
0
1
3
2 2 2
4 8
得等价的线性方程组为:
1 2 3 x1 2 2 7 2 x2 3 4 8 4 x 3 0
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。
如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。
㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。
(2 列出开发利用方案编制所依据的主要基础性资料的名称。
如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。
对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。
二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。
2、国内近、远期的需求量及主要销向预测。
㈡产品价格分析
1、国内矿产品价格现状。
2、矿产品价格稳定性及变化趋势。
三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。
2、矿区矿产资源概况。
3、该设计与矿区总体开发的关系。
㈡该设计项目的资源概况
1、矿床地质及构造特征。
2、矿床开采技术条件及水文地质条件。