Python中如何用sympy等库解方程式?

请定义一个函数 quadratic(a, b, c),接收 3 个参数,返回一元二次方程:

ax2 + bx + c = 0

的两个解。

这是让我们求 X 的解的意思吗

这个要怎么写,求解
Python中如何用sympy等库解方程式?

38 回复

用sympy解方程主要用solve()函数,处理符号计算很方便。下面是个具体例子:

from sympy import symbols, solve, Eq

# 定义符号变量
x, y = symbols('x y')

# 解单个方程:x^2 - 4 = 0
equation1 = x**2 - 4
solution1 = solve(equation1, x)
print(f"方程 x^2 - 4 = 0 的解: {solution1}")  # 输出: [-2, 2]

# 解方程组
equation2 = Eq(x + y, 5)  # x + y = 5
equation3 = Eq(x - y, 1)  # x - y = 1
solution2 = solve((equation2, equation3), (x, y))
print(f"方程组的解: {solution2}")  # 输出: {x: 3, y: 2}

# 解带参数的方程
a, b = symbols('a b')
equation4 = a*x + b - 0
solution3 = solve(equation4, x)
print(f"方程 a*x + b = 0 的解: {solution3}")  # 输出: [-b/a]

solve()第一个参数放方程(或方程组),第二个参数指定要解的变量。用Eq()创建等式更直观,当然直接写表达式x**2 - 4也行,默认等于0。

对于更复杂的方程,比如涉及三角函数、指数函数的,sympy也能处理:

from sympy import sin, exp

equation5 = sin(x) - 0.5
solution4 = solve(equation5, x)
print(f"sin(x) = 0.5 的解: {solution4}")

如果方程有多个解,solve会返回列表。解方程组时,变量和方程要匹配,不然会报错。

总结:用sympy的solve函数,配Eq创建等式。

tensorflow 了解一下?

一元二次你就求根公式吧
sympy 了解一下

#2 这也上 TF ?

不是有求 x 的公式嘛, #1 的连接里也有

这种还是 wolfram 方便些

#2 解放程都要上 tf 吗……门槛有点高

sagemath 可以,不知道算不算 Python

scipy 了解下

当然可以 还可以符号运算

numpy 了解下

牛顿迭代法了解一下

相关内容看大学数值计算方法

看了下 说的 sympy,感觉挺方便的,比如解 5x2 + 3x = 1:

>>> from sympy import
>>> x = symbols(‘x’)
>>> solveset(Eq(5
x**2 + 3*x, 1), x)
{-3/10 + sqrt(29)/10, -sqrt(29)/10 - 3/10}

>>> float(a.args[0])
0.2385164807134504
>>> float(a.args[1])
-0.8385164807134504

我很奇怪啊,楼上这些人把初中数学都忘记了吗?

python<br>import math<br>x1 = (-b + math.sqrt(b ** 2 - 4 * a * c)) / 2 / a<br>x2 = (-b - math.sqrt(b ** 2 - 4 * a * c)) / 2 / a<br>

符号计算,推荐 sympy

首推 sympy,如果想不调包,就了解一下牛顿迭代法

给楼主两个建议:
① 换个入门教程
② 善用搜索

def quadratic(a,b,c):
if a == 0:
print(“二次项系数不能为:0”)
else:
i = b2-4ac
if i > 0:
x1 = (-b+i
0.5)/(2a)
x2 = (-b-i**0.5)/(2
a)
print(“x1 的值为:{0},x2 的值为:{1}”.format(x1,x2))
elif i == 0:
x1 = (-b+math.sqrt(i))/2
print(“x1,x2 的值均为:{0}”.format(x1))
elif i < 0:
print(“该方程无实数根”)

In [17]: import sympy as sy
…:
…: def quadratic(a, b, c):
…: Eq = sy.Eq(ax**2+bx+c, 0)
…: return sy.solve(Eq, x)
…:

In [18]: quadratic(1, 2, 1)
Out[18]: [-1]

这不是大一 C 语言的课后作业吗?

这是楼主看到廖雪峰 Python 教程里定义函数那一节最后的练习题问的,那边评论里都是答案,不懂可以搜索……
按那个教程看到那里,那个练习题对新手来说,确实问的有点懵……
楼上的人也都挺有意思的……

这个 66666。

有没有解一元 n 次的包

用 sympy 可以,常见的方程式都能解。

线性代数了解一下

sympy 吧…不过感觉开个 MATLAB 或者 Mathematica 更方便😂

z3 也不错

这个不是有解析解么,直接代公式啊,o(1)的复杂度。。。。
没有解析解的上牛顿迭代法啊,微分方程上龙格库塔啊,pde 的话,就当我没说。。。。。

先做个判断,if b ** 2 - 4 * a * c > 0

数值计算了解一下,用任何语言解方程

这个应该只能解一次方程。

这个用 sympy 应该很方便吧。

一元二次方程不是有标准的求根公式吗?
x = (-b ∓ √(b^2 - 4ac)) / 2a

且可以通过根的判别式∆ = b^2 -4ac 来判断方程有几个解,∆ > 0 有两个解,∆ = 0 有一个解,∆ < 0 无解。

为什么楼上讲的都好复杂?

是也乎 ╮(╯▽╰)╭

py 一样可调 wolframe 的~

我看到上面的回复更是一脸懵逼

我不明白廖雪锋的问题是什么,它是要我们求解 X 吗?我试了下评论里面的答案,没有一个是对的啊

回到顶部