博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python 最小二乘 leastsq 函数实现 法线式 解决与x轴垂直问题
阅读量:4339 次
发布时间:2019-06-07

本文共 1089 字,大约阅读时间需要 3 分钟。

当使用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()

转载于:https://www.cnblogs.com/fly2wind/p/6844520.html

你可能感兴趣的文章
SpringMVC注解
查看>>
Spring 依赖注入
查看>>
数据结构——二叉树树的遍历理论与实现
查看>>
delphi AfterScrol
查看>>
软件外包,IT咨询和转型
查看>>
[MySQL] InnoDB三大特性之 - 插入缓冲
查看>>
Sphinx安装配置应用
查看>>
dns 域名解析
查看>>
nohup top & 问题: top: failed tty get
查看>>
详解ORACLE数据库的分区表
查看>>
Windows7下安装SQLServer2005过程详解
查看>>
reids基于订阅的聊天室
查看>>
[转载]php中的ssh2
查看>>
Centos发布java的war包后,无法访问发布的工程
查看>>
通过jquery.cookie.js实现记住用户名、密码登录功能
查看>>
HDU 4320 Arcane Numbers 1(质因子)
查看>>
[转帖]状态机的编码
查看>>
Android闪闪发光字体效果
查看>>
freeMarker(八)——程序开发指南之配置(Configuration)
查看>>
前端的书的推荐(二)
查看>>