#include
#include
void colpivot(float *c,int n,float x[])
{ int i,j,t,k;
float p;
for(i=0;i<=n-2;i++)
{k=i;
for(j=i+1;j<=n-1;j++)
if(fabs(*(c+j*(n+1)+i))>(fabs(*(c+k*(n+1)+i))))k=j;
if(k!=i)
for(j=i;j<=n;j++)
{
p=*(c+i*(n+1)+j);
*(c+i*(n+1)+j)=*(c+k*(n+1)+j);
*(c+k*(n+1)+j)=p;
}
for(j=i+1;j<=n-1;j++)
{
p=(*(c+j*(n+1)+i))/(*(c+i*(n+1)+i));
for(t=i;t<=n;t++)*(c+j*(n+1)+t)-=p*(*(c+i*(n+1)+t));
}
}
for(i=n-1;i>=0;i--)
{
for(j=n-1;j>=i+1;j--)
(*(c+i*(n+1)+n))-=x[j]*(*(c+i*(n+1)+j));
x[i]=*(c+i*(n+1)+n)/(*(c+i*(n+1)+i));
}
}
void main()
{
void colpivot(float*,int,float[]);
int i;
float x[4];
float c[4][5]={1,-1,2,-1,-8,2,-2,3,-3,-20,1,1,1,0,-2,1,-1,4,3,4,};
colpivot(c[0],4,x);
for(i=0;i<=3;i++)printf("x[%d]=%f\n",i,x[i]);
}
1.1.3 输出结果
1.1.4结果分析
从输出结果可以得到 =-6.999999,=3.000000,
=2.000000,=2.000000
从结果和过程可以知道这种方法一般能保证舍入误差不扩散,这个方法基本上是稳定的。LocalHOST
1.2 题目 雅可比法解方程组
方程组为:
1.2.1 雅可比迭代法算法
设方程组ax=b的系数矩阵的对角线元素(i=1,2,…,n),m为迭代次数容许的最大值 为容许误差。
1 取初始向量 令k=0.
2 对i=1,2
上一页 [1] [2] [3] [4] [5] [6] 下一页