我是 MATLAB 刚接触 Python 的新手。我现在在用 Python 求解方程组时遇到问题。例如,在Matlab中
R = solve( a1*[x1; x2] == [y1;y2], ...
a2*[x3; x4] == [y3;y4], ...
a3*[x5; x6] == [y5;y6], ...
x2 == y3, x3 == y2, ...
x4 == y5, x5 == y4, ...
[ x2 x3 x4 x5 ...
y1 y2 y3 y4 y5 y6]... % unknown
);
y1 = simplify(R.y1);
y10 = simplify(R.y10);
Run Code Online (Sandbox Code Playgroud)
a1..a5是系数y1 y10是我需要求解的,它们应该是求解后的符号表达式。如何在 Python 中做到这一点?
我有一个总和,其中每个项共享相同的分母,例如a/Z + b/Z + ...。我想把Z. 虽然simplify可以做到,但是时间太长了。我已经尝试collect过了factor,但也没有达到我想要的效果。
有 SymPy 函数可以用于此目的吗?
from sympy import *
x = Symbol('x')
y = x ** 2
dx = diff(y, x)
Run Code Online (Sandbox Code Playgroud)
这段代码可以得到y的导数。这很容易dx = 2 * x
dx现在我想获取for的值x = 2。
显然,dx = 2 * 2 = 4当x = 2
但是我如何用Python代码实现这一点呢?
感谢您的帮助!
如何获得 sympy 表达式中出现的操作?例如,对于:2+x**2+exp(7*x)-log(y),我需要返回类似: 的内容["+","**","exp","*","-","log"]。我发现有一种简单的方法来获取变量,使用.free_symbols. 有没有简单的操作方法?我还发现了这个函数:srepr它返回:"Add(Pow(Symbol('x'), Integer(2)), exp(Mul(Integer(7), Symbol('x'))), Mul(Integer(-1), log(Symbol('y'))), Integer(2))"。这包含了我需要的一切,但我不确定如何以有效的方式从那里提取我需要的所有部分?有人能帮我吗?谢谢你!
有没有办法在Python中找到函数的反函数?例如,如果我有 function def f(x): return x**2,Python/任何 Python 库函数中是否有一个函数可以执行此操作?或者这对计算机来说太难了,甚至无法解决?
我想删除sympy符号表达式中任何等于1的系数,例如:我想要1.0x**2,x**2有办法做到吗?另外,如果可能的话,可以舍入整数,2.0x**2例如2*x**2
我正在尝试制作一个 python proram 来查找导数和积分以及展示如何进行。到目前为止,我发现有一个integral_steps函数返回所使用的步骤,但我还没有找到等效的微分函数。
有谁知道是否有等效的?
如果没有,您对如何找到找到导数所需的步骤有什么想法吗?
如果我们知道变量满足某个方程,是否可以简化 SymPy 中的表达式?例如,在 Mathematica 中我们可以这样写:
Simplify[a+b-c, a+b==c]
Run Code Online (Sandbox Code Playgroud)
当然,在这种情况下,可以解决a并进行替换。然而,对于长表达式来说,进行全局替换可能没有意义。如果目标是产生尽可能最短的表达式,则可能需要对某些项应用替换,而其余项保持不变,或者求解b代替a。
我认为sympy.assumptions模块不能对多个变量相互施加限制。Simplify[expr, assum]是否可以在 SymPy 中以任何其他方式实现 Mathematica 的功能?
或者还有其他开源项目可以做这样的事情吗?
我对这个词还是个新手,今天我想尝试在 Jupyter Notebook 上做一些数学题。我想解决这个功能: 在此处输入图像描述
我正在使用 jupyter 笔记本以及 sympy、numpy 和 matplotlib 等模块,但我不知道如何表示 x!=-y。
例如,如果函数不是 x!=-y,而是 x>y 我会这样做:
x, y = sp.symbols('x y', real=True)
g = sp.Piecewise(((x*y**4 - x**4*y)/(x**3+y**3), (x>y)), (0, True))
G = sp.Lambda((x,y), g)
display(G(x,y))
Run Code Online (Sandbox Code Playgroud)
但是如果我输入 x!=-y ,它不起作用(它不显示整个分段函数,它只显示分段函数的“第一部分”),我不知道如何解决它。
谢谢!!!
编辑:按照 Wrzlprmft 的建议添加assert,这不会引发任何异常。
a**b在以下情况下,我必须编写具有许多类型表达式的代码
import sympy as sp
a, b = sp.symbols('a,b', real=True, positive=True)
expr1 = a**b
expr2 = pow(a,b)
assert expr1 is expr2
Run Code Online (Sandbox Code Playgroud)
a**b和之间的预期/可能差异是什么pow(a,b)?
(例如,当简化、收集等表达式时)。
在任何情况下我都应该预料到可能出现的错误结果吗?
到目前为止,我还没有找到。
我认为我不会使用第三个参数,pow因为我的基数是实数(指数通常是整数或一位或两位整数之间的比率),所以这个或这个不相关。
this或this 的重点是与 的比较math.pow,尽管有些答案也包括两者**和pow的性能比较,显示出细微的差异。没有一个问题/答案涉及sympy.
如果math.pow在sympy.Pow任何情况下提供任何优势,我欢迎澄清。我预计我不会执行繁重的计算,因此微小的性能差异可能不会影响我的用例。