高斯列主元素消去法
- 格式:doc
- 大小:165.74 KB
- 文档页数:8
printf("得到的结果如下:\n");
for(i=0;i<n;i++)
printf(" x[%d]=% 6.4f\n",i+1,x[i]);
2013-2014(1)专业课程实践论文
题目:高斯列主元素消去法
一、算法理论
1.消元过程:消元结果冲掉 ,行乘数冲掉 ,det存放行列式。
(1) 。
(2)对于 做~ :
按列选主元 ,即确定 使
。
若 ,则输出错误信息;停机。
若 转 ,否则执行换行
消元计算:
。
(3)若 ,则判断 是否等于零:
,则输出“无解”信息;停机。
m=a[i][k]/a[k][k];
for(j=0;j<n+1;j++)
a[i][j]=a[i][j]-a[k][j]*m;
}
}
}
for(i=n-1;i>=0;i--)
{
for(j=i+1;j<n;j++)
a[i][3]=a[i][3]-a[i][j]*x[j];//3为未知函数个数
x[i]=a[i][3]/a[i][i];//3为未知函数个数
return;
}
main()
{floata[N][N+1]={{0.101,2.304,3.555,1.183},{-1.347,3.712,4.623,2.137},{-2.835,1.072,5.643,3.035}};//方程组系数
float x[N],max,m,*c,*d;
int k=0,q=0,n=N,i,j;
for(k=0;k<n && q==0;k++)
{
max=max_value(a,n,k);
if(max==0) q=1;
else
{ if(I!=k)
{
for(j=k;j<n+1;++)
{
c=&a[I][j];
d=&a[k][j];
change(c,d);
}
}
for(i=k+1;i<n;i++)
{
,则输出“非唯一解”,停机。
若 ,则 。
2.回带过程:解冲掉 .
3.输出 及 。 值的大小可以作为方程组是否病态的参考。
二、算法框图
三、算法程序
#include <stdio.h>
#include <math.h>
#define N 3//未知函数个数
int I;
float max_value(float a[N][N+1],int n,int k)
{ float max;
int i;
max=a[k][k];
for(i=k+1;i<n;i++)
if(max<a[i][k])
{
max=a[i][k];
I=i;
}
return(max);
}
void change(float *p,float *q)
{
float temp;
temp=*p; *p=*q; *q=temp;