追赶法求解方程组

// 程序7.5 追赶法求解三对角方程组

#include

#include

#include

#define MAX_n 100

#define PRECISION 0.0000001

//解输出

void SulutionOutput(float x[],int n)

{

int i;

for(i=1;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=2;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=2;i

c[i]/=(b[i]-a[i]*c[i-1]);

//

f[1]/=b[1];

for(i=2;i

f[i]=(f[i]-a[i]*f[i-1])/(b[i]-a[i]*c[i-1]);

//

for(i=n-1;i>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

*/

// 程序7.5 追赶法求解三对角方程组

#include

#include

#include

#define MAX_n 100

#define PRECISION 0.0000001

//解输出

void SulutionOutput(float x[],int n)

{

int i;

for(i=1;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=2;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=2;i

c[i]/=(b[i]-a[i]*c[i-1]);

//

f[1]/=b[1];

for(i=2;i

f[i]=(f[i]-a[i]*f[i-1])/(b[i]-a[i]*c[i-1]);

//

for(i=n-1;i>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

*/


相关内容

  • 迭代法实验
  • 实验五 线性方程组的迭代法实验 一. 实验目的 (1)深入理解线性方程组的迭代法的设计思想,学会利用系数矩阵的性质以保证迭 代过程的收敛性,以及解决某些实际的线性方程组求解问题. (2)熟悉Matlab编程环境,利用Matlab解决具体的方程求根问题. 二. 实验要求 建立Jacobi迭代公式.Ga ...

  • 相遇和追及问题
  • 相遇追及专题 一.相遇追及问题的处理方法 1.两个关系:两物体运动的时间与位移关系是解题的关键!位移关系一般如下: ①相遇问题:S0S1S2 (S0是初态时两物体的间距) ②追及问题:S后车S0S前车 2.一个条件:速度相等是判断追及问题中能否追上.距离最大.最小的临界条件 3.追及问题的分 ...

  • 数值计算基础
  • 数值计算基础 实验指导书 2010年 目录 实验一 直接法解线性方程组的 ................................ 1 实验二 插值方法 ........................................... 10 实验三 数值积分 ............. ...

  • 第二章 解线性代数方程组的直接法
  • 第二章 解线性方程组的直接法 本章研究的对象是n 阶线性方程组 ⎧a 11x 1+a 12x 2+... +a 1n x n =b 1⎪a x +a x +... +a x =b ⎪2112222n n 2⎨⎪ ⎪⎩a n 1x 1+a n 2x 2+... +a nn x n =b n 其矩阵形式 ...

  • 预处理共轭梯度法求解线性方程组
  • [摘 要]针对共轭梯度法求解线性方程组,提出一种预处理思想.基于次思想,首先给出预处理矩阵,然后求解预处理线性方程组,再使用共轭梯度法求解.最后通过几个数值试验,与直接使用共轭梯度法求解线性方程组相比较,本文的方法提高了收敛速度. [关键词]线性方程组,预处理,共轭梯度法 中图分类号:E911 文献 ...

  • 相遇及追及问题
  • △s=s0+s车-s人=25+18-36=7m 练习:A.B两质点从同一位置沿同一方向同时开始运动,其v-t图线如图所示,则A.B相距最远的距离是______m,______s末B追上A,B追上A时的速度大小是_____m/s. 解:9m:6s:12m/s 例2.甲车在前以15m/s的速度匀速行驶, ...

  • 科学和工程计算复习题及答案
  • 科学和工程计算基础复习题 一. 填空题: 1. :2. 计算机计费的主要依据有两项:一是使用 要由 算数运算的次数决定; 二是占据存储器的空间, 3. 用计算机进行数值计算时, 4. 5. 6. 7. 8. 9. 10. 11. 敛的充分必要条件是选代矩阵B 的 谱半径ρ(B ) (n +1) (x ...

  • 三对角方程组的追赶法
  • 2013-2014(1)专业课程实践论文 题目:三对角方程组的追赶法 一.算法理论 在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优的三对角线方程组 ⎛b 1c 1⎫⎛x 1⎫⎛ ⎪⎪ a b c x 2 22⎪2⎪ ⎪ ...

  • 高一物理运动追及与相遇问题
  • 孙恒芳教你学物理----- 追及与相遇问题专题 [考点自清] 晶品质心_新浪博客 一.相遇 指两物体分别从相距x 的两地运动到同一位置,它的特点是:两物体运动的位移的矢量和等于x ,分析时要注意: ⑴.两物体是否同时开始运动,两物体运动至相遇时运动时间可建立某种关系: ⑵.两物体各做什么形式的运动: ...