python中leastsq函数的使用方法

leastsq作用:最小化一组方程的平方和。

参数设置:

  • func 误差函数
  • x0 初始化的参数
  • args 其他的额外参数

举个例子:

首先创建样本点

import numpy as np
import scipy as sp
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
x=[1,2,3,4]
y=[2,3,4,5]

拟合直线

def y_pre(p,x):
    f=np.poly1d(p)
    return f(x)

其中的np.polyld

f=np.poly1d([1,2,3])
 # x^2+2x+3
f(1)
"""
6
"""

误差函数

def error(p,x,y):
    return y-y_pre(p,x)

接下就简单了

p=[1,2]    # 值随便写
# y=w1*x+w2
res=leastsq(error,p,args=(x,y))
w1,w2=res[0]   # res[0]中就是wi的参数列表
"""
到这w1和w2就已经求出来了,下面是画图看一下
"""
x_=np.linspace(1,10,100)   # 等差数列,
y_p=w1*x_+w2               # 求出的拟合曲线
plt.scatter(x,y)           # 样本点
plt.plot(x_,y_p)           # 画拟合曲线

可以直接封装成函数

x=np.linspace(0,2,10)
y=np.sin(np.pi*x)
# 原始的样本
y_=[y + np.random.normal(0,0.1) for y in y]     # np.random.normal(loc,scale,size):正态分布的均值,正态分布的标准差,形状

# np.random.randn()   # 标准正态分布是以0为均数、以1为标准差的正态分布,记为N(0,1)

def fit(M=1):
    p=np.random.rand(M+1)   # 返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1)
    res=leastsq(error,p,args=(x,y))  # wi 的值
    x_point=np.linspace(0,2,100)  # 增加数据量为了画出的图平滑
    y_point=np.sin(np.pi*x_point) # 增加数据量为了画出的图平滑
    plt.plot(x_point,y_point,'r',label='原始')
    plt.plot(x_point,y_pre(res[0],x_point),'b',label='拟合')
    plt.scatter(x,y_)
    plt.legend()
fit(3)

你也可以输出一下中间的结果:

x=np.linspace(0,2,10)
y=np.sin(np.pi*x)
# 原始的样本
y_=[y + np.random.normal(0,0.1) for y in y]     # np.random.normal(loc,scale,size):正态分布的均值,正态分布的标准差,形状

# np.random.randn()   # 标准正态分布是以0为均数、以1为标准差的正态分布,记为N(0,1)

def fit(M=1):
    p=np.random.rand(M+1)   # 返回一个或一组服从“0~1”均匀分布的随机样本值。随机样本取值范围是[0,1)
    res=leastsq(error,p,args=(x,y))  # wi 的值
    x_point=np.linspace(0,2,100)
    y_point=np.sin(np.pi*x_point)
    plt.plot(x_point,y_point,'r',label='原始')
    plt.plot(x_point,y_pre(res[0],x_point),'b',label='拟合')
    print(res[0])
    plt.scatter(x,y_)
    plt.legend()
fit(3)

拟合的直线就是:

