该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#define N 6
#define k 1e-10/* run this program using the console pauser or add your own getch, system("pause") or input loop */int main(int argc, char *argv[])
{
double A[N][N];
double x[N]={0};
double b[N]={0};
int i,j,times=0;
double fanshu=1;
double sum[N]={0};
//创建希尔伯特矩阵
for(i=0;i
{
for(j=0;j
{
A[i][j]=1.0/(i+j+1);
}
}
//输出希尔伯特矩阵
for(i=0;i
{
for(j=0;j
{
printf("%lf ",A[i][j]);
}
printf("\n");
}
//创建b
for(i=0;i
{
for(j=i+1;j<=N+i;j++)
{
b[i]=b[i]+1.0/j;
} }
//输出b
for(i=0;i
{
printf("%lf ",b[i]);
}
printf("\n");
//雅可比迭代
while(fanshu>=k)
{
times++;
//求和
for(i=0;i
{
for(j=0;j
{
if(j!=i)
{
sum[i]=sum[i]+A[i][j]*x[j];
}
}
}
//求迭代出来的x
for(i=0;i
{
x[i]=(b[i]-sum[i])/A[i][i];
}
printf("第%d次迭代结果:\n",times);
//输出x
for(i=0;i
{
printf("%lf ",x[i]);
}
printf("\n");
//求范数的平方
fanshu=0;
for(i=0;i
{
fanshu=fanshu+(x[i]-1)*(x[i]-1);//计算范数
}
}
return 0;
}