您现在的位置:网站首页答辩论文计算机毕业设计计算机论文计算机软件

列主元高斯消去法解线性方程组

  • 简介:(毕业论文 字数:2378 页数:12 带程序)摘 要:本次C语言程序设计题目有二,分别是:列主元高斯消去法解线性方程组和用高斯—约当法求所给矩阵的逆。列主元高斯消去法解线性方程组要求此次C语言程序设计使我对C语言加深理解。 关键词 : C语...
    • 请与管理员联系购买资料 QQ:5739126
  • 论文简介
  • 相关论文
  • 论文下载

(毕业论文 字数:2378 页数:12  带程序)摘 要:本次C语言程序设计题目有二,分别是:列主元高斯消去法解线性方程组和用高斯—约当法求所给矩阵的逆。列主元高斯消去法解线性方程组要求此次C语言程序设计使我对C语言加深理解。

关键词 : C语言程序设计,列主元高斯消去法解线性方程组,高斯—约当法求所给矩阵的逆。

目录
摘要…………………………………………………………………1

关键词………………………………………………………………1

1 列主元高斯消去法解线性方程组……………………………2
程序要求……………………………………………………………4
算法简介……………………………………………………………2
流程图………………………………………………………………3
源程序………………………………………………………………4
运行结果……………………………………………………………4

2 用高斯—约当法求所给矩阵的逆……………………………5
程序要求……………………………………………………………5
算法简介……………………………………………………………5
流程图………………………………………………………………6
源程序………………………………………………………………8
运行结果……………………………………………………………8

总结…………………………………………………………………9

参考文献……………………………………………………………10

一.列主元高斯消去法解线性方程组:
程序要求:要求熟悉列主元高斯消去法,准确运用,判断方程是否有解,并且求出所给方程组的解。
算法简介:
给定线性方程组
.
.

.
它的增广矩阵(a[i][j])
列主元的高斯消去法的计算过程分为两步:消元和回代。
在消元之前对(a[j])k的第k列选取绝对值最大的元素ai0,k(k-1),即|ai0,k(k-1)|=max{|ai,k(k-1)|}
并且把第i0行与第K行互换,然后开始消元。
消元过程的公式为:


消元完成后,增广矩阵成为上三角矩阵,然后进行回代运算,运算过程如下:
Xn=an,n=1
Xn=ak,n+1-∑kj(k)xi (k=n-1,n-2…1)
使用说明 整形变量,A[][]为实型二维数组,X[NUMBER] 用来存放解,
并且程序中还有两个用户自定义的两个函数exchange和max,运行输入矩阵阶数及方程的增广矩阵即可。
流程图:
源程序:
#include <math.h>
#include <stdio.h>
#define NUMBER 20
float A[NUMBER][NUMBER+1] ,ark;
int flag,n;
exchange(int r,int k);
float max(int k);
main()
{
float x[NUMBER]; /*此数组用于存放方程解*/
int r,k,i,j;
char celect;
printf("Input the rank of matrix:"); /*输入矩阵的阶数*/
scanf("%d",&n);
printf("Input Extended Matrix:");
for(i=1;i<=n;i++)
for(j=1;j<=n+1;j++) /*将刚才输入的数存入数组*/
scanf("%f",&A[i][j]);
for(k=1;k<=n-1;k++)
{
ark=max(k);
if(ark==0) /*判断方程是否为线性方程,即是否合法*/
{
printf("\n\nWrong!");
}
else if(flag!=k)
exchange(flag,k);
for(i=k+1;i<=n;i++)
for(j=k+1;j<=n+1;j++)
A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];
}
x[n]=A[n][n+1]/A[n][n];
for( k=n-1;k>=1;k--)
{
float me=0;
for(j=k+1;j<=n;j++)
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
}
exchange(int r,int k) /*交换行的矩函数*/
{
int i;
for(i=1;i<=n+1;i++)
A[0][i]=A[r][i];
for(i=1;i<=n+1;i++)
A[r][i]=A[k][i];
for(i=1;i<=n+1;i++)
A[k][i]=A[0][i];
}
float max(int k) /*比校系数大小的函数*/
{
int i;
float temp=0;
for(i=k;i<=n;i++)
if(fabs(A[i][k])>temp)
{
temp=fabs(A[i][k]);
flag=i;
}
return temp
}
运行结果:
Input the rank of Matrix: 2
Input Extend Matrix: 2 1 3 3 2 5
X1=1.00
X2=1.00

查看评论 已有0位网友发表了看法
  • 验证码: