#include <stdio.h>
#include <stdlib.h>
#include<stdbool.h>
#define MAX 10
double A[MAX][MAX];
double b[MAX];
double X[MAX];
double Y[MAX];
double U[MAX][MAX];
double L[MAX][MAX];
int NUM;
void Input_Matrix()//输入矩阵
{
int i,j;
printf("系数矩阵A的阶数:\n");
scanf("%d",&NUM);
for(i=1; i<=NUM; i++)
{
printf("系数矩阵A的第%d行元素:\n",i);
for(j=1; j<=NUM; j++)
scanf("%lf",&A[i-1][j-1]);
}
printf("右端项b:\n");
for(i=1; i<=NUM; i++)
{
scanf("%lf",&b[i-1]);
}
printf("\n");
printf("输入的系数矩阵A:\n");
for(i=0; i<NUM; i++)
{
for(j=0; j<NUM; j++)
printf("%.4lf\t",A[i][j]);
printf("\n");
}
printf("\n");
printf("输入的右端项b:\n");
for(i=0; i<NUM; i++)
printf("%.4lf\n",b[i]);
}
void Direct()
{
bool flag = true;
int i,r;
L[0][0]=A[0][0];
for(i=0; i<NUM; i++)
U[i][i]=1.0;
U[0][1]=A[0][1]/L[0][0];
for(i=1; i<NUM; i++)
{
L[i][i]=A[i][i]-A[i][i-1]*U[i-1][i];
U[i][i+1]=A[i][i+1]/L[i][i];
L[i][i-1]=A[i][i-1];
}
Y[0]=b[0]/L[0][0];
for(i=1; i<NUM; i++)
Y[i]=(b[i]-A[i][i-1]*Y[i-1])/L[i][i];
X[NUM-1]=Y[NUM-1];
for(i=NUM-2; i>=0; i--)
X[i]=Y[i]-U[i][i+1]*X[i+1];
}
void Output_Matrix()
{
int i,r;
printf("\n");
printf("Result:\n");
printf("\n");
printf("X=\n");
for (i=0; i<NUM; i++)
printf("%.4lf\n",X[i]);
printf("\n");
printf("Y=\n");
for(i=0; i<NUM; i++)
printf("%.4lf\n",Y[i]);
printf("\n");
printf("L:\n");
for(i=0; i<NUM; i++)
{
for(r=0; r<NUM; r++)
printf("%.4lf\t",L[i][r]);
printf("\n");
}
printf("\n");
printf("U:\n");
for(i=0; i<NUM; i++)
{
for(r=0; r<NUM; r++)
printf("%.4lf\t",U[i][r]);
printf("\n");
}
}
int main()
{
Input_Matrix();
Direct();
Output_Matrix();
return 0;
}
C语言实现追赶法(计算方法)
最新推荐文章于 2021-12-27 11:25:41 发布