高斯消元出现误差
查看原帖
高斯消元出现误差
439834
hzx895楼主2023/9/1 22:22

求助大佬,为什么使用以下代码时,部分数据会与标准数据存在0.01的误差?

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <algorithm>

using namespace std;
int n,maxtop;
float a[105][105],ans[105];

int main(){
	//scanf("%d",&n);
	cin>>n;
	//for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) scanf("%f",&a[i][j]);//读入
	for(int i=1;i<=n;i++) for(int j=1;j<=n+1;j++) cin>>a[i][j];
	for(int s=1;s<=n-1;s++){
		for(int i=s;i<=n-1;i++)
            if(a[i][1]>a[i+1][1]) maxtop=i;
            else maxtop=i+1;//寻主
		for(int j=s;j<=n+1;j++)
            swap(a[s][j],a[maxtop][j]);//选主
		for(int j=n+1;j>=s;j--)
            a[s][j]=a[s][j]/a[s][s];//同除
		for(int i=s+1;i<=n;i++)
            for(int j=n+1;j>=s;j--)
                a[i][j]=a[i][j]-a[i][s]*a[s][j];//消元
        if(a[s+1][s+1]==0){
            //printf("No Solution");//判解
            cout<<"No Solution";
            return 0;
        }
	}
    ans[1]=a[n][n+1]/a[n][n];
    int t=2;
    int k=1;
    for(int s=n-1;s>=1;s--){
        ans[t]=a[s][n+1];
        for(int j=n;j>=s+1;j--){
            ans[t]=ans[t]-ans[k]*a[s][n-k+1];//回代求解
            k++;
        }
        t++;
        k=1;
    }
    for(int i=n;i>=1;i--) //printf("%.2f\n",ans[i]);
        cout<<setprecision(2)<<fixed<<ans[i]<<endl;

/*	for(int i=1;i<=n;i++){
		for(int j=1;j<=n+1;j++) printf("%.2f\n",a[i][j]);//调试输出
		printf("\n");
	}*/
	return 0;
}

2023/9/1 22:22
加载中...