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 · 6412 次点击
    这是一个创建于 2441 天前的主题,其中的信息可能已经有所发展或是发生改变。
    请定义一个函数 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   ·   实用小工具   ·   1138 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:42 · PVG 07:42 · LAX 15:42 · JFK 18:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.