我希望使用来自C的LAPACK来完成MATLAB/Octave中的rcond操作.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 …Run Code Online (Sandbox Code Playgroud) 跟进问题:g ++没有显示"未使用"警告.
我完全理解为什么g ++没有警告这些变量,但我还是想以某种方式找到它们.我正在处理的代码没有任何特殊情况,所以单个FloatArray x;几乎绝对是遗留下来的.
即使我必须标记单个类(例如警告未使用的FloatArray对象),它也会非常有用.我能做什么?
我尽量避免使用指针,而不是做
std::list<std::pair<int,int>* > myList;
void addElement(int a, int b) {
myList.push_back(new std::pair<int,int>(a,b));
}
Run Code Online (Sandbox Code Playgroud)
我想我可以做点什么
std::list<std::pair<int,int> > myList;
void addElement(int a, int b) {
std::pair<int,int> p(a,b);
myList.push_back(p);
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的行为,这应该存储该对的副本,并在执行时自动删除它myList.clear()(而不是指针).
这是最好的方法吗?我可以期望编译器优化掉不必要的对象p吗?