线性方程组求解--顺序高斯消元法

顺序高斯消元法
顺序高斯消元法求解线性方程分为两个过程:消元过程和回代过程
消元过程:自上而下,把原线性方程组化成上三角形方程组的过程。
回代过程:自下而上,对这个上三角方程组进行求解的过程。
内容
消元过程
1。 9a+4b-3c+6d=5
2.7a-5b+4c-3d=3
3. 8a+4b-5c+2d=2
4.3a+8b-4c+d=1
例如这个线性方程组,我们将第一个方程组分别乘以相应的倍数给第二,三,四个方程组,使得第2,3,4个方程组a前面的系数变为0(其他未知数前面的系数也要乘以相应的倍数),如下所示:
1.9a+4b-3c+6d=5
2.73/9b+20/3c-23/3d=-8/9
3.4/9b-21/9c-30/9d=-22/9
4.60/9b-3c-d=-6/9
这样就完成了第一个循环,在之后不需要利用第一个方程组,而是通过刚刚得到的第二个方程组,使他分别乘以相应的倍数使得第三,四个方程组b前面的系数变为0,以此类推,最后得到的就是最后结果。数据太繁杂我就不写出来了。
形成的结果是这样的:
E F G H J
0 D A B C
0 0 K I L
0 0 0 M N
字母的数字可以是一样的,但左下角必须都是0.
这就是我们的消元过程。
回代过程
回代过程就是自下而上求解我们刚刚在消元过程中的这个上三角方程组。先从最后一行求解,当回代到某一行时,就变成求解一个未知数的线性方程了。
例如:
A B C D
3 4 5 6 7
0 4 3 2 1
0 0 3 1 4
0 0 0 2 2
我们先从最后一个求解,2D=2解得D=1;然后我们将D=1的值带入上一行得3C+1=4,求得C=1,以此类推,就可以求出全部的解来了
代码如下:

/*顺序高斯消元法*/
#include<iostream>
#include<math.h>
#define Maxsize 50
using namespace std;
void input(double b[Maxsize][Maxsize+1],long n)//输入增广矩阵
{
	long i,j;
	cout<<"请输入原方程的增广矩阵:"<<endl;
	for(i=1;i<=n;i++)
	 for(j=1;j<=n+1;j++)
	   cin>>b[i-1][j-1];
}
void output(double c[Maxsize],long n)//输出解
{
	cout<<"原方程的解为:"<<endl;
	for(long k=1;k<=n;k++)
	cout<<c[k-1]<<endl;
 } 
int main()
{
	double b[Maxsize][Maxsize+1],c[Maxsize];
	long i,j,k,n;
	cout<<"请输入方程组的阶数:";
	cin>>n;
	input(b,n);
	for(k=0;k<=n-2;k++)//消元过程 
	 for(i=k+1;i<n-1;i++)
	 {
	 	b[i][k]/=-b[k][k];
	 	for(j=k+1;j<=n;j++)
	 	b[i][j]+=b[i][k]*b[k][j];
	 }
	 for(k=n-1;k>=0;k--)//回代过程 
	 {
	 	double d=0;
	 	for(j=k+1;j<=n-1;j++)
	 	d+=b[k][j]*c[j];
	 	c[k]=(b[k][n]-d)/b[k][k];
	 }
	 output(c,n);
	   
	return 0;
 } 

示例截图如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值