(1)程序代碼:
#include "stdio.h"
#include "math.h"http://頭文件
#define N 20//自定義N=20
int main()//主函數(shù)
{
?????? inti,j,k;
?????? intsize;
?????? floata[N][N],l[N][N],u[N][N];
?????? floatb[N],x[N],y[N];//定義變量
?????? printf("\t\t\tCrout分解法解方程組\n");
?????? printf("請輸入方陣A的n:");
?????? scanf("%d",&size);
?????? printf("\n");
?????? printf("請輸入方程組的系數(shù):\n");
?????? for(i=0;i
?????? {
????????????? for(j=0;j
????????????? {
???????????????????? scanf("%f",&a[i][j]);//輸入方程組系數(shù)矩陣a[][]
????????????? }
?????? }
?????? printf("\n請輸入方程組的y:\n");
?????? for(i=0;i
????????????? scanf("%f",&b[i]);//輸入結(jié)果矩陣b[]
?????? printf("\n方陣A[][]為:\n");
?????? for(i=0;i
?????? {
????????????? for(j=0;j
????????????? {
???????????????????? printf("%f? ",a[i][j]);//輸出a[][]
????????????? }
????????????? printf("\n");
?????? }
?????? printf("\n方程組y為:\n");
?????? for(i=0;i
????????????? printf("%f? ",b[i]);//輸出b[]
?????? printf("\n");
?????? for(i=0;i
?????? {
????????????? u[i][i]=1;//定初始值 令u[i][i]=1
?????? }
?????? for(i=0;i
????????????? for(j=i+1;j
????????????? {
???????????????????? l[i][j]=0;//定初始值 令l[i][j]=0
????????????? }
?????? for(j=0;j
????????????? for(i=j+1;i
????????????? {
???????????????????? u[i][j]=0;//定初始值 令u[i][j]=0
????????????? }
?????? l[0][0]=a[0][0];
?????? for(i=1;i
?????? {
????????????? l[i][0]=a[i][0];//計算第一行的l[][]
????????????? u[0][i]=a[0][i]/l[0][0];//計算第一列的u[][]
?????? }
?????? for(i=1;i
?????? {
????????????? for(j=1;j<=i;j++)//計算第2行到第size-1行的l[][]
????????????? {
???????????????????? l[i][j]=a[i][j];
???????????????????? for(k=0;k
???????????????????? {
??????????????????????????? l[i][j]=l[i][j]-l[i][k]*u[k][j];
???????????????????? }
????????????? }
?????? ??? printf("\n");
????????????? for(j=i+1;j
????????????? {
???????????????????? u[i][j]=a[i][j];
?????? ????????????? for(k=0;k<=i-1;k++)
???????????????????? {
??????????????????????????? u[i][j]=u[i][j]-l[i][k]*u[k][j];
???????????????????? }
??????????????????????????? u[i][j]=u[i][j]/l[i][i];
????????????? }
????????????? printf("\n");
?????? }
?????? for(j=1;j
?????? {
????????????? l[size-1][j]=a[size-1][j];
????????????? for(k=0;k<=j-1;k++)
????????????? {
???????????????????? l[size-1][j]=l[size-1][j]-l[size-1][k]*u[k][j];
????????????? }
?????? }
?????? printf("\n");
?printf("輸出矩陣L[i][j]\n");
???for(i=0;i
?????????for(j=0;j
??? {
???????printf("%f",l[i][j]);??printf("?? ");//輸出下三角矩陣l[][]
???? }
????printf("\n");
?????? }
???printf("輸出矩陣U[i][j]\n");
?????? for(i=0;i
?????????for(j=0;j
??? {
???????printf("%f",u[i][j]);??printf("?? ");//輸出單位上三角矩陣u[][]
???? }
?????? printf("\n");
?????? }
?????? y[0]=b[0]/l[0][0];//給y[0]初始值
?????? for(i=1;i
?????? {
????????????? y[i]=b[i];
????????????? for(k=0;k<=i-1;k++)
????????????? {
???????????????????? y[i]=y[i]-l[i][k]*y[k];//計算公式
????????????? }
???????y[i]=y[i]/l[i][i];
?????? }
?????? printf("\n");
?????? printf("y值:\n");
?????? for(i=0;i
????????????? printf("y[%d]=%f? ",i+1,y[i]);//輸出y[i]的結(jié)果
?????? printf("\n\n");
?????? printf("x的值:\n");
?????? x[size-1]=y[size-1];//給x[size-1]賦值
?????? for(i=size-2;i>=0;i--)
?????? {
????????????? x[i]=y[i];
????????????? for(k=i+1;k
????????????? {
???????????????????? x[i]=x[i]-u[i][k]*x[k];//計算x[]
????????????? }
?????? }
?????? for(i=0;i
?????? {
????????????? printf("x[%d]=%f\n",i+1,x[i]);//輸出x[i]的結(jié)果
?????? }
}