一,要解决的问题
选用合适的算法,求解三种线性方程组:一般线性方程组,对称正定方程组,三对角线性方程组。
方程略。
二,数值方法
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&