- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我希望使用 C 中的 LAPACK 来完成 rcond 在 MATLAB/Octave 中所做的事情。MATLAB 手册告诉我使用了 dgecon,即使用基于 1 的范数。
我为一个极其简单的案例写了一个简单的测试程序; [1,1; 1,0]对于这个输入 matlab 和 octave 使用 rcond 和 1/cond(x,1) 给我 0.25,但是在使用 LAPACK 的情况下,这个示例程序打印 0.0。对于其他情况,例如身份,它会打印正确的值。
由于假设 MATLAB 实际上成功地使用了这个例程,那么我做错了什么?我试图破译 Octave 的作用,但收效甚微,因为它包含在
#include <stdio.h>
extern void dgecon_(const char *norm, const int *n, const double *a,
const int *lda, const double *anorm, double *rcond, double *work,
int *iwork, int *info, int len_norm);
int main()
{
int i, info, n, lda;
double anorm, rcond;
double w[8] = { 0,0,0,0,0,0,0,0 };
int iw[2] = { 0,0 };
double x[4] = { 1, 1, 1, 0 };
anorm = 2.0; /* maximum column sum, computed manually */
n = 2;
lda = 2;
dgecon_("1", &n, x, &lda, &anorm, &rcond, w, iw, &info, 1);
if (info != 0) fprintf(stderr, "failure with error %d\n", info);
printf("%.5e\n", rcond);
return 0;
}
使用 cc testdgecon.c -o testdgecon -llapack 编译; ./testdgecon
最佳答案
我找到了自己问题的答案。
矩阵在发送到 dgecon 之前必须进行 LU 分解。这看起来非常合乎逻辑,因为人们经常希望在检查条件后求解系统,在这种情况下不需要将矩阵分解两次。同样的想法也适用于单独计算的范数。
以下代码是使用 LAPACK 计算倒数条件数的所有必要部分。
#include "stdio.h"
extern int dgecon_(const char *norm, const int *n, double *a, const int *lda, const double *anorm, double *rcond, double *work, int *iwork, int *info, int len);
extern int dgetrf_(const int *m, const int *n, double *a, const int *lda, int *lpiv, int *info);
extern double dlange_(const char *norm, const int *m, const int *n, const double *a, const int *lda, double *work, const int norm_len);
int main()
{
int i, info, n, lda;
double anorm, rcond;
int iw[2];
double w[8];
double x[4] = {7,3,-9,2 };
n = 2;
lda = 2;
/* Computes the norm of x */
anorm = dlange_("1", &n, &n, x, &lda, w, 1);
/* Modifies x in place with a LU decomposition */
dgetrf_(&n, &n, x, &lda, iw, &info);
if (info != 0) fprintf(stderr, "failure with error %d\n", info);
/* Computes the reciprocal norm */
dgecon_("1", &n, x, &lda, &anorm, &rcond, w, iw, &info, 1);
if (info != 0) fprintf(stderr, "failure with error %d\n", info);
printf("%.5e\n", rcond);
return 0;
}
关于使用 lapack 计算倒数条件数(即 rcond(x)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974349/
我希望使用 C 中的 LAPACK 来完成 rcond 在 MATLAB/Octave 中所做的事情。MATLAB 手册告诉我使用了 dgecon,即使用基于 1 的范数。 我为一个极其简单的案例写了
我正在移植一些使用 rcond() 来测试奇点的 matlab 代码,以及 recommended here (用于 matlab 奇点测试)。 我看到 Julia 中有一个 cond() 函数(在
在查找如何在numpy(1.15.4)中计算伪逆时,我注意到numpy.linalg.pinv有一个参数rcond 其描述为: rcond : (…) array_like of float Cuto
我正在尝试使用 numpy ( Description) 中的最小二乘解。根据网站使用“rcond”参数的新默认值:“要消除警告并使用新默认值,请使用 rcond=None,要继续使用旧行为,请使用
我将一些大段代码从 Python 2.7 迁移到 Python 3.7,现在我得到了 rcond parameter will change to the default of machine pre
我是一名优秀的程序员,十分优秀!