我想解决一组方程,线性或有时是二次方程。我没有具体的问题,但经常,我经常遇到这种情况。
使用Mathematica的Web等价物wolframalpha.com来解决它们很简单。但这并不能提供iPython shell的舒适性和便利性。
是否有一个简单的库可以处理来自python shell的线性和二次方程式?
就我个人而言,我发现使用卡西欧991 MS科学计算器非常方便。我知道如何设置变量,求解方程式,并做很多事情。我希望这样的工具最好在ipython shell中使用。我很惊讶没有找到任何。圣人并没有给我留下足够的印象;也许我错过了一些东西。
答案 0 :(得分:46)
sympy正是您所寻找的。 p>
答案 1 :(得分:22)
你认为最好的答案是不可接受的。
您的问题是“我想要一个可以在Python中使用的免费计算机代数系统。”
答案是“SAGE做到了。”
你看过maxima / macsyma吗? SAGE为它提供绑定,这是更强大的免费绑定之一。
答案 2 :(得分:10)
以下是使用Python(通过Sage)解决原始问题的方法。这基本上澄清了Paul McMillan所说的话。
sage: a,b,c = var('a,b,c')
sage: solve([a+b+c==1000, a^2+b^2==c^2], a,b,c)
[[a == 1000*(r1 + sqrt(r1^2 + 2000*r1 - 1000000))/(r1 + sqrt(r1^2 + 2000*r1 - 1000000) + 1000), b == -1/2*r1 - 1/2*sqrt(r1^2 + 2000*r1 - 1000000) + 500, c == r1], [a == 1000*(r2 - sqrt(r2^2 + 2000*r2 - 1000000))/(r2 - sqrt(r2^2 + 2000*r2 - 1000000) + 1000), b == -1/2*r2 + 1/2*sqrt(r2^2 + 2000*r2 - 1000000) + 500, c == r2]]
答案 3 :(得分:7)
对于不精确的解决方案,请阅读linear programming和sequential quadratic optimization,然后搜索为您执行此类优化的Python库。
如果方程需要整数解,那么你应该为Python搜索Diophantine方程求解器。
请注意,使用Project Euler的简单求解器忽略了这一点。有趣和有教育意义的部分是学习如何使用原始方法自己解决它!
答案 4 :(得分:4)
你看过SciPy吗?
它在解决线性代数的教程中有一个例子:
http://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#solving-linear-system
答案 5 :(得分:4)
用于解决大规模非线性方程组(100万+)的免费网络服务是APMonitor.com。有一个浏览器界面和Python / MATLAB的API。 Python的API是一个脚本(apm.py),可以从apmonitor.com主页下载。将脚本加载到Python代码后,它就能够解决以下问题:
对于新用户,APM Python软件有一个Google Groups论坛,用户可以在其中发布问题。每两周举办一次网络研讨会,展示运营研究和工程中的优化问题。
以下是优化问题的示例(hs71.apm)。
Model
Variables
x[1] = 1, >=1, <=5
x[2] = 5, >=1, <=5
x[3] = 5, >=1, <=5
x[4] = 1, >=1, <=5
End Variables
Equations
x[1] * x[2] * x[3] * x[4] > 25
x[1]^2 + x[2]^2 + x[3]^2 + x[4]^2 = 40
minimize x[1] * x[4] * (x[1]+x[2]+x[3]) + x[3]
End Equations
End Model
使用以下Python脚本解决优化问题:
# Import
from apm import *
# Select server
server = 'http://xps.apmonitor.com'
# Application name
app = 'eqn'
# Clear previous application
apm(server,app,'clear all')
# Load model file
apm_load(server,app,'hs71.apm')
# Option to select solver (1=APOPT, 2=BPOPT, 3=IPOPT)
apm_option(server,app,'nlc.solver',3)
# Solve on APM server
solver_output = apm(server,app,'solve')
# Display solver output
print solver_output
# Retrieve results
results = apm_sol(server,app)
# Display results
print '--- Results of the Optimization Problem ---'
print results
# Display Results in Web Viewer
url = apm_var(server,app)
print "Opened Web Viewer: " + url
答案 6 :(得分:3)
a-1000!=0, b = (1000 (a-500))/(a-1000), c = (-a^2+1000 a-500000)/(a-1000)
在python中,使用sympy's solver module(注意它假设所有方程都设置为零):
>>> import sympy
>>> a, b, c = sympy.symbols('a, b, c')
>>> sympy.solve([a + b + c - 1000, a**2 + b**2 - c**2], b, c)
[(1000*(a - 500)/(a - 1000), (-a**2 + 1000*a - 500000)/(a - 1000))]
当然,a = 1000,因为a-1000是两个方程的分母。
答案 7 :(得分:2)
我刚刚开始使用GNU Scientific Library,但它是C库。看起来也有Python bindings。所以,值得一看。
答案 8 :(得分:1)
我会使用Octave,但我同意,Octave的语法并不是我所说的惊心动魄(而且文档总是让我感到困惑,而不是他们的帮助)。
答案 9 :(得分:0)
我认为没有统一的方法同时处理线性和二次(或一般非线性)方程。对于线性系统,python具有与线性代数和矩阵包的绑定。非线性问题倾向于逐案解决。
答案 10 :(得分:0)
这取决于您的需求:
如果你想要一个交互式图形界面,那么sage可能是最好的解决方案。
如果您想避免使用图形界面,但仍想进行计算机代数,那么sympy或maxima可能会满足您的需求。 (同情看起来很有希望,但在取代mathematica之前还有很长的路要走。)
如果你真的不需要符号algrebra,但你需要一种用矩阵编程的方法,求解微分方程,并最小化函数,那么scipy或octave是极好的起点。
答案 11 :(得分:0)
答案 12 :(得分:0)
好吧,我只是偶然用Google搜索了这个页面。我看到很多关于这个和那个软件工具的建议,但是任何工具实际上都提供了答案吗?实际的答案是:
[a,b,c] = [200,375,425]
我是怎么得到的?通过用Maxima编程语言编写快速程序,通过&#34;蛮力&#34;搜索。写作只花了大约10分钟,看我是如何熟悉Maxima语言的。程序运行花了几秒钟。这是程序:
euler_solve():=阻止 ( [a,b,A,B,结束:1000],
for a thru end do
(
for b thru end do
(
c: 1000 -a -b,
if c < 0 then
b:end
else if a^2 + b^2 = c^2 then
(
A:a,
B:b,
a:end,
b:end
)
)
),
return( [A,B,c])
);
您可以将上面的代码剪切并粘贴到wxMaxima用户界面中,我在Ubuntu而不是MS Windows下运行。然后你只需输入函数名:euler_solve(),点击返回,等待几秒钟,然后弹出答案。这种特殊问题非常简单,您可以使用任何通用编程语言进行搜索。
答案 13 :(得分:0)
尝试在py中应用Bisection method以找到给定间隔的根:
def f(x, rhs): # f(x) = e^x
return math.e ** x - rhs # e^x = rhs -> e^x - rhs = 0
def solve(rhs, a = 0, b = 100, tol = 1e-3):
while True:
c = (a + b) / 2.0
if(f(a, rhs) * f(c, rhs) > 0):
a = c
else:
b = c
if(abs(f(c, rhs)) < tol):
break
return c
y = math.e ** 3.75 # x = 3.75
print(solve(y)) # 3.7499..
答案 14 :(得分:-1)
再想一想,我详细介绍了圣人,显然是最好的数学免费软件。
只是一些不同的python数学相关库,它集成非常棒。
Sage中包含的数学包:
Algebra GAP, Maxima, Singular
Algebraic Geometry Singular
Arbitrary Precision
Arithmetic GMP, MPFR, MPFI, NTL
Arithmetic Geometry PARI, NTL,
mwrank, ecm Calculus Maxima, SymPy,
GiNaC Combinatorics Symmetrica,
Sage-Combinat Linear Algebra Linbox,
IML Graph Theory NetworkX Group
Theory GAP Numerical
computation GSL, SciPy, NumPy,
ATLAS
Sage中包含的其他包:
Command line IPython Database ZODB,
Python Pickles, SQLite Graphical
Interface Sage Notebook, jsmath
Graphics Matplotlib, Tachyon3d, GD,
Jmol Interactive
programming language Python
Networking Twisted