当我尝试编译Armadillo 2.4.2附带的example1.cpp时,我不断收到以下链接错误:
/tmp/ccbnLbA0.o: In function `double arma::blas::dot<double>(unsigned int, double const*, double const*)':
main.cpp:(.text._ZN4arma4blas3dotIdEET_jPKS2_S4_[double arma::blas::dot<double>(unsigned int, double const*, double const*)]+0x3b): undefined reference to `wrapper_ddot_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)':
main.cpp:(.text._ZN4arma4blas4gemvIdEEvPKcPKiS5_PKT_S8_S5_S8_S5_S8_PS6_S5_[void arma::blas::gemv<double>(char const*, int const*, int const*, double const*, double const*, int const*, double const*, int const*, double const*, double*, int const*)]+0x68): undefined reference to `wrapper_dgemv_'
/tmp/ccbnLbA0.o: In function `void arma::blas::gemm<double>(char const*, …Run Code Online (Sandbox Code Playgroud) 我想找到矩阵的逆.
我知道这涉及到第一次LU分解然后是反转步骤但是我找不到所需的功能,通过搜索苹果的10.7文档!
这似乎是使用CBLAS/LAPACK在C中有用的后对称矩阵求逆,指出应该使用sgetrf_和sgetri_函数.但是在搜索这些术语时,我在Xcode文档中找不到任何内容.
有没有人有这种矩阵运算的锅炉板代码?
如果我用scipy.linalg.solve(我相信调用LAPACK的gesv功能)上〜12000未知的问题(有〜12000平方米,致密,非对称矩阵)我的工作站上,我得到了一个很好的答案10-15分钟.
只是为了探究可能的极限(注意我并没有说"有用"),我将基础问题的分辨率加倍,这导致需要解决约50000个未知数.虽然有一次,我添加交换的GB的一些10S这在技术上我的工作站上运行,它似乎更谨慎地使用一些硬件有足够的RAM,所以我踢它关闭上的AWS EC2高内存四超大. ..在过去的14个小时里它一直在磨砺(嘿,现场实例很便宜)而且它无法分辨它到底有多远.
不幸的是,我不知道所涉及的解算器的时间复杂性是什么(我的google-fu在这个问题上失败了).如果它是O(N ^ 2)那么我预计它将在大约4小时后完成; 如果它是O(N ^ 3)那么它可能会在16小时内完成.当然,这将N解释为未知数 - 已经翻了四倍 - 矩阵中的元素数量增加了16倍!
并且建议将帮助我确定这是否有可能在我(项目)的生命中完成或不感激地收到!
其他信息:
稀疏矩阵在这里并不重要(我的矩阵是密集的,并且在任何情况下,2**31即使在64位上,scipy也不能用于非零元素).
我在工作站上使用Debian/Squeeze的scipy,在EC2上使用Ubuntu 12.04.两者都显然是64位.
我问,因为我正在计算矩阵乘法,其中所有矩阵值都是整数.
我想使用LAPACK,以便获得正确的快速代码.将两个大整数(其乘积小于2^53)整数存储为doubles时,会产生double包含精确整数结果的整数吗?
我有一个用Levenberg-Marquardt方法拟合非线性函数的复杂程序.
该程序使用来自Lapack库的线性方程组的求解器,我使用过:
extern "C" ...
Run Code Online (Sandbox Code Playgroud)
链接到外部fortran库.该程序在我的笔记本电脑上运行没有问题(使用Ubuntu 12.04),我一直在使用它进行测试.
问题:
现在我搬到了大胖64核计算机上才开始做一些真正的计算,计算机上有一个科学的linux 6就可以了.事实证明,大型计算机没有安装lapack,所以我得到了lapack 3.4.2,编译它,并按照这里的说明构建它:
http://matrixprogramming.com/2011/04/using-lapack-from-c/comment-page-1
在那之后,我在之前工作的cmake文件中完全没有改变,只是添加了链接选项:
-L/xdata/Compilers/Sources/lapack-3.4.2
Run Code Online (Sandbox Code Playgroud)
现在我收到错误:
/usr/bin/ld: /xdata/Compilers/Sources/lapack-3.4.2/liblapack.a(dsytrf.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
Run Code Online (Sandbox Code Playgroud)
只是为了记录,我的cmake脚本到处都是-fPIC和-fPIE ...我使用它的链接:
target_link_libraries(LibsModule -lgsl)
target_link_libraries(LibsModule -lgslcblas)
target_link_libraries(LibsModule -lrt)
target_link_libraries(LibsModule -lpthread)
target_link_libraries(LibsModule -pie)
target_link_libraries(LibsModule -fPIC)
target_link_libraries(LibsModule -L/xdata/Compilers/Sources/lapack-3.4.2)
target_link_libraries(LibsModule -lgfortran)
target_link_libraries(LibsModule -llapack -fPIC)
target_link_libraries(LibsModule -lblas -fPIC)
Run Code Online (Sandbox Code Playgroud)
我做错了什么?请指教.
谢谢.
我正在尝试dgtsv使用Cython 包装LAPACK函数(三对角方程组的求解器).
我遇到了这个前面的答案,但由于dgtsv不是LAPACK功能之一,scipy.linalg我不认为我可以使用这种特殊的方法.相反,我一直试图遵循这个例子.
这是我的lapacke.pxd文件的内容:
ctypedef int lapack_int
cdef extern from "lapacke.h" nogil:
int LAPACK_ROW_MAJOR
int LAPACK_COL_MAJOR
lapack_int LAPACKE_dgtsv(int matrix_order,
lapack_int n,
lapack_int nrhs,
double * dl,
double * d,
double * du,
double * b,
lapack_int ldb)
Run Code Online (Sandbox Code Playgroud)
...这是我的瘦Cython包装_solvers.pyx:
#!python
cimport cython
from lapacke cimport *
cpdef TDMA_lapacke(double[::1] DL, double[::1] D, double[::1] DU,
double[:, ::1] B):
cdef:
lapack_int n = D.shape[0]
lapack_int nrhs = B.shape[1]
lapack_int ldb …Run Code Online (Sandbox Code Playgroud) 我正在使用dgeevAccelerate框架中LAPACK实现的算法来计算矩阵的特征向量和特征值.遗憾的是,Apple文档中没有描述LAPACK功能,仅包含http://netlib.org/lapack/faq.html的链接.
如果你查一下,你会发现前两个参数dgeev是表示是否计算特征向量的字符.在Swift,它是要求的UnsafeMutablePointer<Int8>.当我只是使用时"N",我收到一个错误.的dgeev功能和错误在下面的截图中描述
我该怎么做才能解决这个问题?
我正在使用LAPACK库中的DSYEV和DSYEVD来查找特征值和特征向量(编译语法:gfortran -llapack).但是,我找到-0.44,0.35,0.88了特定矩阵的错误特征值().出了什么问题?
可以很容易地看出矩阵具有零行列式,因此至少一个特征值必须为零.
这是我的代码(希望它不是太大):
Program Real_Eigenvec
implicit none
integer, parameter:: n=3
integer:: i,j, flag
real*8:: A(n,n),X(n,n)
real*8:: lambda(n)
real*8, parameter:: p=0.5d0/dsqrt(2.d0), q=1.d0-1.d0/dsqrt(2.d0)
Print*,'Enter flag: 0 for DSYEV, 1 for DSYEVD'
Read*, flag
A= transpose(reshape((/ 0.d0, 1.d0, 0.d0, p, q, p, 0.5d0, 0.0d0, 0.5d0 /), shape(A)))
print*,'Dimension of the matrix, n=',int(sqrt(float(size(A))))
Print*,'A matrix in full form:'
Do i=1,n
print 100, (A(i,j),j=1,n)
End Do
call Eigen(A,lambda,X,n,flag)
! Print the eigenvalues and eigenvectors.
PRINT 200
DO i = 1, n
PRINT …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的Mac上安装BLAS,但每次运行make我都会收到此错误(如下所示).我试图按照本网站上的说明操作:
gfortran -O3 -c isamax.f -o isamax.o
make: gfortran: No such file or directory
make: *** [isamax.o] Error 1
Run Code Online (Sandbox Code Playgroud)
我不知道这意味着什么或如何解决它所以任何帮助将不胜感激.此外,我正在尝试安装CBLAS和LAPACK,所以如果你知道一个好的来源,那么任何提示/指示都会很好......到目前为止我发现的一切都很混乱.我也尝试安装ATLAS,但它仍然无法正常工作.
Lapack很可能没有用于计算行列式的例程。但是,我们可以使用LU,QR或SVD分解来计算它。我更喜欢使用LU分解。现在,lapack使用某些dgetrf子例程将矩阵A分解为具有某些IPIV数组的PLU格式。我不知道如何处理这些信息。为了计算行列式,我只将U矩阵的对角元素相乘。但是,PLU格式的L和U是什么以及如何提取它们。我正在用C编程