什么是追赶法,其通用程序是什么

什么是追赶法,其通用程序是什么,第1张

function x=zhuiganfa

%首先说明:追赶法是适用于三对角矩阵的线性方程组求解的方法,并不适用于其他类型矩阵。

%定义三对角矩阵A的各组成单元。方程为Ax=d

% b为A的对角线元素(1~n),a为-1对角线元素(2~n),c为+1对角线元素(1~n-1)。

% A=[2 -1 0 0

% -1 3 -2 0

% 0 -2 4 -3

% 0 0 -3 5]

a=[0 -1 -2 -3]c=[-1 -2 -3]b=[2 3 4 5]d=[6 1 -2 1]

n=length(b)

u0=0y0=0a(1)=0

%“追”的过程

L(1)=b(1)-a(1)*u0

y(1)=(d(1)-y0*a(1))/L(1)

u(1)=c(1)/L(1)

for i=2:(n-1)

L(i)=b(i)-a(i)*u(i-1)

y(i)=(d(i)-y(i-1)*a(i))/L(i)

u(i)=c(i)/L(i)

end

L(n)=b(n)-a(n)*u(n-1)

y(n)=(d(n)-y(n-1)*a(n))/L(n)

%“赶”的过程

x(n)=y(n)

for i=(n-1):-1:1

x(i)=y(i)-u(i)*x(i+1)

1、追赶法是针对系数矩阵为三对角阵的方程组,因此是一种特殊的方程组.此方法效率较高,不过不适用于一般的线性方程组。Gauss消去法是针对一般的线性方程组,与线性代数中的初等变换解线性方程组方法类似。

2、例程:

#include<stdio.h>

#define n 4

void main()

{

 int i

 float a[n],b[n],c[n],d[n],u[n],l[n-1]

 float x[n],y[n]

 printf("请输入系数矩阵(按a[i],b[i],c[i],d[i]输入):\n")

 for(i=0i<ni++)

 {

  scanf("%f",&a[i])  //a[n]和c[n]要少一项,使a[n-1]=c[n-1]=0,便于输入.

  scanf("%f",&b[i])

  scanf("%f",&c[i]) 

  scanf("%f",&d[i])

 }

 u[0]=b[0]

 for(i=1i<ni++)

 {

  l[i-1]=a[i-1]/u[i-1]

  u[i]=b[i]-l[i-1]*c[i-1]

 }

/* for(i=0i<n-1i++)

  printf("%f\n",l[i])

 for(i=0i<ni++)

  printf("%f\n",u[i])*/

 y[0]=d[0]

// printf("y1=%f\n",y[0])

 for(i=1i<ni++)

 {

  y[i]=d[i]-l[i-1]*y[i-1]

//  printf("y%d=%f\n",i+1,y[i])

 }

x[n-1]=y[n-1]/u[n-1]

 for(i=n-2i>=0i--)

  x[i]=(y[i]-c[i]*x[i+1])/u[i]

 for(i=0i<ni++)

  printf("x%d=%f\n",i+1,x[i])

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11119055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存