使用Python解决一对非线性方程的最佳方法是什么?(Numpy,Scipy或Sympy)
例如:
- x + y ^ 2 = 4
- e ^ x + xy = 3
解决上述配对的代码片段会很棒
我试过pprint,print前者只打印Unicode版本,后者不做漂亮的打印.
from sympy import symbols, Function
import sympy.functions as sym
from sympy import init_printing
init_printing(use_latex=True)
from sympy import pprint
from sympy import Symbol
x = Symbol('x')
# If a cell contains only the following, it will render perfectly.
(pi + x)**2
# However I would like to control what to print in a function,
# so that multiple expressions can be printed from a single notebook cell.
pprint((pi + x)**2)
Run Code Online (Sandbox Code Playgroud) 我正在试验同情,我遇到了一个我无法解决的问题.
使用scipy我可以编写一个表达式并为其计算x值的数组,如下所示:
import scipy
xvals = scipy.arange(-100,100,0.1)
f = lambda x: x**2
f(xvals)
Run Code Online (Sandbox Code Playgroud)
使用sympy我可以写相同的表达式如下:
import sympy
x = sympy.symbols('x')
g = x**2
Run Code Online (Sandbox Code Playgroud)
我可以通过执行以下操作来评估此表达式的单个值:
g.evalf(subs={x:10})
Run Code Online (Sandbox Code Playgroud)
但是我无法弄清楚如何评估x值的数组,就像我用scipy做的那样.我该怎么做?
您可以使用coeff()获得特定术语的系数;
x, a = symbols("x, a")
expr = 3 + x + x**2 + a*x*2
expr.coeff(x)
# 2*a + 1
Run Code Online (Sandbox Code Playgroud)
在这里,我想提取x,x**2(等等)的所有系数,如;
# for example
expr.coefficients(x)
# want {1: 3, x: (2*a + 1), x**2: 1}
Run Code Online (Sandbox Code Playgroud)
有一个方法as_coefficients_dict(),但它似乎不能按我想要的方式工作;
expr.as_coefficients_dict()
# {1: 3, x: 1, x**2: 1, a*x: 2}
expr.collect(x).as_coefficients_dict()
# {1: 3, x**2: 1, x*(2*a + 1): 1}
Run Code Online (Sandbox Code Playgroud) 我想在Matplotlib中绘制隐式方程(形式为f(x,y)= g(x,y),例如X ^ y = y ^ x).这可能吗?
例如,如果我跑
import sympy
x, y, z = sympy.symbols('x:z')
f = sympy.exp(x + y) - sympy.sqrt(z)
Run Code Online (Sandbox Code Playgroud)
是否有任何方法f可以用来获取sympy.Symbol表达式包含的对象的列表或元组?我宁愿不必srepr(f)向下解析或解析f.args.
在这种情况下,g.args[0].args[1].args[0]给我Symbol("z"),虽然g.args[1].args[0].args给我元组(Symbol("x"), Symbol("y")),但显然这些是特定于表达式.
在无偏硬币翻转中,H或T发生50%的次数.
但我想模拟硬币给出概率为'p'的H和带有概率'(1-p)'的T.
这样的事情:
def flip(p):
'''this function return H with probability p'''
# do something
return result
>> [flip(0.8) for i in xrange(10)]
[H,H,T,H,H,H,T,H,H,H]
Run Code Online (Sandbox Code Playgroud) 当绘制具有不连续性/渐近线/奇点/任何图形的图形时,是否有任何自动方法可以防止Matplotlib在"中断"中"加入点"?(请参阅下面的代码/图片).
我读到Sage有一个看上去很好的[detect_poles]工具,但我真的希望它与Matplotlib一起使用.
import matplotlib.pyplot as plt
import numpy as np
from sympy import sympify, lambdify
from sympy.abc import x
fig = plt.figure(1)
ax = fig.add_subplot(111)
# set up axis
ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
# setup x and y ranges and precision
xx = np.arange(-0.5,5.5,0.01)
# draw my curve
myfunction=sympify(1/(x-2))
mylambdifiedfunction=lambdify(x,myfunction,'numpy')
ax.plot(xx, mylambdifiedfunction(xx),zorder=100,linewidth=3,color='red')
#set bounds
ax.set_xbound(-1,6)
ax.set_ybound(-4,4)
plt.show()
Run Code Online (Sandbox Code Playgroud)

对不起,我对sympy和python很新.
我想解决以下欠定线性方程组:
x + y + z = 1
x + y + 2z = 3
Run Code Online (Sandbox Code Playgroud) python ×10
sympy ×10
equation ×2
math ×2
matplotlib ×2
numpy ×2
scipy ×2
algebra ×1
implicit ×1
jupyter ×1
pretty-print ×1
probability ×1
python-3.x ×1
random ×1
sage ×1