SymPy 中的矩阵自动化以及转换为 NumPy

发布于 2025-01-19 22:22:50 字数 463 浏览 0 评论 0原文

我正在尝试创建一个 矩阵,其中元素是定积分的答案。该矩阵中的元素 (ψ_1, ψ_2, ψ_3, ψ_4)。 输入图片description here

在矩阵中可以看到,这里ψ的下标只是矩阵元素的索引。我不知道您是否可以在不显式键入的情况下创建矩阵(例如使用 for 循环或其他东西)。这些定积分将在 sympy 中创建,然后在 numpy 中转换为数组。

我可以在 numpy 中轻松完成此操作,但积分在 numpy 中不会准确,因此我想要 sympy。我如何才能在 sympy 中做到这一点?

I am trying to create a matrix where the elements are answers to definite integrals. The elements in this matrix (ψ_1, ψ_2, ψ_3, ψ_4).
enter image description here

You can see in the matrix that the subscripts of ψ here are just the index of the matrix element. I don't know if you can create matrix without typing it explicitly (like using a for loop or something). These definite integrals are going to be created in sympy which would then be converted to an array in numpy.

I can do this in numpy easily but integrals are not going to be accurate in numpy, thus I want sympy. How do I get to do this in sympy?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

虐人心 2025-01-26 22:22:50

我不太确定你在问什么。假设 (ψ_1, ψ_2, ψ_3, ψ_4) 是符号表达式。为了方便起见,我将它们表示为符号:

P = Matrix(symbols("psi1:5"))
P_conj = conjugate(P)
z, V = symbols("z, V")
M = (P_conj * P.T * z).applyfunc(lambda t: Integral(t, V))
M

如果您对结果感兴趣,您应该将 Integral 替换为 integrate

I'm not really sure what your are asking. Let's say (ψ_1, ψ_2, ψ_3, ψ_4) are symbolic expressions. For convenience, I'm going to represent them as symbols :

P = Matrix(symbols("psi1:5"))
P_conj = conjugate(P)
z, V = symbols("z, V")
M = (P_conj * P.T * z).applyfunc(lambda t: Integral(t, V))
M

If you are interested in the results, you should replace Integral with integrate.

香橙ぽ 2025-01-26 22:22:50

由于矩阵的元素是函数,因此您可以使用 FunctionMatrix

from sympy import symbols, FunctionMatrix, Function, Lambda, pretty
m = 3
n = 4
f = Function('f')
M = FunctionMatrix(m, n, f) # 3 by 4 matrix

print(pretty((M.as_explicit())))
# ⎡f(0, 0)  f(0, 1)  f(0, 2)  f(0, 3)⎤
# ⎢                                  ⎥
# ⎢f(1, 0)  f(1, 1)  f(1, 2)  f(1, 3)⎥
# ⎢                                  ⎥
# ⎣f(2, 0)  f(2, 1)  f(2, 2)  f(2, 3)⎦

如果指定函数

i, j = symbols('i,j')
f = Lambda((i,j), i+j)
M = FunctionMatrix(m, n, f)

print(pretty((M.as_explicit())))
# ⎡0  1  2  3⎤
# ⎢          ⎥
# ⎢1  2  3  4⎥
# ⎢          ⎥
# ⎣2  3  4  5⎦

Since the elements of the matrix are functions, you could use FunctionMatrix

from sympy import symbols, FunctionMatrix, Function, Lambda, pretty
m = 3
n = 4
f = Function('f')
M = FunctionMatrix(m, n, f) # 3 by 4 matrix

print(pretty((M.as_explicit())))
# ⎡f(0, 0)  f(0, 1)  f(0, 2)  f(0, 3)⎤
# ⎢                                  ⎥
# ⎢f(1, 0)  f(1, 1)  f(1, 2)  f(1, 3)⎥
# ⎢                                  ⎥
# ⎣f(2, 0)  f(2, 1)  f(2, 2)  f(2, 3)⎦

If you specify the function

i, j = symbols('i,j')
f = Lambda((i,j), i+j)
M = FunctionMatrix(m, n, f)

print(pretty((M.as_explicit())))
# ⎡0  1  2  3⎤
# ⎢          ⎥
# ⎢1  2  3  4⎥
# ⎢          ⎥
# ⎣2  3  4  5⎦
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文