Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >将"cls=sympy.Function“参数生成的符号转换为正常符号

将"cls=sympy.Function“参数生成的符号转换为正常符号
EN

Stack Overflow用户
提问于 2018-04-04 01:27:36
回答 1查看 450关注 0票数 1

我想用sympy来求解一个非线性方程组。不幸的是,这是我的计划

代码语言:javascript
运行
AI代码解释
复制
import sympy
x = sympy.Symbol('x')
f,g,h= sympy.symbols("f g h", cls=sympy.Function)
#here I do some computations to arrive at the equations below
eq1 = 2*f(x)*g(x)-h(x)
eq2 = f(x)**2+h(x)*g(x)
system = [eq1,eq2]
unknowns = [f(x),h(x)]

我想为f(x)h(x)解决这个玩具示例,但是sypmy.nonlinsolve(system,unknowns)不能工作,因为它期望系统和未知的是symbol类型,而不是Function类型。

有没有一种简单的方法可以将systemunknowns转换成这样的类型?我的意思是,如果上面的代码

代码语言:javascript
运行
AI代码解释
复制
import sympy
x = sympy.Symbol('x')
f,g,h= sympy.symbols("f g h")
#here I do some computations to arrive at the equations below
eq1 = 2*f*g-h
eq2 = f**2+h*g
system = [eq1,eq2]
unknowns = [f,h]

这会很完美的。我如何将f,g,h转换成这样的类型?

