C语言怎么给追赶法编程序

1.用追赶法求解此三对角方程组... 1. 用追赶法求解此三对角方程组 展开
 我来答
tattackor
2015-09-16 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:885万
展开全部

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=0;i<n;i++)
 {
  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=1;i<n;i++)
 {
  l[i-1]=a[i-1]/u[i-1];
  u[i]=b[i]-l[i-1]*c[i-1];
 }
/* for(i=0;i<n-1;i++)
  printf("%f\n",l[i]);
 for(i=0;i<n;i++)
  printf("%f\n",u[i]);*/
 y[0]=d[0];
// printf("y1=%f\n",y[0]);
 for(i=1;i<n;i++)
 {
  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-2;i>=0;i--)
  x[i]=(y[i]-c[i]*x[i+1])/u[i];
 for(i=0;i<n;i++)
  printf("x%d=%f\n",i+1,x[i]);
}

倔强嘚玫瑰
推荐于2017-09-14 · TA获得超过4001个赞
知道大有可为答主
回答量:3741
采纳率:85%
帮助的人:907万
展开全部

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=0;i<n;i++)
 {
  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=1;i<n;i++)
 {
  l[i-1]=a[i-1]/u[i-1];
  u[i]=b[i]-l[i-1]*c[i-1];
 }
/* for(i=0;i<n-1;i++)
  printf("%f\n",l[i]);
 for(i=0;i<n;i++)
  printf("%f\n",u[i]);*/
 y[0]=d[0];
// printf("y1=%f\n",y[0]);
 for(i=1;i<n;i++)
 {
  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-2;i>=0;i--)
  x[i]=(y[i]-c[i]*x[i+1])/u[i];
 for(i=0;i<n;i++)
  printf("x%d=%f\n",i+1,x[i]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-09-13
展开全部
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
const int n=4;                                        //n为方程组系数矩阵的阶数
float b[n+1];                                         //b[]为三对角系数矩阵的对角元素,b[0]不用
float c[n];                                           //c[]为三对角系数矩阵的上对角元素,c[0]不用
float a[n];                                           //a[]为三对角系数矩阵的下对角元素,a[0]不用
float f[n+1];                                         //f[]为方程组的常向量项  
float L[n+1];                                         //克劳特分解A=LU,其中,L为下二对角矩阵.L[]存放其对角元素,L[0]不用
float U[n];                                           //U为单位上二对角矩阵.U[]存放其上对角元素,U[0]不用
int main()
{
 int i,j;//输入c[]
 cout<<"请输入三对角方程组系数矩阵的上对角元素: "<<endl;
 for(i=1;i<n;i++)
  cin>>c[i];//输入b[]
 cout<<"请输入三对角方程组系数矩阵的中对角元素: "<<endl;
 for(i=1;i<=n;i++)
  cin>>b[i];//输入a[]
 cout<<"请输入三对角方程组系数矩阵的下对角元素: "<<endl;
 for(i=2;i<=n;i++)
  cin>>a[i];//输入常向量项
 cout<<"请输入方程组常向量: "<<endl;
 for(i=1;i<=n;i++)
  cin>>f[i];//计算L和U的各元素
 L[1]=b[1];
 for(i=1;i<n;i++)
 {
  U[i]=c[i]/L[i];
  L[i+1]=b[i+1]-a[i+1]*U[i];
 }//求解Ly=f,追赶法中的"追"
 float y[n+1];
 y[1]=f[1]/L[1];
 for(i=2;i<=n;i++)
 {
  y[i]=(f[i]-a[i]*y[i-1])/L[i];
 }//求解Ux=y,追赶法中的"赶",将解向量存放在f[]中
 f[n]=y[n];
 for(i=n-1;i>=1;i--)
 {
  f[i]=y[i]-U[i]*f[i+1];
 }//输出解
 cout<<"三对角方程组的解是:"<<endl;
 for(i=1;i<=n;i++)
  cout<<setiosflags(ios::fixed)<<setprecision(2)<<"x"<<i<<"="<<f[i]<<'\n';
 cout<<endl;
 return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式