高斯消去法c++代码
顺序高斯 列选主元
#include <cstdio> #include <iostream> #include <algorithm> #include <cmath> using namespace std; const int n = 3;//执行程序前手动改变方程数 void gauss(double a[n][n+1],double x[n]) {
int i,j,k; double temp,s,l; for(i=0;i<n-1;i++) {
k=i; for(j=i+1;j<n;j++) {
if(fabs(a[j][i])>fabs(a[k][i])) k=j; } if(k!=i) for(j=i;j<=n;j++) swap(a[i][j], a[k][j]); for(j=i+1;j<n;j++) {
l=1.0*a[j][i]/a[i][i]; for(k=0;k<n+1;k++) a[j][k]=a[j][k]-a[i][k]*l; } } x[n-1]=a[n-1][n]/a[n-1][n-1]; for(i=n-2;i>=0;i--) {
s=0.0; for(j=i;j<n;j++) {
if(j==i) continue; s+=a[i][j]*x[j]; } x[i]=(a[i][n]-s)/a[i][i]; } } int main() {
double temp[n][n+1]; double x[n]; cout<<"该程序初设定为三个方程三个未知量的求解,如需求解其他类型请打开源代码改变n的值"<<endl; for(int i = 0;i < n;i++) for(int j = 0;j <= n;j++) cin >> temp[i][j]; gauss(temp, x); for(int i = 0;i < n;i++) cout << "X" << i << "=:" << x[i] << endl; return 0; } 【2】实现列主元高斯消去法,运行后查看运行结果。 【源代码粘贴处】: #include <cstdio> #include <iostream> #include <algorithm> #include <cmath> using namespace std; const int n = 3;//执行程序前手动改变方程数 void ColPivot(double c[n][n+1],double x[]) {
int i,j,k; double p,maxs; double t[n]; for(i=0;i<=n-2;i++) {
maxs=0; k=i; for(j=i+1;j<n;j++) if(fabs(c[j][i])>maxs) {
k=j; maxs=fabs(c[j][i]); } if(k!=i) for(j=i;j<=n;j++) swap(c[i][j], c[k][j]); for(j=i+1;j<n;j++) {
p=c[j][i]/c[i][i]; for(k=i;k<=n;k++) c[j][k]-=p*c[i][k]; } } for(i=0;i<n;i++) t[i]=c[i][n]; for(i=n-1;i>=0;i--) {
for(j=n-1;j>i;j--) t[i]-=c[i][j]*x[j]; x[i]=t[i]/c[i][i]; } } int main() {
double temp[n][n+1]; double x[n]; cout<<"该程序初设定为三个方程三个未知量的求解,如需求解其他类型请打开源代码改变n的值"<<endl; for(int i = 0;i < n;i++) for(int j = 0;j <= n;j++) cin >> temp[i][j]; ColPivot(temp, x); for(int i = 0;i < n;i++) cout << "X" << i << "=:" << x[i] << endl; return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202873.html原文链接:https://javaforall.net
