我正在编写一个函数来解决任意数量的联立方程.方程的数量由函数的一个参数设置,每个方程由许多符号构成 - 与方程一样多的符号.这意味着我不能简单地对方程式进行硬编码,甚至不需要将方程组合在一起所需的符号; 该函数需要能够处理任意数量的方程.所以,我的问题是,我如何生成符号列表?
我有一个可能的解决方案,但我的直觉告诉我,它不会非常有效.如果有更好的方法,请告诉我.
我是SymPy的新手,我仍然在摸索着.据我所知,符号需要用字符串定义.因此,我可以通过在字母上添加递增数字(例如't0','t1'等)来生成一系列字符串,将它们添加到列表中,然后使用这些字符串作为参数创建符号.这些符号本身将存储在列表中,并用于生成方程式.
def solveEquations(numEquations):
symbolNameList = []
symbolList = []
equationList = []
for i in range(numEquations):
name = 't' + str(i)
symbolNameList.append(name)
symbolList.append(Symbol(name))
for i in range(numEquations):
equation = 0
for sym in symbolList:
equation += sym ** i # Or whatever structure the equation needs
equationList.append(equation)
#Then go on to solve the equations...
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗,还是有更有效的方法?
我一直在尝试这几个小时.我想我不明白一个基本概念,这就是为什么到目前为止我无法回答这个问题.
我正在尝试的是实现一个简单的数学函数,如下所示:
f(x) = x**2 + 1
Run Code Online (Sandbox Code Playgroud)
之后我想得到那个功能.
我已经定义了符号和函数:
x = sympy.Symbol('x')
f = sympy.Function('f')(x)
Run Code Online (Sandbox Code Playgroud)
现在我正在努力为这个函数定义方程f(x).有点像f.exp("x**2 + 1")不起作用.
我也想知道在最终定义之后我怎么能打印出这个函数的控制台.
我想解析LaTeX公式并直接将它们用作SymPy表达式.换句话说,我需要的是类似于同情的东西:
from sympy import sympify
f = sympify('x^2 + sin(y) + 1/2')
print f
Run Code Online (Sandbox Code Playgroud)
但是这可以将LaTeX表达式(字符串)作为输入,例如:
f = latex_sympify('\frac{x}{1+x}')
Run Code Online (Sandbox Code Playgroud)
鉴于sympify能够将带有常规数学表达式的字符串转换为SymPy对象,如果有任何东西可以将LaTeX转换为常规数学表达式,我想这会有所作为 - 但我宁愿做所有事情在Python中.
任何建议将不胜感激.
我试图代表戒指;

其中theta是具有度数d的整数系数的monic不可约多项式f的根.
这个环是代数整数的子环,它本身就是该领域的一个子环;
我可以用sympy的AlgebraicField课程代表这个领域
Q_theta = sympy.polys.domains.AlgebraicField(QQ,theta)
Run Code Online (Sandbox Code Playgroud)
有没有办法以类似的方式表示上面的整数子环?
我在Python Sympy库中创建一个脚本,并尝试访问solveset()和linsolve()函数返回的结果.我的问题是这些函数返回的对象是有限集类型,我想自动选择一些结果,以便在其他方程中重新输入它.任何人都可以帮助我?
一个例子: 我创建了一个包含两个未知变量的方程列表:
>>> a1, a2 = symbols('a1, a2')
>>> eq2_1 = Eq(-3*a1/10 - 3*a2/20 + 1/12)
>>> eq2_2 = Eq(-3*a1/20 - 13*a2/105 + 1/20)
>>> lista = [eq2_1,eq2_2]
>>> str(lista)
[-3*a1/10 - 3*a2/20 + 1/12, -3*a1/20 - 13*a2/105 + 1/20]
Run Code Online (Sandbox Code Playgroud)
然后使用linsolve()方法解决它.
>>> a = linsolve(lista,a1,a2)
>>> a
{(71/369, 7/41)}
Run Code Online (Sandbox Code Playgroud)
结果是正确的,但我无法将这些结果输入变量.
我尝试了dics,list,tuples,indexing命令,但总是返回错误."Finiteset对象没有属性'命令'"
我需要在python中使用sympy计算下面的表达式?
exp = '(a+b)*40-(c-a)/0.5'
Run Code Online (Sandbox Code Playgroud)
在a=6,b=5,c=2这种情况下如何使用Python sympy计算表达式?请帮我.
我在Python 2中编写了以下程序来为我的数学问题集进行牛顿方法计算,虽然它完美地工作,但是出于我不知道的原因,当我最初在ipython中加载它时%run -i NewtonsMethodMultivariate.py,不会导入Python 3除法.我知道这是因为在加载我的Python程序后,输入x**(3/4)"1".手动导入新分区后,按预期x**(3/4)保留x**(3/4).为什么是这样?
# coding: utf-8
from __future__ import division
from sympy import symbols, Matrix, zeros
x, y = symbols('x y')
X = Matrix([[x],[y]])
tol = 1e-3
def roots(h,a):
def F(s):
return h.subs({x: s[0,0], y: s[1,0]})
def D(s):
return h.jacobian(X).subs({x: s[0,0], y: s[1,0]})
if F(a) == zeros((2,1)):
return a
else:
while (F(a)).norm() > tol:
a = a - ((D(a))**(-1))*F(a)
print a.evalf(10)
Run Code Online (Sandbox Code Playgroud)
我会使用Python 3来避免这个问题,但是我的Linux发行版只提供SymPy for Python 2.感谢任何人都能提供的帮助.
另外,如果有人想知道,我还没有为nxn Jacobians推广这个脚本,只需要在我的问题集中处理2x2.另外,我正在切换2x2零矩阵而不是使用命令,zeros(2,1) …
我一直在研究sympy和scipy,但是找不到或弄清楚如何求解耦合微分方程组(非线性,一阶).
那么有没有办法解决耦合微分方程?
方程的形式如下:
V11'(s) = -12*v12(s)**2
v22'(s) = 12*v12(s)**2
v12'(s) = 6*v11(s)*v12(s) - 6*v12(s)*v22(s) - 36*v12(s)
Run Code Online (Sandbox Code Playgroud)
初始条件为v11(s),v22(s),v12(s).
有没有办法检查两个表达式在数学上是否相等?我期望
tg(x)cos(x) == sin(x)输出True,但它输出False.有没有办法与同情进行这样的比较?另一个例子
(a+b)**2 == a**2 + 2*a*b + b**2令人惊讶地也是输出False.
我发现了一些类似的问题,但没有人提到这个问题.
我按下内部会发生什么Enter?
除了好奇之外,我的动机是要弄清楚当你发生什么时会发生什么
from sympy import *
Run Code Online (Sandbox Code Playgroud)
并输入一个表达式.它如何从Enter致电
__sympifyit_wrapper(a,b)
Run Code Online (Sandbox Code Playgroud)
在sympy.core.decorators?(这是我尝试检查评估时winpdb带给我的第一个地方.)我猜想有一些内置的eval函数可以正常调用,并且在导入sympy时会被覆盖?