用Python解决数学方程的最简单方法

27

我想解决一组线性或二次方程。虽然我没有特定的问题,但我经常遇到这种情况。

使用与Mathematica类似的网站wolframalpha.com来解决它们非常简单。但这并不能像在iPython shell中那样提供舒适和便利。

有没有一个简单的库可以在python shell中处理线性和二次方程?

就个人而言,我觉得使用卡西欧991 MS科学计算器非常方便。我知道如何设置变量,解决方程等等。我希望能够从ipython shell中使用这样的工具。我很惊讶竟然没有找到这样的库。Sage并没有给我留下足够深刻的印象;也许我错过了什么。


你是否了解Maxima语言和WxMaxima界面?我发现它比IPython更加舒适。 - Foad S. Farimani
16个回答

0

嗯,我刚好偶然间搜到了这个页面。我看到许多关于这个和那个软件工具的建议,但是是否有任何工具实际上提供答案呢?实际的答案是:

[a,b,c] = [200,375,425]

我如何得到这个答案的呢?通过使用Maxima编程语言编写了一个快速程序进行"暴力搜索"来找到它。由于我熟悉Maxima语言,所以只花了大约10分钟的时间编写。程序运行只用了几秒钟。以下是程序:

euler_solve():= block ( [ a, b, A, B, end: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(),按回车键,等待几秒钟,答案就会弹出。这种特定类型的问题非常简单,您可以使用任何通用编程语言来执行搜索。

2
[200, 375, 425] 是这组方程的一个潜在解,但是还有无限个解。[-499000, 999, 499001] 是另一个解。仅有一个数值解可能不是 OP 寻找的。 - Nate
这个答案与问题特定于Python,因此不相关。关于无限解的评论也是如此,因为这个问题所涉及的问题(欧拉计划9)有约束条件,并且将其解决方案明确限制为单个元组。 - anddam

0

尝试在Python中应用二分法以找到给定区间的根:

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..

0

这取决于您的需求:

如果您需要交互式图形界面,则Sage可能是最佳解决方案。

如果您想避免使用图形界面,但仍然想进行计算机代数运算,则Sympy或Maxima可能可以满足您的需求。(Sympy看起来非常有前途,但在能够替代Mathematica之前还有很长的路要走)。

如果您不需要符号代数,但需要一种处理矩阵、解决微分方程和最小化函数的方法,则Scipy或Octave是绝佳的起点。


0

我认为没有一种统一的方式可以同时处理线性和二次(或一般非线性)方程。对于线性系统,Python有与线性代数和矩阵包的绑定。非线性问题往往需要根据具体情况进行解决。


SAGE的maxima绑定可以轻松处理任何你投入其中的东西。 - Paul McMillan

0

-1

重新考虑后,我详细研究了Sage,并清楚地发现它是最好的免费数学软件。

它集成的一些不同的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

10
如果你用别人已经提供的答案来回答自己的问题,并且接着采纳了自己的答案,那么这是不礼貌的。相反,请采纳别人正确的答案,并在问题中编辑包含有用信息的内容,或在评论中回复。请注意不要改变原意。 - Paul McMillan
保罗,这些点并不是我或网站的主要驱动力,我认为。别再纠结于此了。人们来这里分享信息。 - lprsd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接