【算法】高斯消元
【题解】
建矩阵;
for i
找到同列绝对值最大数字;
交换;
for k(行) j(列)(倒序) 除法;
for i(倒序)
for j 减去已知元素
除到右边;
#include#include #include #include using namespace std;const double eps=1e-6;const int maxn=15;double a[maxn][maxn],f[maxn];int n;void gauss(){ int r; for(int i=1;i<=n;i++) { r=i; for(int j=i+1;j<=n;j++) if(fabs(a[j][i])>fabs(a[r][i]))r=j; if(r!=i)for(int j=1;j<=n+1;j++)swap(a[r][j],a[i][j]); for(int k=i+1;k<=n;k++) for(int j=n+1;j>=i;j--) a[k][j]-=a[k][i]/a[i][i]*a[i][j]; } for(int i=n;i>=1;i--) { for(int j=i+1;j<=n;j++) a[i][n+1]-=a[j][n+1]*a[i][j]; a[i][n+1]/=a[i][i]; } }int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%lf",&f[i]); double t; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%lf",&t); a[i][j]=2*(t-f[j]); a[i][n+1]+=t*t-f[j]*f[j]; } } gauss(); for(int i=1;i