• [python科学计算]sympy求方程数值解的方法


    Sympy是python中非常强大的符号运算库,可以以书写习惯表示数学表达式。下面介绍用Sympy求方程数值解的方法。
    下面代码全部在

    from sympy import *
    init_printing(use_unicode=True) # 按书写习惯输出
    

    下运行。

    数学表达式的输入

    首先声明符号

    x = symbols('x')
    

    即计算机中的变量x代表数学表达式中的x。在后文输出中所有的x会显示为x。如果x=symbols('x0'),则输入的方程中所有x将在输出中以x0表示。
    如果需要希腊字母

    l, r = symbol('lambda rho')
    

    l, r将分别以(lambda, ho)表示。可以在一个表达式中同时声明多个符号。
    或者使用var()声明:

    var('x')
    

    与上面等效。

    声明表达式

    f = (5/x)*(exp(x)-1)-exp(x)
    

    此时若输出f可以看到书写习惯的表达式。由于表达式在markdown下显示不正常,在此不放置示例。注意f的类型是class 'sympy.core.add.Add'

    (f(x)=0)数值解

    因为有的函数零点不止一个,因此在Sympy中解的输出为一个list。使用solve(表达式,自变量符号)可以解析地解方程:

    s, = solve(f, x)
    

    这里根据上面f的赋值,得到s为

    LambertW(-5e**-5)+5
    

    其中用了特殊函数表达。
    我们需要求这个结果的数值近似,则输出

    s.evalf()
    

    得到输出

    4.96511423174428
    

    就是方程(f(x)=0)的数值解。

    更多solve()的功能见Sympy documentation: http://docs.sympy.org/latest/tutorial/solvers.html

    求给定自变量(x)值时函数(f(x))的值 | 将表达式转化为函数

    f.evalf(subs = {x:4.96})
    

    得到(f(4.96))的数值

    0.141885450782171
    

    如果需要以计算机函数的形式定义函数f(x),则可以使用lambdify()进行转化:

    f_func = lambdify(x, f)
    

    之后可以调用

    f_func(4.96)
    

    输出

    0.141885450782
    

    利用这个方法可以测试方程的数值算法,如使用sympy接口写牛顿法等。

  • 相关阅读:
    DVWA--SQL Injection(SQL注入)
    DVWA--Insecure CAPTCHA(不安全的验证码)
    DVWA--File Upload(文件上传)+中国菜刀下载及使用
    DWVA--File Inclusion(文件包含)
    DVWA--CSRF(跨站请求伪造)
    DVWA--Command Injection(命令行注入)
    2020.08.06【省选B组】模拟 总结
    2020.08.05【省选B组】模拟 总结
    2020.08.04【省选B组】模拟 总结
    jzoj 5251. 【GDOI2018模拟8.11】决战
  • 原文地址:https://www.cnblogs.com/fnight/p/6015022.html
Copyright © 2020-2023  润新知