(使用第二段代码不是一个选项,因为我是通过使用微分来得到这些方程的,所以我需要cls=sympy.Function参数;或者,如果有人知道如何使用symbols进行微分,那么我就可以使用第二个代码版本了,这也是可行的。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-04 07:13:33

几种解决办法:

使用开发版的SymPy

在开发版本(GitHub)中,这是开箱即用的;它在内部用符号替换函数。

代码语言:javascript
运行
AI代码解释
复制
>>> sympy.nonlinsolve(system, unknowns)
{(0, 0), (-2*g(x)**2, -4*g(x)**3)}

使用解

solve已经在当前发行版SymPy 1.1.1中执行函数符号交换。

代码语言:javascript
运行
AI代码解释
复制
sympy.solve(system, unknowns)  

返回[(0, 0), (-2*g(x)**2, -4*g(x)**3)]

从recast_to_symbols的未来借用SymPy

在开发版本中,替换逻辑被隔离到recast_to_symbols函数中。

代码语言:javascript
运行
AI代码解释
复制
from sympy.solvers.solvers import recast_to_symbols
e, s, d = recast_to_symbols(systems, unknowns)
print(e, s, d)

版画

代码语言:javascript
运行
AI代码解释
复制
[2*_X0*g(x) - _X1, _X0**2 + _X1*g(x)] [_X0, _X1] {_X0: f(x), _X1: h(x)}

这是新的方程式,是新的符号,还有恢复原始事物的字典。这个想法是人们可以用

代码语言:javascript
运行
AI代码解释
复制
sympy.nonlinsolve(e, s).xreplace(d)

找到解决办法。(实际上,您的示例xreplace甚至不需要,因为解决方案不包含任何已替换的符号。)

如果不想使用开发版本,一个简单的解决方案是从GitHub上的源复制函数

代码语言:javascript
运行
AI代码解释
复制
def recast_to_symbols(eqs, symbols):
    """Return (e, s, d) where e and s are versions of eqs and
    symbols in which any non-Symbol objects in symbols have
    been replaced with generic Dummy symbols and d is a dictionary
    that can be used to restore the original expressions.
    Examples
    ========
    >>> from sympy.solvers.solvers import recast_to_symbols
    >>> from sympy import symbols, Function
    >>> x, y = symbols('x y')
    >>> fx = Function('f')(x)
    >>> eqs, syms = [fx + 1, x, y], [fx, y]
    >>> e, s, d = recast_to_symbols(eqs, syms); (e, s, d)
    ([_X0 + 1, x, y], [_X0, y], {_X0: f(x)})
    The original equations and symbols can be restored using d:
    >>> assert [i.xreplace(d) for i in eqs] == eqs
    >>> assert [d.get(i, i) for i in s] == syms
    """

    from sympy import Dummy, Symbol
    from sympy.core.compatibility import iterable

    if not iterable(eqs) and iterable(symbols):
        raise ValueError('Both eqs and symbols must be iterable')
    new_symbols = list(symbols)
    swap_sym = {}
    for i, s in enumerate(symbols):
        if not isinstance(s, Symbol) and s not in swap_sym:
            swap_sym[s] = Dummy('X%d' % i)
            new_symbols[i] = swap_sym[s]
    new_f = []
    for i in eqs:
        try:
            new_f.append(i.subs(swap_sym))
        except AttributeError:
            new_f.append(i)
    swap_sym = {v: k for k, v in swap_sym.items()}
    return new_f, new_symbols, swap_sym
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49647391

复制
相关文章
[代码]神经符号生成机器
调和符号和分布式表示是一个至关重要的挑战,可以潜在地解决当前深度学习的局限性。最近,通过以生成对象为中心的表示模型,在这个方向上取得了显著的进展。虽然学习识别模型以无监督的方式从原始图像推断以对象为中心的符号表示,如边界框,但没有这样的模型可以提供生成模型的另一个重要能力,即根据学习的世界密度的结构生成(采样)。在本文中,我们提出了生成神经符号机器,这是一个结合了分布式和符号表示的优点的生成模型,支持符号组件的结构化表示和基于密度的生成。这两个关键属性是通过两层潜在层次实现的,具有用于灵活密度建模的全局分布式潜在和结构化符号潜在图。为了增加这种层次结构中模型的灵活性,我们还提出了 StructDRAW prior。实验表明,该模型在结构精度和图像生成质量方面明显优于以往的结构化表示模型和最新的非结构化生成模型。我们的代码、数据集和训练模型可从以下网址获得https://github.com/JindongJiang/GNM
CreateAMind
2022/06/10
2800
[代码]神经符号生成机器
在Python中使用Torchmoji将文本转换为表情符号
很难找到关于如何使用Python使用DeepMoji的教程。我已经尝试了几次,后来又出现了几次错误,于是决定使用替代版本:torchMoji。
deephub
2020/07/29
1.9K0
在Python中使用Torchmoji将文本转换为表情符号
java文档注释符号_java的注释符号
标识符可以简单的理解成一个名字。 在Java中,我们需要给代码中的很多元素起名,包括类名、方法名、字段名、变量名等等。我们给对应元素起的名称就被称为标识符,一个正确的标识符需要遵循以下规则:
全栈程序员站长
2022/11/10
10.4K0
java文档注释符号_java的注释符号
Σ求和符号_西格玛符号怎么打
转自:https://zh.wikipedia.org/wiki/%E6%B1%82%E5%92%8C%E7%AC%A6%E5%8F%B7
全栈程序员站长
2022/11/08
3.4K0
无符号数和有符号数
人有十个手指头,习惯了逢十进一,于是十进制成了生活中的标准。程序的世界只有高低电平两种状态,更适合用二进制来表示,于是二进制成了程序世界的标准。 对与无符号数来说,我们更喜欢谈他们之间的转化,十进制是我们最习惯的进制,于是十进制转为R进制,R进制转为十进制变尤为重要。
naget
2019/07/03
3.1K0
无符号数和有符号数
搜狗输入法:候选词带符号设置方法。正常打字打出符号,颜文字。
候选词带符号: 候选词带颜文字: 设置方法: 高级勾选符号大全和颜文字即可。 想关掉的话取消勾选即可。
小蓝枣
2020/09/23
8710
将照片变成字母符号组成的文字软件
1、简介 平时逛贴吧论坛,经常会碰到一些用符号组成的文字图片刷楼,今天说的就是实现这种字符图的软件。 2、实测 下载软件,解压,打开,直奔主题,导入一张图片,即可自动生成代码图。 我们测可以复制这些字符图,因为都是文本格式的,比如刷帖、论坛回复等,如下是我将其复制粘贴到文本文档的效果。 当然软件功能还很多,比如调整字符密集度、调成彩色打印等等,还需各位自行探索。 话不多少,自行体会才是真,相信此软件肯定有适用于自己工作学习娱乐的地方。 照片变成字母符号软件蓝奏网盘 – 153.4 K
雨尘
2018/07/17
3.2K0
无符号整型和有符号整型的区别,以及无符号整型的使用
size_t 等价于unsigned int 接收sizeof的返回值要用%u
大忽悠爱学习
2021/03/04
4.4K0
JAVA 数组转字符串,用符号分割
List<String> ary = Arrays.asList("aa","bb","cc","dd");
赵哥窟
2018/12/28
3.4K0
C语言中的强符号和弱符号
强弱符号针对的是处于同一工程下在不同源文件下定义的全局变量符号,链接器只处理global的符号而不处理local的符号。链接的核心是符号的重定位,在符号引用的地方找到符号定义的地方,包括函数产生的符号和全局变量产生的符号。
lexingsen
2022/02/24
1.6K0
C语言中的强符号和弱符号
macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
一、使用流程     Windows下的程序运行崩溃时,往往可以利用pdb文件快速解析出程序崩溃的具体位置,甚至可以对应到源代码的具体行数。macOS下的symbolicatecrash也具备相应的功能。对应于Windows下的pdb文件,macOS下的crash文件解析需要用到dSYM文件。这个文件正常情况下可能不会生成,需要在XCode进行设置。当程序崩溃时,通过symbolicatecrash对crash文件和dSYM文件中的符号进行映射,即可将crash文件中的内存地址转换为可读的字符串。以前的博文
24K纯开源
2018/01/18
2.6K0
macOS下利用dSYM文件将crash文件中的内存地址转换为可读符号
符号的艺术
今天跟大家聊聊ppt中的符号艺术——项目符号! ▼▼▼ 大家在word排版过程中,如果内容很长并且逻辑性很强的话,都会下意识的使用项目符号,使得文章结构分明,逻辑清晰。 ●●●●● 当然在ppt中,也
数据小磨坊
2018/04/10
2.3K0
符号的艺术
PWN 无符号和有符号整型的绕过漏洞
C语言中,无符号整型数是不带正负表示符号的整型数。C语言在计算机里编译时数都是用二进制表示的,如果最左边这一位不用来表示正负,而是和后面的连在一起表示整数,那么就不能区分这个数是正还是负,就只能是正数,这就是无符号整型数。
yulate
2023/05/02
9820
PWN 无符号和有符号整型的绕过漏洞
markdown常用数学符号cov(markdown求和符号)
希腊字母 \alpha α \alphaα \beta β \betaβ  \gamma γ \gammaγ  \Gamma Γ   \Gamma Γ  \delta δ \deltaδ \Delta Δ \DeltaΔ \epsilon ϵ \epsilonϵ \varepsilon  ε \varepsilonε \zeta ζ \zetaζ \eta η \etaη  \theta θ \thetaθ \Theta Θ \ThetaΘ \vartheta ϑ \varthetaϑ \iota ι \iotaι  \kappa κ \kappaκ  \lambda λ \lambdaλ  \Lambda Λ \LambdaΛ \mu  μ \muμ \nu ν \nuν \xi ξ \xiξ \Xi Ξ \XiΞ \pi π \piπ \Pi Π \PiΠ \varpi ϖ \varpiϖ   \rho ρ \rhoρ \varrho ϱ \varrhoϱ  \sigma σ \sigmaσ \varsigma  ς \varsigmaς \tau τ \tauτ \upsilon υ \upsilonυ \Upsilon Υ \UpsilonΥ \phi ϕ \phiϕ \Phi Φ \PhiΦ \varphi φ \varphiφ  \chi χ \chiχ  \psi ψ \psiψ \Psi Ψ \PsiΨ \omega ω \omegaω \Omega Ω \OmegaΩ
全栈程序员站长
2022/08/01
2.6K0
markdown常用数学符号cov(markdown求和符号)
latex中求和符号正下方的符号怎么打_累加符号上下标的意义
放在左上角的时候 \sum^n: ∑ n \sum^n ∑n 放在正上方的时候 \sum\limits^n: ∑ n \sum\limits^n ∑n​
全栈程序员站长
2022/11/07
4.5K0
空格符号代码_java空格符号代码
&nbsp; :一个字符的半角的不断行的空格,如果需要在网页中插入多个空格,可以将“&nbsp;”代码写多遍;
全栈程序员站长
2022/11/08
2.6K0
空格符号代码_java空格符号代码
java找不着符号_找不到符号:Java
如果这是一个怪异的问题,我感到很抱歉,但是我刚刚开始OOP,并遇到了一个我应该制作的简单菜单驱动数学程序。我清除了编译器给我的所有错误,但是现在它给了我大约14个新错误,其中大多数被描述为“找不到符号”。这是我的代码:
全栈程序员站长
2022/09/08
1.6K1
LaTeX科技符号
【注】摘自 Scott Pakin 的 《The Comprehensive LaTeX Symbol List》
hotarugali
2022/03/18
8900
LaTeX科技符号
LaTeX其他符号
【注】摘自 Scott Pakin 的 《The Comprehensive LaTeX Symbol List》 。
hotarugali
2022/03/18
9320
LaTeX其他符号
matlab画图常用符号,matlab画图特殊符号[通俗易懂]
在MATLAB 中使用 LaTex 字符 1.Tex 字符表 在 text 对象的函数中(函数 title、xlabel、ylabel、zlabel 或 text), 说明文字除使用标准的 ASCII 字符外,还可……
全栈程序员站长
2022/09/30
3.4K0

相似问题

Sympy符号和cls参数

11

将-1转换为无符号类型

22

将美元符号符号转换为点符号符号

20

将符号转换为符号列表

40

将符号255转换为8位双补码

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文