gpt4 book ai didi

iphone - 是否可以使用 Accelerate/LAPACK 求解非方欠/过约束矩阵?

转载 作者:行者123 更新时间:2023-12-03 17:16:46 25 4
gpt4 key购买 nike

是否可以使用 Accelerate/LAPACK 求解非方欠/过约束矩阵?比如下面两个矩阵。如果任何变量受到约束,它们应该等于 0 而不是无限。

因此在约束条件下:A、D 和 E 等于 0,而 B、C 和 F 等于 -1。

在过度约束的情况下,所有变量都将等于 -1。

受约束:

 ____                        ____
| (A) (B) (C) (D) (E) (F) |
| -1 0 0 1 0 0 | 0 |
| 1 0 0 0 -1 0 | 0 |
| 0 -1 1 0 0 0 | 0 |
| 0 1 0 0 0 -1 | 0 |
| 0 1 0 0 0 0 | -1 |
|____ ____|

过度约束:

 ____                        ____
| |
| -1 0 0 1 0 0 | 0 |
| 1 0 0 0 -1 0 | 0 |
| 0 -1 1 0 0 0 | 0 |
| 0 1 0 0 0 -1 | 0 |
| 0 1 0 0 0 0 | -1 |
| 0 0 1 -1 0 0 | 0 |
| 1 -1 0 0 0 0 | 0 |
|____ ____|

最佳答案

是的!

void SolveUnderdeterminedSystem() {

__CLPK_integer m = 5;
__CLPK_integer n = 6;
__CLPK_integer nrhs = 1;
double A[30] = {
-1.0, 1.0, 0.0, 0.0, 0.0,
0.0, 0.0, -1.0, 1.0, 1.0,
0.0, 0.0, 1.0, 0.0, 0.0,
1.0, 0.0, 0.0, 0.0, 0.0,
0.0, -1.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, -1.0, 0.0
};
__CLPK_integer lda = 5;
double x[6] = { 0.0, 0.0, 0.0, 0.0, -1.0, 0.0 };
__CLPK_integer ldb = 6;
/* Need to allocate at least 2*min(m,n) workspace. */
double work[12];
__CLPK_integer workSize = 12;
__CLPK_integer info;

dgels_("N", &m, &n, &nrhs, A, &lda, x, &ldb, work, &workSize, &info);

if (info)
printf("Could not solve system; dgels exited with error %d\n", info);
else
printf("Solution is [%f, %f, %f, %f, %f, %f]\n",
x[0], x[1], x[2], x[3], x[4], x[5]);
}

相同的例程还将解决最小二乘意义上的超定系统(结果将是残差 ||Ax - b|| 的最小化)。

请注意,dgels_ 假设矩阵具有满秩(即,rank(A) = min(m, n))。如果情况并非如此,您将需要使用不同的例程 (dgelsd_),该例程使用 SVD 分解而不是 QR。

您似乎问了很多有关 LAPACK 的问题。非常值得您花时间阅读 the documentation .

关于iphone - 是否可以使用 Accelerate/LAPACK 求解非方欠/过约束矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4319246/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com