标签: lapack

C C++链接错误

我正在用C++编写一个使用CLAPACK ATLAS库的程序.但是,我无法让程序成功链接到库.我写了一个小C程序来更好地演示这个问题.有趣的是,如果我用GCC编译它,这个小的演示程序链接就好了,但是当我尝试用G ++编译时,我得到了相同的链接器错误.我希望有人可以帮我弄清楚G ++和GCC究竟在做什么,以便将原始程序链接起来(原始程序是一个C++程序,我不能只是"使用GCC")

这是一个小型演示程序:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <cblas.h>
#include <clapack.h>

// a is a column-major array of all the values in the matrix to invert
// The matrix's height and width are the same because it is a square matrix.
void invertMatrix(float *a, unsigned int height)
{
    int info, ipiv[height];
    info = clapack_sgetrf(CblasColMajor, height, height, a, height, ipiv);
    info = clapack_sgetri(CblasColMajor, height, a, height, ipiv);
}

void displayMatrix(float *a, unsigned int height, unsigned int width) …
Run Code Online (Sandbox Code Playgroud)

gcc g++ lapack atlas

2
推荐指数
1
解决办法
4349
查看次数

Lapack调用反转矩阵

根据我的理解,需要分解/分解(LU,QR,Cholesky等),然后基于分解进行矩阵逆计算.有没有其他方法可以绕过它(我想弄清楚我是否可以坚持在试用版CULAtools中免费提供的6个功能)?提前感谢您的评论.

matrix-inverse lapack

2
推荐指数
1
解决办法
4047
查看次数

使用Lapack的dgeqrf_求解线性系统

我试图用C++中的QR因子分解矩阵 ,使用Lapack函数来求解线性方程组(Ax = b)

据我所知,dgeqrf计算QR分解并覆盖输入矩阵.输出显然包含L(上三角形)的值,但我如何获得Q?

我试过dormqr,据说从dgeqrf的输出计算Q ,但结果与前一次调用的矩阵相同.

这是我的完整代码:

boost::numeric::ublas::matrix<double> in_A(4, 3);
in_A(0, 0) = 1.0;
in_A(0, 1) = 2.0;
in_A(0, 2) = 3.0;

in_A(1, 1) = -3.0;
in_A(1, 2) = 2.0;
in_A(1, 3) = 1.0;

in_A(2, 1) = 2.0;
in_A(2, 2) = 0.0;
in_A(2, 3) = -1.0;

in_A(3, 1) = 3.0;
in_A(3, 2) = -1.0;
in_A(3, 3) = 2.0;

boost::numeric::ublas::vector<double> in_b(4);
in_b(0) = 2;
in_b(1) = 4;
in_b(2) = 6; …
Run Code Online (Sandbox Code Playgroud)

c++ math linear-algebra lapack visual-studio-2012

2
推荐指数
1
解决办法
3538
查看次数

找到BLAS给出lib的路径

我在使用CMake 2.8.9构建的C++代码中使用了blas/lapack.我想用CMake命令找到BLAS和LAPACK库:

find_package(BLAS REQUIRED)
find_package(LAPACK REQUIRED)
Run Code Online (Sandbox Code Playgroud)

但它可以找到它,因为库位于特定目录中.错误如下:

CMake Error at /softs/cmake/2.8.9/64/gcc/4.7.2/share/cmake-2.8/Modules/FindBLAS.cmake:594 (message):
A required library with BLAS API not found.  Please specify library
Run Code Online (Sandbox Code Playgroud)

我的问题:我如何指定一个额外的路径来帮助FindBLAS工作,就像我为Boost做的那样(见下文)?

set(PATH_BOOST "/softs/boost/1.53.0/${ARCH}/${COMPILER_NAME}/${COMPILER_VERSION}")
set(BOOST_INCLUDEDIR "${PATH_BOOST}/include")
set(BOOST_LIBRARYDIR "${PATH_BOOST}/lib")
set(Boost_USE_MULTITHREAD ON)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost 1.53.0 REQUIRED COMPONENTS thread system)
Run Code Online (Sandbox Code Playgroud)

cmake blas lapack

2
推荐指数
1
解决办法
8601
查看次数

如何在JavaScript中实现MATLAB的"eig(A,B)"函数

根据MATLAB的文档:

[ V,D] = eig(A,B)返回D广义特征值的对角矩阵和全矩阵,V其列是相应的右特征向量,因此A*V = B*V*D.

当我阅读可用的源代码时(似乎所有我已经看过Octave,R,Scipy的实现)导致LAPACK的DGGEV例程,这是JavaScript无法提供的.

兔子洞包括使用Emscripten和Fortran:LAPACK绑定并学习足够的Fortran和线性代数来自己完成.

有人知道更容易获得的东西吗?

javascript matlab linear-algebra lapack

2
推荐指数
1
解决办法
783
查看次数

cmake FindLAPACK.cmake 和 FindBLAS.cmake 无法链接 lapack 和 blas

我已经在我的笔记本电脑上正确安装了 lapack 和 blas,我可以通过使用链接

-L/usr/lib64 -lblas -llapack
Run Code Online (Sandbox Code Playgroud)

在我的 Makefile 中。

我想使用 cmake 创建一个 Makefile 并链接 lapack 和 blas,我在 /usr/share/cmake/Modules/ 中使用 cmake 提供的 FindLAPACK.cmake 和 FindBLAS.cmake

CMakeLists.txt 是使用:

find_package(BLAS)
find_package(LAPACK)
if(LAPACK_FOUND AND BLAS_FOUND)
   set(lapackblas_libraries "${BLAS_LIBRARIES} ${LAPACK_LIBRARIES}")
