我正在编写一个程序来计算我的物理实验室的精确微分。我知道我可以设置真实域或正域 ( from sympy import *
):
x, y, z = symbol('x y z', positive = True)
我的问题是指定域,例如n>1
。是否可以?在我的输出中,我得到了一个类似的表达式,|n^2-1|
并且通过设置这个域,n>1
我会接受类似的输出n^2-1
(没有绝对值“||”)
我是C ++编程的新手,但我有一个任务是为尺寸很大的矩阵计算对称矩阵(和Hermitian)的特征值和特征向量(标准本征问题Ax = lx)):Binomial(L,L / 2)其中L大约是18-22岁。现在,我正在具有7.7 GB可用内存的机器上对其进行测试,但最终我将可以访问具有64GB RAM的PC。
我从Lapack ++开始。一开始,我的项目假设仅针对对称实矩阵解决此问题。
这个图书馆很棒。非常快速且占用少量RAM。它具有计算特征向量并将其放置在输入矩阵A中的选项,以节省内存。有用!我以为Lapack ++ eigensolver可以处理Hermitian矩阵,但是由于未知的原因而不能(也许我做错了)。我的项目不断发展,对于埃尔米特矩阵,我也应该能够计算出这个问题。
因此,我尝试将库更改为Armadillo库。它可以正常工作,但是不如Lapack ++取代mat A
all eigenvec
,但它当然支持埃尔米特矩阵。
L = 14的一些统计
Lapack ++ RAM 126MB时间7.9s本征+本征向量
犰狳 RAM 216MB时间12s本征
Armadillo RAM 396MB时间15s本征值+本征向量
让我们做一些计算:double
变量大约是8B。我的矩阵的大小为
binomial(14,7)= 3432,因此在理想情况下它应具有3432 ^ 2 * 8/1024 ^ 2 = 89 MB。
我的问题是:是否可以修改或强制Armadillo像Lapack ++一样做一个不错的技巧?犰狳的用法LAPACK
和BLAS
例程。或者,也许有人可以推荐使用另一个库解决此问题的另一种方法? …