到此这篇关于python中leastsq函数的使用方法的文章就介绍到这了,更多相关leastsq函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python用fsolve、leastsq对非线性方程组求解

    背景: 实现用python的optimize库的fsolve对非线性方程组进行求解.可以看到这一个问题实际上还是一个优化问题,也可以用之前拟合函数的leastsq求解.下面用这两个方法进行对比: 代码: from scipy.optimize import fsolve,leastsq from math import sin,cos def f(x): x0 = float(x[0]) x1 = float(x[1]) x2 = float(x[2]) return [ 5*x1+3, 4*x

  • python中leastsq函数的使用方法

    leastsq作用:最小化一组方程的平方和. 参数设置: func 误差函数 x0 初始化的参数 args 其他的额外参数 举个例子: 首先创建样本点 import numpy as np import scipy as sp from scipy.optimize import leastsq import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] plt.rcParams['axes.unicode

  • Python中range函数的使用方法

    目录 1.range()函数是什么? 2.语法格式 3.报错问题 4.range()函数需要注意的 5.range对象是不可变序列 6.range函数实现逆序遍历 7.与列表list的使用 8.关于range函数小结 前言: 本篇基于Python3环境,Python2环境下的range会有所不同,但并不影响我们使用. 1.range()函数是什么? range()函数是python的内置函数,它能返回一系列连续添加的整数,能够生成一个列表对象. 大多数时常出如今for循环中,在for循环中可做为

  • python中map()函数的使用方法示例

    前言 在python里有一个函数map(),它有点高大上的感觉.本文将详细给大家介绍python中map()函数使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 或许你已经看过GOOGLE最挣钱的论文: "MapReduce: Simplified Data Processing on Large Clusters" Google的那篇MapReduce论文里说:Our abstraction is inspired by the map and redu

  • python中reduce()函数的使用方法示例

    前言 本文主要给大家介绍了关于python中reduce()函数使用的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: reduce()函数在库functools里,如果要使用它,要从这个库里导入.reduce函数与map函数有不一样地方,map操作是并行操作,reduce函数是把多个参数合并的操作,也就是从多个条件简化的结果,在计算机的算法里,大多数情况下,就是为了简单化.比如识别图像是否是一只猫,那么就是从众多的像素里提炼出来一个判断:是或否.可能是几百万个像素,就只

  • 在python中bool函数的取值方法

    bool是Boolean的缩写,只有真(True)和假(False)两种取值 bool函数只有一个参数,并根据这个参数的值返回真或者假. 1.当对数字使用bool函数时,0返回假(False),任何其他值都返回真. >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(21334) True 2.当对字符串使用bool函数时,对于没有值的字符串(也就是None或者空

  • python中round函数保留两位小数的方法

    在我们日常计算的过程中,如果计算出小数,对大量的被保留数据,采用四舍五入这种保留法的误差总和是最小的,能使被保留部分的与实际值差值不超过最后一位数量级的二分之一.四舍五入是一种精确度的保留法,是我们使用这种方法为基本保留法的原因.那在我们的python中如何四舍五入?如何保留小数?用round函数就可以. 1.round函数 python的内置函数,用于数字的四舍五入. 2.round 负数 四舍五入是围绕着0来计算的 示例 round(0.5) # 1.0 round(-0.5) #-1.0

  • python中lower函数实现方法及用法讲解

    之前小编介绍过python中将字符串小写字符转为大写的upper函数的使用方法(upper函数).有将小写转为大写的需要,那也有将大写转为小写的情况.本文主要介绍在python中可以将字符串大写自摸转换为小写字母的lower函数. 1.lower() 转换字符串中所有大写字符为小写 2.语法 str.lower() -> str 3.返回值 返回将字符串中的所有大写字母转换为小写字母的字符串 4.使用实例 #!/usr/bin/python3 str = "ABCDEFG" pr

  • python中zip()函数遍历多个列表方法

    在对列表的元素进行找寻时,会频繁的说到遍历的理念.对于复杂的遍历要求,如多个列表中查找就显然不适合用for循环.本篇所要带来的是zip() 函数的方法,能够对多个迭代器进行遍历.下面我们就python中zip的说明.语法.使用注意点进行讲解,然后带来遍历多个列表的实例. 1.说明 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表.(注:在python3中返回的是zip对象) 2.语法 zip(iterable, ...) # 其中 it

  • python中Genarator函数用法分析

    本文实例讲述了python中Genarator函数用法.分享给大家供大家参考.具体如下: Generator函数的定义与普通函数的定义没有什么区别,只是在函数体内使用yield生成数据项即可.Generator函数可以被for循环遍历,而且可以通过next()方法获得yield生成的数据项. def func(n): for i in range(n): yield i for i in func(3): print i r=func(3) print r.next() print r.next

  • Python中optionParser模块的使用方法实例教程

    本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: from optparse impo

随机推荐