直接上 代码
。
//电信1902班 胡彬
//2021.10.12
#include "stdio.h"
#include "math.h"
#define pi 3.1415
#define p 8 //正方形分割的一边点数
int main(void)
{
int k = 0;//迭代次数
double a = 2 / (sin(pi / (p - 1)) + 1), F1[p][p] = { 0 },F2_ = 0,error_1 = 0,error_2 = 0;//收敛因子
for (int i = 0;i <= p-1;i++)//初始化赋值
F1[p-1][i] = 100;
while (1)//死循环直到达到精度要求
{
for (int i = 1; i <= p-2; i++)
{
for (int j = 1; j <= p-2; j++)
{
F2_ = F1[i][j] + a * (((F1[i - 1][j] + F1[i][j - 1] + F1[i + 1][j] + F1[i][j + 1]) / 4) - F1[i][j]);
error_1 = fabs(F2_ - F1[i][j]);
F1[i][j] = F2_;
if (error_1 > error_2)
error_2 = error_1;
}
}
k++;
if (error_2 < 0.001)
break;
else
error_2 = 0;
}
for (int i = p-1; i >= 0; i--)//打印
{
for (int j = 0; j <= p-1; j++)
printf("%-10lf ", F1[i][j]);
printf("\n");
}
printf("%d\n",k);
printf("%lf\n%lf\n",a,error_2);
return 0;
}