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])
}
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)
#include "喊慎喊stdio.h"#include "process.h"
#define N 4
double a[N-1]={-1,-1,-1}
double d[N]={2,2,2,2}
double c[N]={-1,-1,-1,-1}
double p[N]
double q[N-1]
double b[N]={5,-12,11,-1}
void p_q()
{
int k
if(d[0]==0){printf("Method failed\n")exit(0)}
p[0]=d[0]
q[0]=c[0]/p[0]
for(k=1k<N-1k++)
{
p[k]=d[k]-a[k]*q[k-1]
if(p[k]==0){printf("Method failed\n")exit(0)}
q[k]=c[k]/p[k]
}
p[N-1]=d[N-1]-a[N-1]*q[N-2]
if(p[N-1]==0){printf("Method failed\孝拍n")exit(0)}
}
void jisuan()
{
int k
double x[N]
double y[N]
y[0]=b[0]/p[0]
for(k=1k<=N-1k++)
y[k]=(b[k]-a[k]*y[k-1])/p[k]
x[N-1]=y[N-1]
for(k=N-2k>=0k--)
x[k]=y[k]-q[k]*x[k+1]
for(k=0k<Nk++)
printf("x[%d]=%4.0lf\郑野n",k+1,x[k])
}
void main()
{
p_q()
jisuan()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)