python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题

当使用y=kx+b时,与x轴垂直的直线无法计算。因此使用法线式ysin(theta)+xcos(theta) = dist。貌似这么用有点复杂了,直接使用ax+by=1不知道能不能计算,未测试。

  1. # 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html
  2. ### 最小二乘法 python leastsq###
  3. import numpy as np
  4. import math
  5. from scipy.optimize import leastsq
  6. ###采样点(Xi,Yi)###
  7. Xi=np.array([-1,-1])
  8. Yi=np.array([0,10])
  9. # p是个数组,表示所有参数!!!
  10. ### 定义误差函数,拟合y=kx+b,p[0]表示k,p[1]表示b
  11. ### 法线式 y*sin(theta)+x*cos(theta) = dist
  12. def error(p,x,y):
  13. return y*math.sin(p[0])+x*math.cos(p[0])-p[1] #x、y都是列表,故返回值也是个列表
  14. ###主函数从此开始###
  15. # 可能是使用梯度下降法而非矩阵运算,因此需要给定初始参数p0
  16. p0=[0,1]
  17. Para=leastsq(error,p0,args=(Xi,Yi)) #把error函数中除了p以外的参数打包到args中
  18. theta = Para[0][0]
  19. dist = Para[0][1]
  20. print("theta=",theta,‘\n‘,"dist=",dist)
  21. ###绘图,看拟合效果###
  22. import matplotlib.pyplot as plt
  23. plt.axis([-10,10,-10,10])
  24. plt.scatter(Xi,Yi,color="red",label="Sample Point",linewidth=3) #画样本点
  25. if theta != 0:
  26. x=np.linspace(-10,10,10)
  27. y=dist/math.sin(theta)-x/math.tan(theta)
  28. else:
  29. x = dist
  30. y = np.linspace(-10,10,10)
  31. plt.plot(x,y,color="orange",label="Fitting Line",linewidth=2) #画拟合直线
  32. plt.legend()
  33. plt.show()

From WizNote

时间: 2024-10-11 07:59:56

python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题的相关文章

python 最小二乘 leastsq 函数实现

代码修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html 网上百度了一下,主要是两个例子,一个利用了多项式函数,一个就是这个.有些细节没看懂,主要是忽略了p是个参数的数组而非一个数(Python基础问题),纠结完加上注释做个笔记 # 修改自 http://www.cnblogs.com/NanShan2016/p/5493429.html ### 最小二乘法 python leastsq### import numpy as np from

Python闲谈(二)聊聊最小二乘法以及leastsq函数

1 最小二乘法概述 自从开始做毕设以来,发现自己无时无刻不在接触最小二乘法.从求解线性透视图中的消失点,m元n次函数的拟合,包括后来学到的神经网络,其思想归根结底全都是最小二乘法. 1-1 “多线→一点”视角与“多点→一线”视角 最小二乘法非常简单,我把它分成两种视角描述: (1)已知多条近似交汇于同一个点的直线,想求解出一个近似交点:寻找到一个距离所有直线距离平方和最小的点,该点即最小二乘解: (2)已知多个近似分布于同一直线上的点,想拟合出一个直线方程:设该直线方程为y=kx+b,调整参数k

python基础教程函数参数

python里有很多的内置函数给我们的工作带来了很多发便利,在我们实现某些功能或者优化代码的时候,可以自己定义一个函数,同时我们在定义一个类的时候也会用到函数的一些知识去构造一个方法,这里就涉及到一些关于函数的基础知识和函数传参的知识. 一.函数的相关介绍 1.函数定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 函数特性: 减少重复代码 使程序变的可扩展 使程序变得易维护 2.函数的定义示例 定义一个函数要使用def语句,依次写出函数名.括

由Python的super()函数想到的

python-super *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* BLOCKS =============================================================================*/ p, blockquote, ul, ol, dl, table, pre { margin: 15px

Python 动态创建函数【转】

知乎上也有相似的问题 偶然碰到一个问题,初想是通过动态创建Python函数的方式来解决,于是调研了动态创建Python函数的方法. 定义lambda函数 在Python中定义lambda函数的写法很简单, func = lambda: "foobar" 可以认为lambda函数是最常用的一种方式. 定义局部函数 Python中函数可以在代码块中进行定义,比如decorator就是通过这种方式实现的, def decorator(func): def _(*args, **kwargs)

Python基础之函数,递归。

一.数学定义的函数与python中的函数 - 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变量,y是x的函数.自变量x的取值范围叫做这个函数的定义域 - python中函数定义:函数是逻辑结构化和过程化的一种编程方法. 二. 为何使用函数 1.解决代码重用 2.保持一致性,易维护 3.可扩展性 三. 函数参数 1.形参:形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分

python——内置函数和匿名函数

内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这些函数有些我们已经用过了,有些我们还没用到过,还有一些是被封印了,必须等我们学了新知识才能解开封印的.那今天我们就一起来认识一下python的内置函数.这么多函数,我们该从何学起呢?     Built-in Functions     abs() dict() help() min() setat

python高级之函数

python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低...并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常出现的代码进行封装,这样就可以在任何需要调用这段代码的地方调用这个函数就行了. 函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其

Python内置函数之filter map reduce

Python内置函数之filter map reduce 2013-06-04 Posted by yeho Python内置了一些非常有趣.有用的函数,如:filter.map.reduce,都是对一个集合进行处理,filter很容易理解用于过滤,map用于映射,reduce用于归并. 是Python列表方法的三架马车.1. filter函数的功能相当于过滤器.调用一个布尔函数bool_func来迭代遍历每个seq中的元素:返回一个使bool_seq返回值为true的元素的序列. >>>