Guass列主元、平方根法、追赶法求解方程组的C++实现

该博客详细介绍了使用C++实现Guass列主元消去法、平方根法和追赶法来求解不同类型的线性方程组,包括一般线性、对称正定和三对角线性方程组。文章通过算法伪代码阐述了每种方法的核心思想,并讨论了浮点计算过程中产生的误差对结果的影响。
摘要由CSDN通过智能技术生成

一,要解决的问题

选用合适的算法,求解三种线性方程组:一般线性方程组,对称正定方程组,三对角线性方程组。
方程略。


二,数值方法

1,使用Guass列主元消去法求解一般线性方程组。

Guass列主元是为了防止Guass消去法中大数吃掉小数而引出的一种线性方程组求解方法,消元时选用一列中绝对值最大的元素作为列主元素。
算法伪代码:

消元过程

这里写图片描述

回代过程

这里写图片描述

2,使用平方根法求解对称正定方程组

平方根法,它把系数矩阵(对称正定矩阵)表示成一个下三角矩阵L和其转置的乘积的分解。这种分解又称为Cholesky分解。
这里写图片描述

3,使用追赶法求解三对角线性方程组

三对角线性方程组是指这一类的线性方程组:系数矩阵是一个对角占优的三对角矩阵。追赶法是专门用来求解三对角线性方程组的,它将系数矩阵分解成alpha矩阵和beta矩阵的乘积,如下图所示:
这里写图片描述


三,算法

1,Guass列主元消去法
/*
CreateOn:2016/03/20
Author:linxiaobai
Function:linear equation solution
solution1:列主元Guass消去法求解一般线性方程组
*/
#include "stdafx.h"
# include<iostream>
# include<algorithm>
# include<fstream>
# include<iomanip>
# include<cmath>
using namespace std;
double a[15][15];
const int N=10;
double res[N+1];
void printArry(double a[][15])//打印增广矩阵
{
    for(int i=1;i<=10;i++)
    {
        for(int j=1;j<=11;j++)
        {
            cout<<setw(3)<<a[i][j]<<" ";
        }
        cout<<endl;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<"【运用列主元Guass求解一般线性方程组】"<<endl;
    //读入增广矩阵
    ifstream in;
    in.open("data.txt");
    if(!in)
    {
        cerr<<"file open failed!"<<endl;
        return 0;
    }
    double x;
    int i=1,j=1;
    while(!in.eof())
    {
        in>>a[i][j];
        j++;
        if(j>11)
        {
            i++;j=1;
        }
    }
    cout<<"增广矩阵:"<<endl<<"++++++++++++++++++++++++++"<<endl;
    printArry(a);
    cout<<"++++++++++++++++++++++++++";
    for(int k&
  • 3
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值