首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >加速渐近矩阵运算

加速渐近矩阵运算
EN

Stack Overflow用户
提问于 2018-06-08 13:40:45
回答 1查看 764关注 0票数 2

我已经写了一段代码,它使用sympy来设置一个矩阵和一个向量。这两个元素是sympy符号。然后我求逆矩阵,并将求逆矩阵与向量相乘。这应该是具有n个变量的线性方程系统的通用求解器。我对这些线性方程的符号解很感兴趣。问题是我的代码太慢了。例如,对于n=4,它大约需要30秒,但是对于n=7,我到目前为止还不能解决它,代码运行了一整晚(8小时),早上还没有完成。这是我的代码。

代码语言:javascript
复制
from sympy import * 
import pprint 

MM = Matrix(niso,1, lambda i,j:var('MM_%s' % (i+1) ))
MA = Matrix (niso,1, lambda i,j:var('m_%s%s' % ('A', chr(66+i)) ) )
MX = Matrix (niso,1, lambda i,j:var('m_%s%s'% (chr(66+i), 'A')))
RB = Matrix(niso,1, lambda i,j:var('R_%s%s' % ('A'+chr(66+i),i+2)))
R = Matrix (niso, niso-1, lambda i,j: var('R_%s%d' % (chr(65+i) , j+2 )))
K= Matrix(niso-1,1, lambda i,j:var('K_%d' % (i+2) ) )
C= Matrix(niso-1,1, lambda i,j:var('A_%d' % i))

A = Matrix(niso-1,niso-1, lambda i,j:var('A_%d' % i))
b = Matrix(niso-1,1, lambda i,j:var('A_%d' % i))

for i in range(0,niso-1):
        for j in range(0,niso-1):
            A[i,j]=MM[j+1,0]*(Add(Mul(R[0,j],1/MA[i,0]/(RB[i,0]-R[0,i])))+R[i+1,j]/MX[i,0]/(-RB[i,0]+R[0,i]))

for i in range(0,niso-1):
    b[i,0]=MM[0,0]*(Add(Mul(1,1/MA[i,0]/(RB[i,0]-R[0,i])))+1/MX[i,0]/(-RB[i,0]+R[0,i]))


A_in = Inverse(A)
if niso <= 4:
    X =simplify(A_in*b)
if niso > 4:
    X = A_in*b
pprint(X)

有没有办法加快速度呢?

EN

Stack Overflow用户

回答已采纳

发布于 2018-06-09 03:03:43

不要倒置!使用n=4

代码语言:javascript
复制
%timeit soln = A.LUsolve(b)
697 µs ± 12.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

使用n=10

代码语言:javascript
复制
%timeit soln = A.LUsolve(b)
431 ms ± 13 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50754020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档