请问可以用 Python 解方程式吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lukeshawn
V2EX    Python

请问可以用 Python 解方程式吗?

  •  
  •   lukeshawn 2018-04-17 12:31:35 +08:00 6790 次点击
    这是一个创建于 2740 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请定义一个函数 quadratic(a, b, c),接收 3 个参数,返回一元二次方程:

    ax2 + bx + c = 0

    的两个解。

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

    这个要怎么写,求解
    37 条回复    2018-04-18 11:59:28 +08:00
    yongzhong
        2
    yongzhong  
       2018-04-17 12:36:27 +08:00   1
    tensorflow 了解一下?
    EricXuu
        3
    EricXuu  
       2018-04-17 12:42:05 +08:00 via Android   1
    一元二次你就求根公式吧
    sympy 了解一下
    projectzoo
        4
    projectzoo  
       2018-04-17 12:45:56 +08:00
    @yongzhong #2 这也上 TF ?
    ranleng
        5
    ranleng  
       2018-04-17 12:46:25 +08:00 via Android
    不是有求 x 的公式嘛, #1 的连接里也有
    dacapoday
        6
    dacapoday  
       2018-04-17 12:47:52 +08:00
    这种还是 wolfram 方便些
    Zzde
        7
    Zzde  
       2018-04-17 12:49:22 +08:00 via iPhone
    @yongzhong #2 解放程都要上 tf 吗……门槛有点高
    Shaikh
        8
    Shaikh  
       2018-04-17 12:51:39 +08:00 via Android
    sagemath 可以,不知道算不算 Python
    wlwood
        9
    wlwood  
       2018-04-17 12:51:49 +08:00 via Android
    scipy 了解下
    ericls
        10
    ericls  
       2018-04-17 12:52:31 +08:00 via iPhone
    当然可以 还可以符号运算
    wlwood
        11
    wlwood  
       2018-04-17 12:52:56 +08:00 via Android
    numpy 了解下
    wplct
        12
    wplct  
       2018-04-17 12:56:08 +08:00
    xd314697475
        13
    xd314697475  
       2018-04-17 13:06:07 +08:00   1
    牛顿迭代法了解一下

    相关内容看大学数值计算方法
    goreliu
        14
    goreliu  
       2018-04-17 13:12:46 +08:00
    看了下 @EricXuu 说的 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
    locktionc
        15
    locktionc  
       2018-04-17 13:28:07 +08:00   1
    我很奇怪啊,楼上这些人把初中数学都忘记了吗?

    ```python
    import math
    x1 = (-b + math.sqrt(b ** 2 - 4 * a * c)) / 2 / a
    x2 = (-b - math.sqrt(b ** 2 - 4 * a * c)) / 2 / a
    ```
    XIVN1987
        16
    XIVN1987  
       2018-04-17 13:37:22 +08:00
    符号计算,推荐 sympy
    wnma3mz
        17
    wnma3mz  
       2018-04-17 13:39:57 +08:00 via Android
    首推 sympy,如果想不调包,就了解一下牛顿迭代法
    Xiaobaixiao
        18
    Xiaobaixiao  
       2018-04-17 13:43:52 +08:00   1
    给楼主两个建议:
    ① 换个入门教程
    ② 善用搜索

    def quadratic(a,b,c):
    if a == 0:
    print("二次项系数不能为:0")
    else:
    i = b**2-4*a*c
    if i > 0:
    x1 = (-b+i**0.5)/(2*a)
    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("该方程无实数根")
    XIVN1987
        19
    XIVN1987  
       2018-04-17 13:54:12 +08:00
    In [17]: import sympy as sy
    ...:
    ...: def quadratic(a, b, c):
    ...: Eq = sy.Eq(a*x**2+b*x+c, 0)
    ...: return sy.solve(Eq, x)
    ...:

    In [18]: quadratic(1, 2, 1)
    Out[18]: [-1]
    Jackeriss
        20
    Jackeriss  
       2018-04-17 14:23:40 +08:00
    这不是大一 C 语言的课后作业吗?
    anyclue
        21
    anyclue  
       2018-04-17 14:31:49 +08:00   1
    这是楼主看到廖雪峰 Python 教程里定义函数那一节最后的练习题问的,那边评论里都是答案,不懂可以搜索……
    按那个教程看到那里,那个练习题对新手来说,确实问的有点懵……
    楼上的人也都挺有意思的……
    est
        22
    est  
       2018-04-17 14:35:02 +08:00
    @anyclue 这个 66666。
    Joshua999
        23
    Joshua999  
       2018-04-17 14:45:32 +08:00
    有没有解一元 n 次的包
    goreliu
        24
    goreliu  
       2018-04-17 14:48:59 +08:00
    @Joshua999 用 sympy 可以,常见的方程式都能解。
    DevRoss
        25
    DevRoss  
       2018-04-17 14:49:54 +08:00 via Android
    线性代数了解一下
    zst
        26
    zst  
       2018-04-17 16:06:57 +08:00 via Android
    sympy 吧....不过感觉开个 MATLAB 或者 Mathematica 更方便
    virusdefender
        27
    virusdefender  
       2018-04-17 16:08:15 +08:00
    z3 也不错
    wcsjtu
        28
    wcsjtu  
       2018-04-17 16:29:27 +08:00
    这个不是有解析解么,直接代公式啊,o(1)的复杂度。。。。
    没有解析解的上牛顿迭代法啊,微分方程上龙格库塔啊,pde 的话,就当我没说。。。。。
    bwangel
        29
    bwangel  
       2018-04-17 16:41:08 +08:00
    jerry033
        30
    jerry033  
       2018-04-17 17:42:02 +08:00
    @locktionc 先做个判断,if b ** 2 - 4 * a * c > 0
    locktionc
        31
    locktionc  
       2018-04-17 17:59:01 +08:00
    @jerry033 是的。
    Len1133
        32
    Len1133  
       2018-04-17 18:15:29 +08:00
    数值计算了解一下,用任何语言解方程
    goreliu
        33
    goreliu  
       2018-04-17 18:21:16 +08:00
    @bwangel 这个应该只能解一次方程。
    guoli100
        34
    guoli100  
       2018-04-18 05:06:58 +08:00 via iPhone
    这个用 sympy 应该很方便吧。

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

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

    为什么楼上讲的都好复杂?
    ZoomQuiet
        35
    ZoomQuiet  
       2018-04-18 08:30:35 +08:00 via iPhone
    @dacapoday 是也乎 ()

    py 一样可调 wolframe 的~
    lukeshawn
        36
    lukeshawn  
    OP
       2018-04-18 11:31:39 +08:00
    @anyclue 我看到上面的回复更是一脸懵逼
    lukeshawn
        37
    lukeshawn  
    OP
       2018-04-18 11:59:28 +08:00
    我不明白廖雪锋的问题是什么,它是要我们求解 X 吗?我试了下评论里面的答案,没有一个是对的啊
    @anyclue
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2041 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 16:11 PVG 00:11 LAX 09:11 JFK 12:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86