脉络最清晰的C++高斯消元程序
生活随笔
收集整理的這篇文章主要介紹了
脉络最清晰的C++高斯消元程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#include<iostream>
#include<math.h>
using namespace std;
const int N=3;
void print(double a[][N],int n);//輸出程序
int max_absAKK(double b[][N],int n,int kk);//尋找列中的最大元素所在的行 函數
void ExchangCol(double c[][N],int p, int q,int n);//換行 函數
int main()
{double A[N][N]={{0.001,2.000,3.000},{-1.0,3.712,4.623},{-2.0,1.072,5.643}};double m[N][N];for(int k=0;k<N-1;k++){int t=max_absAKK(A,N,k);//找到每一列絕對值最大的行if (t!=k) ExchangCol(A,t,k,N);//如果對角線的元素不是最大,進行換行for(int i=k+1;i<N;i++){m[i][k]=A[i][k]/A[k][k];for(int j=k+1;j<N;j++){A[i][j]=A[i][j]-m[i][k]*A[k][j];}}
}print (A,N);}void ExchangCol(double c[][N],int p, int q,int n)
{for(int i=0;i<n;i++)swap(c[p][i],c[q][i]);
}
int max_absAKK(double b[][N],int n,int kk)
{double max=0.0;int maxCol=0;for(int i=0;i<n-kk;i++)
{
if(fabs(max)<fabs(b[kk+i][kk]))
{max=b[kk+i][kk];maxCol=kk+i; }}
return maxCol;
}void print(double a[][N],int n)
{for (int i=0;i<n;i++){for(int j=0;j<n;j++){if(fabs(a[i][j])<1.0e-5)a[i][j]=0.0;cout<<a[i][j]<<'\t';}
cout<<endl;
}
}
總結
以上是生活随笔為你收集整理的脉络最清晰的C++高斯消元程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++友元函数访问私有成员
- 下一篇: C++ for循环跳过某一项求和