高斯消除问题
Gaussian elimination questions
我正在尝试通过一个用于消除高斯的C++程序(所有这些都在片段下方。我已经走得很远了,但我被困在这一部分:
MatA[i][j] = MatA[i][j]/Divisor;
}
MatB[i] = MatB[i]/Divisor;
if (i+1 < n) {
for (k=i+1; k<n; k++) {
Factor = MatA[k][i];
MatA[k][i] = 0.0;
for (j = i+1; j < n; j++) {
MatA[k][j] = MatA[k][j] - Factor * MatA[i][j];
}
MatB[k] = MatB[k] - Factor * MatB[i]
高斯消除:
int main(){
int i, j, k, n;
float MatA[100][100], MatB[100], X[100];
float Divisor, Factor, sum;
cin >> n;
for(i=0; i< n; i++) {
for(j=0; j < n; j++) {
cin >> MatA[i][j];
}
}
for(i=0; i< n; i++) {
cin >> MatB[i];
}
for (i=0; i< n; i++) {
Divisor = MatA[i][i];
MatA[i][i] = 1.0;
for (j = i+1; j < n; j++) {
MatA[i][j] = MatA[i][j]/Divisor;
}
MatB[i] = MatB[i]/Divisor;
if (i+1 < n) {
for (k=i+1; k<n; k++) {
Factor = MatA[k][i];
MatA[k][i] = 0.0;
for (j = i+1; j < n; j++) {
MatA[k][j] = MatA[k][j] - Factor * MatA[i][j];
}
MatB[k] = MatB[k] - Factor * MatB[i];
}
}
}
X[n-1] = MatB[n-1];
for (i = n-2; i>=0; i--) {
sum = 0.0;
for (j = i+1; j < n; j++) {
sum = sum + MatA[i][j] * X[j];
}
X[i] = MatB[i] - sum;
}
for(i=0; i< n; i++) {
for (j = 0; j < n; j++) {
cout << MatA[i][j] << " ";
}
cout << " " << MatB[i] << endl;
}
for (i=0; i<n; i++) {
cout << "X[" << i << "] is: " ;
cout << X[i] << endl;
}
return 0;
}
撇开在执行高斯消除时需要考虑零或非常小的对角线元素这一事实不谈......
假设您在第一排。
M[0][0]
是您的枢轴元素。您将第一行的每个元素除以 M[0][0]
,这使得 M[0][0]
的值等于 1.0
并计算其余元素。这不是执行 Guussian 消除的必要步骤,但您正在代码中执行此操作。行后
for (j = i+1; j < n; j++) {
MatA[i][j] = MatA[i][j]/Divisor;
}
执行i = 0
,你有:
1.0 m12 ... m1n
在第一行。第二行尚未处理。假设第二行如下所示:
m21 m22 ... m2n
下一步是确保第二行如下所示:
0.0 m_new22 ... m_new2n
若要达到该状态,需要执行以下操作。
second row = second row - m21 * first row
m21_new = m21 - m21*m11 ==> 0.0 since m11 is 1.0.
m22_new = m22 - m21*m12
m23_new = m23 - m21*m13
...
m2j_new = m2j - m21*m1j
...
m2n_new = m2n - m21*m1n
这些操作中的常量是 m21
,这在您的代码中Factor
。
该行:
MatA[k][j] = MatA[k][j] - Factor * MatA[i][j];
是以下代码等效项:
m2j_new = m2j - m21*m1j
查看此站点: http://euler.mcs.utulsa.edu/~class_diaz/cs2503/Spring99/lab7/node8.html
没有简单的方法可以阅读它并尝试自己理解。
相关文章:
- 在C++上实现高斯赛德尔迭代方法
- C++:矩阵高斯消除不起作用:使用单维数组来存储元素
- (C++)(Visual Studio) 将高斯模糊滤镜应用于 RGB 中的灰度图像
- 用于创建高斯随机数的 c++ 函数
- 将高斯模糊应用于灰度图像
- 高斯雅各比法
- 用高斯Seidel红色黑色求解1D泊松方程
- 如何改变高斯分布(提升)中的种子
- 高斯消去码
- 求解矩阵中的高斯消除问题
- 使用高斯消去法从文本文件中求逆矩阵.C++
- 矩阵的行列式通过高斯消去C++
- 一次执行后,嵌套for循环出现意外/未见的中断:高斯消去
- 执行高斯消去程序时结果错误
- 高斯消去线性方程
- 高斯消去法
- 奇异矩阵的高斯消去法
- 高斯模糊与FFT问题
- Opengl - 高斯模糊位移/错位问题
- 高斯消除问题