平方根法和追赶法matlab,数值分析C程序:LU直接三角分解,改进平方根法,追赶法...

#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]);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值