「学习笔记」高斯消元
简单说:高斯消元就是我们初中学的解方程组时用的加减消元法和代入消元法,只是高斯这个人最后总结了一下
过程#
给定方程组
我们用 式来消去
代入得
即
我们现在再用 式来消去 得
代入得
即
我们再将 代会得 ,再带回得
代码#
这里有应对 double
和 int
两种数据类型的代码。
应对 double 数据的#
double a[N][N];
cin >> n;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= n; ++ j) {
cin >> a[i][j];
}
cin >> a[i][n + 1];
}
// a[1][1] * x1 + a[1][2] * x2 + ... + a[1][n] * xn = a[1][n + 1];
// a[2][1] * x1 + a[2][2] * x2 + ... + a[2][n] * xn = a[2][n + 1];
// ...
// a[n][1] * x1 + a[n][2] * x2 + ... + a[n][m] * xn = a[n][n + 1];
void gauss() {
for (int i = 1; i <= n; ++ i) { // 现在要把 xi 从第 i + 1 个方程到第 n 个方程消掉
for (int j = i; j <= n; ++ j) {
if (fabs(a[j][i]) > fabs(a[i][i])) {
for (int k = 1; k <= n + 1; ++ k) {
swap(a[i][k], a[j][k]);
}
}
}
for (int j = i + 1; j <= n; ++ j) { // 把 xi 从第 j 个方程消掉
double ratio = a[j][i] / a[i][i];
for (int k = 1; k <= n + 1; ++ k) {
a[j][k] -= a[i][k] * ratio;
}
}
}
for (int i = n; i >= 1; -- i) { // 解 x[i] 的值
for (int j = i + 1; j <= n; ++ j) {
a[i][n + 1] -= a[i][j] * x[j];
}
x[i] = a[i][n + 1] / a[i][i];
}
}
应对 int 数据的#
int a[N][N];
cin >> n;
for (int i = 1; i <= n; ++ i) {
for (int j = 1; j <= n; ++ j) {
cin >> a[i][j];
}
cin >> a[i][n + 1];
}
// a[1][1] * x1 + a[1][2] * x2 + ... + a[1][n] * xn = a[1][n + 1];
// a[2][1] * x1 + a[2][2] * x2 + ... + a[2][n] * xn = a[2][n + 1];
// ...
// a[n][1] * x1 + a[n][2] * x2 + ... + a[n][m] * xn = a[n][n + 1];
void gauss() {
for (int i = 1; i <= n; ++ i) { // 现在要把 xi 从第 i + 1 个方程到第 n 个方程消掉
for (int j = i; j <= n; ++ j) {
if (a[j][i] != 0) {
for (int k = 1; k <= n + 1; ++ k) {
swap(a[i][k], a[j][k]);
}
break;
}
}
for (int j = i + 1; j <= n; ++ j) { // 把 xi 从第 j 个方程消掉
if (a[j][i] == 0) continue;
int l = a[i][i] / gcd(abs(a[i][i]), abs(a[j][i])) * a[j][i];
int ratioi = l / a[i][i];
int ratioj = l / a[j][i];
for (int k = 1; k <= n + 1; ++ k) {
a[j][k] = a[j][k] * ratioj - a[i][k] * ratioi;
}
}
}
for (int i = n; i >= 1; -- i) { // 解 x[i] 的值
for (int j = i + 1; j <= n; ++ j) {
a[i][n + 1] -= a[i][j] * x[j];
}
x[i] = a[i][n + 1] / a[i][i];
}
}
作者:yifan0305
出处:https://www.cnblogs.com/yifan0305/p/17051498.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
转载时还请标明出处哟!
朝气蓬勃 后生可畏
分类:
数学知识
Buy me a cup of coffee ☕.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】