endif()

target_link_libraries(code_exe ${lapackblas_libraries})
Run Code Online (Sandbox Code Playgroud)

code_exe是我链接 lapack 和 blas 库的可执行文件,出现错误

make[2]: *** No rule to make target `/usr/lib64/libblas.so /usr/lib64/liblapack.so', needed by `test/tensortest'.  Stop.
make[1]: *** [test/CMakeFiles/tensortest.dir/all] Error 2
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?非常感谢。

makefile cmake shared-libraries blas lapack

2
推荐指数
1
解决办法
2806
查看次数

使用LAPACK dgesvd_在非方矩阵上进行SVD

我必须在非方阵上计算SVD.我正在使用LAPACK的dgesvd_例程.我对方形矩阵没有任何问题,与MATLAB相比,我得到了预期的值.但我无法为4x5矩阵产生预期的结果.我知道解决方案应该与MATLAB的解决方案匹配,因为返回的奇异值按降序排序.我可以看到,在SVD的原始A输入数组中可以找到一些奇异值.这表明我必须调用dgesvd_错误或我错误地引用结果,这可能与前导数组维度有关.

在每种情况下,我首先发出一个LWORK = -1的调用,查询LAPACK以获得最佳值,然后输入下一个计算SVD的调用.我不确定返回值的所有含义以及它们是否有效,是否应该更改等等.我认为它们没问题,所以我在后续调用中使用它们来计算SVD.

所以这段代码按预期工作(3x3矩阵):

 41 /* Reference data. */
 42 double ref_array_A[3][3] = {
 43     { 1, 2, 3},
 44     { 2, 4, 5 },
 45     { 3, 5, 6 }
 46 };
 47 
 48 double ref_array_U[3][3] = {
 49     { -0.327985, -0.736976, -0.591009 },
 50     { -0.591009, -0.327985, 0.736976 },
 51     { -0.736976, 0.591009, -0.327985 }
 52 };
 53 
 54 double ref_array_Sigma[3][1] = {
 55     { 11.344814 },
 56     { 0.515729 },
 57     { 0.170915 }
 58 }; …
Run Code Online (Sandbox Code Playgroud)

math matlab linear-algebra svd lapack

2
推荐指数
1
解决办法
164
查看次数

LAPACK 程序 (Fortran 90) 的数值精度不够?

我写了一个简单的Fortran代码,其执行的多项式插值n+1R^2。它使用两个LAPACK程序(我的代码中的所有内容都是双精度)求解线性方程组(我正在创建 Vandermonde 矩阵):
首先,它分解矩阵:http : //sites.science.oregonstate.edu/~landaur/ nacphy/lapack/routines/dgetrf.html
后来系统解决了:http : //sites.science.oregonstate.edu/~landaur/nacphy/lapack/routines/dgetrs.html

该程序适用于从多项式生成的几个测试数据案例:0,1,2,3,4。然而,当我从多项式中提供 11 个点时,P(x) = x^10它推断出完全错误的系数。

输入 ( x..., y...):

1.0
1.001
1.002
1.003
1.004
1.005
1.006
1.007
1.008
1.009
1.01
1.0
1.01004512021
1.02018096336
1.03040825707
1.04072773401
1.05114013204
1.06164619412
1.07224666847
1.08294230847
1.0937338728
1.10462212541
Run Code Online (Sandbox Code Playgroud)

输出 ( a_n,...,a_0):

-4.6992230177E+004
2.2042918738E+005
-3.2949938635E+005
5.0740528522E+004
2.4764893257E+005
-3.1846974845E+004
-1.7195378863E+005
-1.4751075818E+005
4.1766709741E+005
-2.6476448046E+005
5.6082872757E+004
Run Code Online (Sandbox Code Playgroud)

我遇到数值稳定性问题了吗?还是我做错了什么?


编辑:我附上了插值过程的代码(注意,我们实际上没有nn+1)。

module InterpolatorModule
contains
subroutine interpolate(n, x, y, …
Run Code Online (Sandbox Code Playgroud)

fortran numerical-methods lapack fortran90 polynomials

2
推荐指数
1
解决办法
250
查看次数

Installing C++ Armadillo library on Mac OS X

我试图在Mac Pro上使用C++ armadillo库(armadillo-0.9.10).我按照README.txt文件中的手动安装说明进行操作.我修改了config.hpp文件,表明我已经安装了LAPACK和BLAS.然后我尝试编译示例.我成功编译并运行example1.cpp,但是当我尝试运行example2.cpp时,它报告我需要安装ATLAS或LAPACK.我将#include标头添加到example2.cpp并使用-framework Accelerate标志在makefile中进行编译.但是,它仍然无法正常工作.是什么赋予了?我应该默认使用Xcode安装LAPACK和BLAS,不是吗?这里的任何帮助都会很精彩.谢谢谢谢!

c++ macos blas lapack armadillo

1
推荐指数
1
解决办法
5738
查看次数

如何在Windows上安装C软件包

我必须使用LU分解将简单模型拟合到C中的某些数据(模拟)。在这里我需要做的一个例子:

但是,我遇到了一个更基本的问题:如何在C中安装软件包并在代码中调用它们?

我是C语言的新手,并且习惯于R。但是我有这样的要求来做一些关于矩阵求逆,LU分解的测试,而教授建议使用Lapack来简化事情(因此,我不需要自己编写代码LU分解等)。但是我不知道如何安装该软件包并在我的代码中调用它,以便使用LAPACK的功能。

我有一个Windows 7 64位,正在使用编译器代码块8.02

谢谢你的帮助。

c package lapack

1
推荐指数
1
解决办法
9178
查看次数