ASPX.net寫一個去除手機號碼和QQ號等聯絡方式程式碼
阿新 • • 發佈:2022-04-11
高斯消元是解決線性方程組的方法。
線性方程組,就是n元一次方程組,
\(\left\{\begin{matrix}
a_{11}*x_{1}+a_{12}*x_{2}+……+a_{1n}*x_{n}=b_{1}
& & & & \\
a_{21}*x_{1}+a_{22}*x_{2}+……+a_{2n}*x_{n}=b_{2}
& & & & \\
……
& & & & \\
a_{n1}*x_{1}+a_{n2}*x_{2}+……+a_{nn}*x_{n}=b_{n}
& & & &
\end{matrix}\right.\)
要如何去解,我們可以從二元一次方程組入手。
\(\left\{\begin{matrix} a_{11}*x_{1}+a_{12}*x_{2}=b_{1} \\ a_{21}*x_{1}+a_{22}*x_{2}=b_{2} \end{matrix}\right.\)
解這個方程只需要將下面這個式子減去上面這個式子乘上\((-a_{22}/a_{12})\),求出\(x_{1}\),在將\(x_{1}\)代入上面這個式子求出\(x_{2}\)就可以了
通過二元一次方程組的消元操作,可以發現需要解出n元一次方程組的第一步就是將這個方程組經過一些操作轉換為
\(\left\{\begin{matrix} a_{11}^{`}*x_{1}+a_{12}^{`}*x_{2}+……+a_{1n}^{`}*x_{n}=b_{1}^{`} & & & & \\ a_{21}^{`}*x_{1}+a_{22}^{`}*x_{2}+……+0=b_{2}^{`} & & & & \\ a_{31}^{`}*x_{1}+a_{32}^{`}*x_{2}+……+0+0=b_{3}^{`} & & & & \\ …… & & & & \\ a_{n1}^{`}*x_{1}+0+……0+0=b_{n}^{`} & & & & \end{matrix}\right.\)
完成這步操作也不難,從第1行開始向下消元,第i行的消元就是將i+1行到n行的第n+1-i列數消成0。
下一步就是從最後一行開始,一元一次方程求解,每次求出的解還要代入方程組的其餘方程中,最終求出\(x_{1}\)到\(x_{n}\)的解。
無解的情況就是操作過程中的任意除數等於零的情況。
程式碼如下:
#include<iostream> using namespace std; int n; double a[110][110],b[110]; double x[110]; int main(){ cin>>n; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>a[i][j]; } cin>>b[i]; } for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(a[i][n+1-i]==0){ cout<<"No Solution"; return 0; } double t=a[j][n+1-i]/a[i][n+1-i]; for(int k=1;k<=n;k++){ a[j][k]-=t*a[i][k]; } b[j]-=t*b[i]; } } for(int i=1;i<=n;i++){ if(a[n+1-i][i]==0){ cout<<"No Solution"; return 0; } x[i]=b[n+1-i]/a[n+1-i][i]; for(int j=1;j<n+1-i;j++){ b[j]-=a[j][i]*x[i]; } } for(int i=1;i<=n;i++){ printf("%.2lf\n",x[i]); } return 0; }