/* 很久以前学计算方法时写的,给你参考参考*/
#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])
}
// 程序7.5 追赶法扮者求解三对角方程组#include <stdio.h>
#include <conio.h>
#include <math.h>
#define MAX_n 100
#define PRECISION 0.0000001
//解输出
void SulutionOutput(float x[],int n)
{
int i
for(i=1i<=n++i)
printf("\nx[%d]=%f",i,x[i])
}
//三对角方程组元素输入
void TriDiagonalMatrixInput(float a[],float b[],float c[],float f[],int n)
{
int i
printf("Input b[1],c[1],f[1]:")
scanf("%f %f %f",&b[1],&c[1],&f[1])
for(i=2i<n++i)
{
printf("Input a[%d],b[%d],c[%d],f[%d]:",i,i,i,i)
scanf("%f %f %f %f",&a[i],&b[i],&c[i],&f[i])
}
printf("Input a[%d],b[%d],f[%d]:",n,n,n)
scanf("%f %f %f",&a[n],&b[n],&f[n])
}
//三对角方程组求解 — 追赶厅坦薯法
int Z_G_method(float a[],float b[],float c[],float f[],int n)
{
int i
//
c[1]/=b[1]
for(i=2i<n++i)
c[i]/=(b[i]-a[i]*c[i-1])
//信掘
f[1]/=b[1]
for(i=2i<=n++i)
f[i]=(f[i]-a[i]*f[i-1])/(b[i]-a[i]*c[i-1])
//
for(i=n-1i>0--i)
f[i]-=c[i]*f[i+1]
}
void main()
{
int n
float a[MAX_n],b[MAX_n],c[MAX_n],f[MAX_n]
printf("\nInput n=")
scanf("%d",&n)
TriDiagonalMatrixInput(a,b,c,f,n)
Z_G_method(a,b,c,f,n)
SulutionOutput(f,n)
}
/*
运行实例:
Input n=4
Input b[1],c[1],f[1]:2 1 1
Input a[2],b[2],c[2],f[2]:1 3 1 2
Input a[3],b[3],c[3],f[3]:1 4 1 3
Input a[4],b[4],f[4]:1 5 4
x[1]=0.294118
x[2]=0.411765
x[3]=0.470588
x[4]=0.705882
*/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)