计算方法实验二实验报告
专业班级: 姓名: 学号: 实验成绩: 1.【实验题目】 解线性方程组的直接法 2.【实验目的】
? 掌握高斯消元法及选列主元素的技术 ? 掌握三角分解法与追赶法
? 掌握向量与矩阵的三种范数及其计算方法 ? 理解方程组的性态、条件数及误差分析 3.【实验内容】
求解方程组,AX=b 其中
4. 【实验要求】
(1)分别列选主元消去法与不选主元消去法分别对以上两个方程组求解
(2)观察小主元并分析对计算结果的影响。
(3)用追赶法求下述三对角线性方程组的解
5. 【算法描述】
6. 【源程序(带注释)】 (1)一:列主元素消去法
#include
using 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< /*将列最大数防在对角线上*/ for(p=0;p system(\ return 0; } void load() { int i,j; for(i=0; i 一般消去法 #include 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=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 (\输入方程组的个数*/ scanf(\ printf (\读取原矩阵A*/ for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf(\ printf (\读取列矩阵B*/ for(i=1;i<=n;i++) scanf(\ 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(\输出矩阵L*/ for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf(\ \ printf(\ } printf(\输出矩阵U*/ for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf(\ \ printf(\