标签: sympy

使用sagemath或sympy将n阶微分方程简化为一阶方程组

我想将n阶常微分方程简化为一阶方程组.这是为数值分析做准备.我使用Sympy和Sagemath作为计算机代数,但我没有找到任何函数来进行这种类型的缩减.我不确定是否有其他人可以指出Sympy或Sagemath中是否存在此功能.

这方面的一个例子是减少等式:

x''' - 2x'' + x' = 0 
Run Code Online (Sandbox Code Playgroud)

到一阶方程组:

[0  1 0 
 0  0 1 
 0 -1 2]
Run Code Online (Sandbox Code Playgroud)

math sympy sage numerical-methods ode

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

是否可以使用 sympy 符号索引 numpy 数组?

我想对这样的 numpy 数组做一些求和

import numpy as np
import sympy as sy
import cv2

i, j = sy.symbols('i j', Integer=True)
#next read some grayscale image to create a numpy array of pixels  
a = cv2.imread(filename)
b = sy.summation(sy.summation(a[i][j], (i,0,1)), (j,0,1)) #double summation
Run Code Online (Sandbox Code Playgroud)

但我正面临一个错误。是否可以将 numpy 符号作为 numpy 数组的索引处理?如果不是,你能给我一个解决方案吗?谢谢。

python numpy sympy

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

在 sympy 中评估三角函数表达式

在 PyCharm 社区版 2016.2.3 + Anaconda 发行版中使用 python 2.7。

我有一个类似的输入:

from sympy import *

x = symbols('x')
f = cos(x)
print (f.subs(x, 25))
Run Code Online (Sandbox Code Playgroud)

输出为cos(25), 。有没有办法在某个角度评估三角恒等式,例如正弦/余弦?我试过了cos(degrees(x)),但没有什么不同。我是否遗漏了文档的某些关键部分,或者真的没有办法做到这一点?泰为您提供帮助:)

python trigonometry numpy sympy

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

仅给定几个变量,求解一组简单的方程

我有一组几百个简单的求和方程。例如这里有3个:

 w1 - u1 - u2 = 0 
 w1 + w2 - w3 - u3 = 0
 w1 - w2 - w4 = 0
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来解决尽可能多的问题,只给出少数几个值。例如,在上面的方程组中,如果我有u1并且u2我可以计算w1,但没有别的。鉴于u1u2并且w2我可以计算w1w4。等等……

目前我正在以一种相当直接的方式(伪代码)处理这个问题:

while there are new results:
     for each equation:
         try to solve equation:
             if solved update result set
Run Code Online (Sandbox Code Playgroud)

这有效,但感觉笨拙且效率低下。

有没有更好的办法?(如果相关,则使用 Python)

编辑:我知道这可以作为一系列线性方程来解决,如果我知道足够的值。我正在寻找一种方法,当我不知道作为线性方程组求解时使用的方法(或者可能有一种奇特的方法可以以某种方式减少问题)

编辑 2:错误,已删除

编辑 3:对于使用 sympy 对我的解决方案感兴趣的任何人:

from sympy import linsolve, symbols, linear_eq_to_matrix
w1, w2, …
Run Code Online (Sandbox Code Playgroud)

python recursion performance sympy

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

python:更改符号变量并分配数值

为了计算导数和其他表达式,我使用了 sympy 包并说T = sy.Symbol('T')现在我已经计算了正确的表达式:

E= -T**2*F_deriv_T(T,rho)
Run Code Online (Sandbox Code Playgroud)

在哪里

def F_deriv_rho(T,rho):
    ret = 0
    for n in range(5):
        for m in range(4):
            inner= c[n,m]*g_rho_deriv_rho_np*g_T_np
        ret += inner
    return ret
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

F_deriv_rho: [0.0 7.76971e-5*T 0.0001553942*T**2*rho T*(-5.14488e-5*log(rho) - 5.14488e-5)*log(T) + T*(1.22574e-5*log(rho)+1.22574e-5)*log(T) + T*(1.89488e-5*log(rho) + 1.89488e-5)*log(T) + T(2.29441e-5*log(rho) + 2.29441e-5)*log(T) + T*(7.49956e-5*log(rho) + 7.49956e-5)*log(T) T**2*(-0.0001028976*rho*log(rho) - 5.14488e-5*rho)*log(T) + T**2*(2.45148e-5*rho*log(rho) + 1.22574e-5*rho)*log(T) + T**2*(3.78976e-5*rho*log(rho) + 1.89488e-5*rho)*log(T) + T**2*(4.58882e-5*rho*log(rho) + 2.29441e-5*rho)*log(T) + T**2*(0.0001499912*rho*log(rho) + 7.49956e 5*rho)*log(T)]

使用python我想将T(和rho)作为一个符号更改为一个值。我怎么能那样做?

因此,我想创建 10 个类似的数字,T_def = np.arange(2000, 10000, …

python variables symbols sympy

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

python sympy(不等式或关系)到(设置或间隔)

如何从(不等式/关系)对象中获取结果并将其转换为(设置/间隔)对象?

import sympy
import sympy.solvers
#import sympy.solvers.inequalities
from sympy.solvers.inequalities import reduce_rational_inequalities 

x = sympy.Symbol('x')

ExampleInequalities1 = [[x**2 <= 1]]
ResultDomain1 = reduce_rational_inequalities(ExampleInequalities1, x)
print 'ResultDomain1', ResultDomain1
Run Code Online (Sandbox Code Playgroud)

给我:

>>> And(-1 <= x, x <= 1)
Run Code Online (Sandbox Code Playgroud)

上面的结果可以表示为:

>>> sympy.Interval(-1, 1)
Run Code Online (Sandbox Code Playgroud)

这是一个 Sympy Set Interval 对象。(这让我可以使用交集、联合、互补等......)。

如何执行此转换?

python inequality set sympy

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

如何检查变量是否为 sympy 表达式?

我想检查一个 python 变量是一个 sympy 表达式。很容易检查它是否是一个 sympy 变量:

isinstance(arg, symbol.Symbol)
Run Code Online (Sandbox Code Playgroud)

但我找不到怎么做:

isinstance(arg, sympy.Expression)
Run Code Online (Sandbox Code Playgroud)

是否可以检查python变量是否包含sympy表达式或变量?


作为快速检查,我做了:

expr2 = x-y
type(expr2)
<class 'sympy.core.add.Add'>
Run Code Online (Sandbox Code Playgroud)

但我不想有一个巨大的系列 if 语句子句检查每种可能的数学表达式类型。似乎多余/愚蠢。


能够检测变量何时属于任何类型的 sympy 相关事物,然后对其采取行动(然后可能稍后检查它是否是表达式或更详细的东西......)

python sympy

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

需要能够在 sympy.solve 中使用的 log2(x) 的 sympy 函数

我需要以字符串的形式接受用户输入,将其解析为一个 sympy 表达式,然后求解一个变量。除了 log2(x) 等价于 sympy 的 log(x, 2) 之外,大多数用户允许的函数都匹配 sympy 函数。

我试着定义为提到,返回sympy功能的Python函数的方法在这里。我也尝试过使用 lambda 定义一个 sympy 函数。这两种方法都可以在用变量替换数字后获取表达式的值,但如果调用 sympy.solve 来求解变量,则会产生错误。例如:

import sympy
from sympy.parsing.sympy_parser import parse_expr
def log2(x):
    return sympy.log(x, 2)
t, k, y = sympy.symbols('t k y')
parsed = parse_expr("log2(t + k) + k - y")
sympy.solve(parsed, k)
Run Code Online (Sandbox Code Playgroud)

引发 NotImplementedError。使用 lambda 返回类似的结果。如果 log2(t+k) 替换为 log(t+k,2),则上述代码有效。我认为这是因为 sympy 函数是具有许多不同方法的对象,并且 sympy.solve 尝试调用未在我的 python 函数中实现的方法。我正在寻找一种解决方案,它不需要为我的函数创建一个与log的实现长度相同的类。有没有办法让 sympy 识别并使用 log2 而不创建一个长类来处理每个可能的调用?我可以以某种方式创建一个简短的类定义,将任何方法调用传递给 log(x, 2) 吗?

sympy

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

什么是同情的索引对象?

我不明白indexed objects同情的是什么.文档没有帮助我理解这个概念.

例如 :

>>> from sympy import symbols, IndexedBase, Idx
>>> M = IndexedBase('M')
>>> i, j = symbols('i j', cls=Idx)
>>> M[i, j]
M[i, j]
Run Code Online (Sandbox Code Playgroud)

这段代码有什么作用?什么是M[i,j]

我所理解的是,它indexed object给出了个人同情的指数symbols.

我正在寻找一个更好的解释indexed objects,以及它与IndexedBase和的关系idx

python sympy

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

为什么log(xy)= log(x)+ log(y)在SymPy中不起作用?

为什么log(xy)= log(x)+ log(y)在SymPy中不起作用?

我试过这个:

from sympy import *
var('x y')
print(simplify(log(x*y)))
print(expand(log(x*y)))
print(collect(log(x*y),x))
print(solve(log(x*y),x))
# log(x*y)
# log(x*y)
# log(x*y)
# [1/y]
Run Code Online (Sandbox Code Playgroud)

python sympy

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