c++ - 如何修复 LU 分解?
问题描述
我按照算法写了代码,结果不正确。根据算法,我们必须标明矩阵的维数并手动填写主矩阵A和向量B。我们需要生成一个LU矩阵。它已生成,但编号错误。最后,我们必须得到带有解的向量 X。这是在窗口模式下。 https://imgur.com/TSsjMXp
int N = 1; // matrix dimension
double R = 0;
typedef double Matrix [6][6];
typedef double Vec [6];
.
.
.
void Decomp (Matrix A, int N, int &Change)
{
int i, j, k ;
double R, L, U;
Change = 1;
R = Math::Abs(A[1][1]);
for(j=2; j<=N; j++)
if (Math::Abs(A[j][1])>= R)
{
Change = j;
R = Math::Abs(A[j][1]);
}
if (R<= 1E-7)
{
MessageBox::Show("The system is degenerate");
}
if (k!=1)
{
for(i=1; i<=N; i++)
{
R = A[Change][i];
A[Change][i] = A[1][i];
A[1][i] = R;
}
}
for(i=2; i<=N; i++)
A[1][i] = A[1][i]/A[1][1];
for(i=2; i<=N; i++)
{
for(k=i; k<=N; k++);
{
R = 0;
for ( j=1; j<=(i-1); j++)
R = R + A[k][j] * A[j][i];
A[k][i] = A[k][i] - R;
}
if (A[i][i]<= 1E-7)
{
MessageBox::Show("The system is degenerate[enter image description here][1]");
}
for(k = i+1; k<=N; k++)
{
R = 0;
for (j=1; j<=(i-1); j++)
R = R + A[i][j] * A[j][k];
A[i][k] = (A[i][k] - R) / A[i][i];
}
}
for (int i = 0; i < N; i++)
for (int j = 0; j < N; j++)
{
C_matrix_dgv->Rows[i]->Cells[j] -> Value = Convert::ToString(A[i+1][j+1]);
}
}
void Solve (Matrix A, Vec b, Vec x, int Change, int N)
{
int i = 0,j = 0;
double R;
if (Change!=1)
{
R = b[Change];
b[Change] = b[1];
b[1] = R;
}
b[1] = b[1]/A[1][1];
for(i=2; i<=N; i++)
{
R = 0;
for( j=1; j<=(i-1); j++)
R = R + A[i][j] * b[j];
b[i] = (b[i] - R) / A[i][i];
}
x[N] = b[N];
for( i=1; i<=(N-1); i++)
{
R = 0;
for(j = (N+1-i); j<=N; j++)
R = R + A[N - i][j] * x[j];
x[N - i] = b[N - i] - R;
}
}
解决方案
int N = 1; // matrix dimension
如果您在其余代码中使用它,您将无法获得正确的结果。矩阵的维数为6x6
。使用 a std::array
or std::vector
so 您不需要将大小保存在单独的变量中。
推荐阅读
- wcf - 添加 WCF 服务引用
- python - 文件保存错误“PermissionError:[Errno 13] Permission denied:”
- python - 如何在 JSON 属性中保存长格式文本
- python - 在我的基于 PyOpenCl 的 N-Body 模拟中找到异常大加速度的原因
- java - Flink ParquetSinkWriter FileAlreadyExistsException
- r - 如何替换 R 数据框中的错误字符
- c# - 使用 ObjectListView 覆盖的数据
- ruby-on-rails - Rails 6 测试 - 以前删除的表上出现“找不到表”错误
- firebase - 如何降低 Flutter 中 AdMob 的 BannerAd 高度?
- java - 在 Java 中反序列化第三方单例类