#define N 4
#include
main()
{
int i,j,r,k;
float a[N][N],l[N][N],u[N][N],b[N],x[N],y[N];
float de=0;
printf("Please imput the%d*%d matrix A:\n",N-1,N-1);
for(i=1;i
for(j=1;j
scanf("%f",&a[i][j]);
printf("please imput the 1*%d matrix b:\n",N-1);
for(j=1;j
scanf("%f",&b[j]);
for(j=1;j
{
u[1][j]=a[1][j];
l[j][1]=a[j][1]/u[1][1];
}
for(r=2;r
{
for(j=r;j
{
for(k=1;k
{
de+=l[r][k]*u[k][j];
}
u[r][j]=a[r][j]-de;
de=0;
}
for(i=r+1;i
{
for(k=1;k
{
de+=l[i][k]*u[k][r];
}
l[i][r]=a[i][r]-de;
l[i][r]=l[i][r]/u[r][r];
de=0;
}
}
for(i=1;i
{
l[i][i]=1;
}
y[1]=b[1];
for(k=2;k
{
de=0;
for(j=1;j
de+=l[k][j]*y[j];
y[k]=b[k]-de;
}
x[N-1]=y[N-1]/u[N-1][N-1];
for(k=N-2;k>=1;k--)
{
de=0;
for(j=k+1;j<=N-1;j++)
de+=u[k][j]*x[j];
x[k]=(y[k]-de)/u[k][k];
}
printf("The matrix x is:\n");
for(j=1;j
printf("x(%d)=%f \n",j,x[j]);
}
直接三角分解法(直接赋值):
#define N 4
#include
main()
{
int i,j,r,k;
float
a[N][N]={0,0,0,0,0,3.3330,15920,-10.333,0,2.2220,16.710,9.6120,0,1.5611,5.1791,1.6852},
b[N]={0,15913,28.544,8.4254},l[N][N],u[N][N],x[N],y[N];
float de=0;
for(j=1;j
{
u[1][j]=a[1][j];
l[j][1]=a[j][1]/u[1][1];
}
for(r=2;r
{
for(j=r;j
{
for(k=1;k
{
de+=l[r][k]*u[k][j];
}
u[r][j]=a[r][j]-de;
de=0;
}
for(i=r+1;i
{
for(k=1;k
{
de+=l[i][k]*u[k][r];
}
l[i][r]=a[i][r]-de;
l[i][r]=l[i][r]/u[r][r];
de=0;
}
}
for(i=1;i
{
l[i][i]=1;
}
y[1]=b[1];
for(k=2;k
{
de=0;
for(j=1;j
de+=l[k][j]*y[j];
y[k]=b[k]-de;
}
x[N-1]=y[N-1]/u[N-1][N-1];
for(k=N-2;k>=1;k--)
{
de=0;
for(j=k+1;j<=N-1;j++)
de+=u[k][j]*x[j];
x[k]=(y[k]-de)/u[k][k];
}
printf("The matrix x is:\n");
for(j=1;j
printf("x(%d)=%f \n",j,x[j]);
}
改进平方根法(非直接赋值):
#include"math.h"
#include"stdio.h"
main()
{int
i,j,k;
int n=4;
float m,a[4][4],t[4][4],l[4][4],b[4],d[4],x[4],y[4];
printf("Please input matrix
a:\n");
for(i=0;i
for(j=0;j
{l[j][j]=1.0;
scanf("%f",&a[i][j]);
}
printf("\n");
printf("Please input matrix
b:\n");
for(i=0;i
scanf("%f",&b[i]);
printf("\n");
d[0]=a[0][0];
for(i=1;i
for(j=0;j
{m=0.0;
for(k=0;k
m+=t[i][k]*l[j][k];
t[i][j]=a[i][j]-m;
l[i][j]=t[i][j]/d[j];
m=0.0;
for(k=0;k
{m+=t[i][k]*l[i][k];
d[i]=a[i][i]-m;
}
l[j][i]=l[i][j];
}
y[0]=b[0];
for(i=1;i
{m=0.0;
for(k=0;k
{m+=l[i][k]*y[k];
y[i]=b[i]-m;
}
}
x[n-1]=y[n-1]/d[n-1];
for(i=n-1;i>=0;i--)
{m=0.0;
for(k=i+1;k
{m+=l[k][i]*x[k];
x[i]=y[i]/d[i]-m;
}
}
for(i=0;i
printf("x(%d)=%f
\n",i,x[i]);
}
改进平方根法(直接赋值):
#include"math.h"
#include"stdio.h"
main()
{int
i,j,k;
int n=4;
float
m,a[4][4]={6,2,1,-1,2,4,1,0,1,1,4,-1,-1,0,-1,3},b[4]={-1,2,1,3},t[4][4],l[4][4],d[4],x[4],y[4];
d[0]=a[0][0];
for(i=1;i
for(j=0;j
{m=0.0;
for(k=0;k
m+=t[i][k]*l[j][k];
t[i][j]=a[i][j]-m;
l[i][j]=t[i][j]/d[j];
m=0.0;
for(k=0;k
{m+=t[i][k]*l[i][k];
d[i]=a[i][i]-m;
}
l[j][i]=l[i][j];
}
y[0]=b[0];
for(i=1;i
{m=0.0;
for(k=0;k
{m+=l[i][k]*y[k];
y[i]=b[i]-m;
}
}
x[n-1]=y[n-1]/d[n-1];
for(i=n-1;i>=0;i--)
{m=0.0;
for(k=i+1;k
{m+=l[k][i]*x[k];
x[i]=y[i]/d[i]-m;
}
}
for(i=0;i
printf("x(%d)=%f
\n",i,x[i]);
}
追赶法(非直接赋值):
#include"stdio.h"
#include"math.h"
void main()
{
int i,n;
float
a[100],b[100],c[100],d[100];
float
u[100],l[100],y[100],x[100];
printf("Please input the
square distance set of piece n:\r\n");
scanf("%d",&n);
printf("Please input a2--an:\n");
for(i=2;i<=n;i++)
{
printf("a%d=",i);
scanf("%f",&a[i]);
}
printf("Please input b1--bn:\n");
for(i=1;i<=n;i++)
{
printf("b%d=",i);
scanf("%f",&b[i]);
}
printf("Please input c1--c(n-1):\n");
for(i=1;i
{
printf("c%d=",i);
scanf("%f",&c[i]);
}
printf("Please input d1--dn:\n");
for(i=1;i<=n;i++)
{
printf("d%d=",i);
scanf("%f",&d[i]);
}
u[1]=b[1];
y[1]=d[1];
for(i=2;i<=n;i++)
{
l[i]=a[i]/u[i-1];
u[i]=b[i]-l[i]*c[i-1];
y[i]=d[i]-l[i]*y[i-1];
}
x[n]=y[n]/u[n];
for(i=n-1;i>0;i--)
x[i]=(y[i]-c[i]*x[i+1])/u[i];
printf("The result:\n\n");
for(i=n;i>=1;i--)
printf(" x%d=%f\n",i,x[i]);
}
追赶法(直接赋值):
#include"stdio.h"
#include"math.h"
void main()
{
int i,n=3;
float
a[4]={0,0,2,2},b[4]={0,3,4,5},c[4]={0,2,1,0},d[4]={0,-1,-7,9};
float
u[10],l[10],y[10],x[10];
u[1]=b[1];
y[1]=d[1];
for(i=2;i<=n;i++)
{
l[i]=a[i]/u[i-1];
u[i]=b[i]-l[i]*c[i-1];
y[i]=d[i]-l[i]*y[i-1];
}
x[n]=y[n]/u[n];
for(i=n-1;i>0;i--)
x[i]=(y[i]-c[i]*x[i+1])/u[i];
printf("The result:\n\n");
for(i=n;i>=1;i--)
printf(" x%d=%f\n",i,x[i]);
}