教你如何利用python进行数值分析

 更新时间:2021年06月07日 11:47:48   作者:zhshuai1  
今天教大家如何利用python进行数值分析,文中有非常详细的代码示例,对正在学习python的小伙伴们很有帮助,需要的朋友可以参考下

一、准备

噪声是在拟合过程中常用的干扰手段,常用的噪声:

1.统一分布 U(a,b)

f ( x ) = { 1 i f a ≤ x < b 0 o t h e r f(x)=\begin{cases}\begin{aligned}1&\quad if\quad a\le x<b \\ 0&\quad other\end{aligned}\end{cases} f(x)={10​ifa≤x<bother​​

import numpy as np
x=np.random.uniform(a,b,100) #产生长度为100的U(a,b)

2.正态分布N( μ \mu μ, σ 2 \sigma^2 σ2)

import numpy as np
x=np.random.normal(mu, sig, 100) #产生长度为100的N(mu, sqart(sig))

二、三次样条插值

def spline_fit():
	size = 20
    x = np.linspace(-10, 10, size)
    y = np.sin(x) + np.random.normal(0, 0.1, size)
    y2 = [0] * len(y)
    # for y_i in y:

    pp.plot(x, y)
    cs = CubicSpline(x, y)
    x2 = x = np.linspace(-10, 10, size * 100)
    pp.plot(x2, cs(x2))
    pp.show()

三、最小二乘拟合

def least_square():
    f = lambda p0, xx: p0[0] * np.sin(xx * p0[1]) + p0[2]
    LEN = 100
    x = np.linspace(-1, 1, LEN)
    y = x ** 2 + 5
    # 默认情况,param只会返回求得的参数和返回的错误码,1-4为成功,5-8为失败,如果想输出更多参数,可以指定full_out=1,可以看到出错原因和其他参数
    param = leastsq(lambda p0, xx, yy: f(p0, xx) - yy, (1, 1, 1), args=(x, y)) #初值的选择比较重要,如果选取不当,容易陷入局部最优
    print(param)
    pp.scatter(x, y)
    p0 = param[0]
    pp.plot(x, f(p0, x))
    pp.show()

最小二乘的初值选取非常重要,以下是三份完全相同的数据,虽然最后都收敛了,但是初值不同,得到了完全不同的拟合结果
初值为 ( 1 , 2 , 1 ) (1,2,1) (1,2,1)

初值为(1,2,1)

初值为 ( 1 , 1 , 1 ) (1,1,1) (1,1,1)

初值为(1,1,1)

初值为 ( 10 , 10 , 1 ) (10,10,1) (10,10,1)

初值为(10,10,1)

四、拉格朗日乘子法

def lagrange()
	from scipy.optimize import minimize
    import numpy as np
    e = 1e-10
    fun = lambda x: 8 * (x[0] * x[1] * x[2])  # f(x,y,z) =8 *x*y*z
    cons = ({'type': 'eq', 'fun': lambda x: x[0] ** 2 + x[1] ** 2 + x[2] ** 2 - 1},  # x^2 + y^2 + z^2=1
            {'type': 'ineq', 'fun': lambda x: x[0] - e},  # x>=e等价于 x > 0
            {'type': 'ineq', 'fun': lambda x: x[1] - e},
            {'type': 'ineq', 'fun': lambda x: x[2] - e}
            )
    x0 = np.array((1.0, 1.0, 1.0))  # 设置初始值
    res = minimize(fun, x0, method='SLSQP', constraints=cons)
    print('最大值:', res.fun)
    print('最优解:', res.x)
    print('迭代终止是否成功:', res.success)
    print('迭代终止原因:', res.message)

到此这篇关于教你如何利用python进行数值分析的文章就介绍到这了,更多相关python数值分析内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现的逻辑回归算法示例【附测试csv文件下载】

    Python实现的逻辑回归算法示例【附测试csv文件下载】

    这篇文章主要介绍了Python实现的逻辑回归算法,结合具体实例形式分析了Python逻辑回归算法相关实现技巧,需要的朋友可以参考下
    2018-12-12
  • Python检测网站链接是否已存在

    Python检测网站链接是否已存在

    Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过本文给大家介绍Python检测网站链接是否已存在的相关内容,需要的朋友一起学习吧
    2016-04-04
  • Python获取昨天、今天、明天开始、结束时间戳的方法

    Python获取昨天、今天、明天开始、结束时间戳的方法

    今天小编就为大家分享一篇Python获取昨天、今天、明天开始、结束时间戳的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06
  • Python日志模块logging的使用方法总结

    Python日志模块logging的使用方法总结

    这篇文章主要分享的是Python日志模块logging的使用方法总结,ogging模块默认级别是WARNING,意味着只会追踪该级别以上的事件,除非更改日志配置,想了解更多相关资料的小伙伴可以参考下面文章内容
    2022-05-05
  • Python openpyxl 插入折线图实例

    Python openpyxl 插入折线图实例

    这篇文章主要介绍了Python openpyxl 插入折线图实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python求算数平方根和约数的方法汇总

    Python求算数平方根和约数的方法汇总

    这篇文章主要介绍了 Python求算数平方根和约数的方法汇总的相关资料,需要的朋友可以参考下
    2016-03-03
  • 如何使用PyCharm将代码上传到GitHub上(图文详解)

    如何使用PyCharm将代码上传到GitHub上(图文详解)

    这篇文章主要介绍了如何使用PyCharm将代码上传到GitHub上(图文详解),文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • python实现音乐播放和下载小程序功能

    python实现音乐播放和下载小程序功能

    这篇文章主要介绍了python实现音乐播放和下载小程序功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Python常用正则函数使用方法详解

    Python常用正则函数使用方法详解

    Python中常用的正则表达式处理函数有re.match(),re.search(),re.sub(),re.split(),re.findall(),re.compile()今天为大家介绍这些函数的使用方法
    2021-10-10
  • 如何利用Python实现一个论文降重工具

    如何利用Python实现一个论文降重工具

    文章去重(或叫网页去重)是根据文章(或网页)的文字内容来判断多个文章之间是否重复,下面这篇文章主要给大家介绍了关于利用Python实现论文降重工具的相关资料,需要的朋友可以参考下
    2021-07-07

最新评论