十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个其实是数值计算的问题,最好的办法是人工计算出反函数x = _f(y),退而求其次的办法是使用近似逼近的方法,有名的方法是牛顿迭代法(具体请自行搜索吧)
创新互联秉承实现全网价值营销的理念,以专业定制企业官网,成都网站设计、成都网站制作、外贸网站建设,小程序制作,网页设计制作,手机网站开发,营销型网站建设帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。
任意波形的生成 (geneartion of arbitrary waveform) 在商业,军事等领域都有着重要的应用,诸如空间光通信 (free-space optics communication), 高速信号处理 (high-speed signal processing),雷达 (radar) 等。在任意波形生成后, 如何评估生成的任意波形 成为另外一个重要的话题。
假设有一组实验数据,已知他们之间的函数关系:y=f(x),通过这些信息,需要确定函数中的一些参数项。例如,f 是一个线型函数 f(x)=k*x+b,那么参数 k 和 b 就是需要确定的值。如果这些参数用 p 表示的话,那么就需要找到一组 p 值使得如下公式中的 S 函数最小:
这种算法被称之为 最小二乘拟合 (least-square fitting)。scipy 中的子函数库 optimize 已经提供实现最小二乘拟合算法的函数 leastsq 。下面是 leastsq 函数导入的方式:
scipy.optimize.leastsq 使用方法
在 Python科学计算——Numpy.genfromtxt 一文中,使用 numpy.genfromtxt 对数字示波器采集的三角波数据导入进行了介绍,今天,就以 4GHz三角波 波形的拟合为案例介绍任意波形的拟合方法。
在 Python科学计算——如何构建模型? 一文中,讨论了如何构建三角波模型。在标准三角波波形的基础上添加了 横向,纵向的平移和伸缩特征参数 ,最后添加了 噪声参数 模拟了三角波幅度参差不齐的随机性特征。但在波形拟合时,并不是所有的特征参数都要纳入考量,例如,噪声参数应是 波形生成系统 的固有特征,正因为它的存在使得产生的波形存在瑕疵,因此,在进行波形拟合并评估时,不应将噪声参数纳入考量,最终模型如下:
在调用 scipy.optimize.leastsq 函数时,需要构建误差函数:
有时候,为了使图片有更好的效果,需要对数据进行一些处理:
leastsq 调用方式如下:
合理的设置 p0 可以减少程序运行时间,因此,可以在运行一次程序后,用拟合后的相应数据对 p0 进行修正。
在对波形进行拟合后,调用 pylab 对拟合前后的数据进行可视化:
均方根误差 (root mean square error) 是一个很好的评判标准,它是观测值与真值偏差的平方和观测次数n比值的平方根,在实际测量中,观测次数n总是有限的,真值只能用最可信赖(最佳)值来代替.方根误差对一组测量中的特大或特小误差反映非常敏感,所以,均方根误差能够很好地反映出测量的精密度。
RMSE 用程序实现如下:
拟合效果,模型参数输出:
leastsq 函数适用于任何波形的拟合,下面就来介绍一些常用的其他波形:
一般的正态分布可以通过标准正态分布配合数学期望向量和协方差矩阵得到。如下代码,可以得到满足一维和二维正态分布的样本。希望有用,如有错误,欢迎指正!
OpenCV曲线拟合与圆拟合
使用OpenCV做图像处理与分析的时候,经常会遇到需要进行曲线拟合与圆拟合的场景,很多OpenCV开发者对此却是一筹莫展,其实OpenCV中是有现成的函数来实现圆拟合与直线拟合的,而且还会告诉你拟合的圆的半径是多少,简直是超级方便,另外一个常用到的场景就是曲线拟合,常见的是基于多项式拟合,可以根据设定的多项式幂次生成多项式方程,然后根据方程进行一系列的点生成,形成完整的曲线,这个车道线检测,轮廓曲线拟合等场景下特别有用。下面就通过两个简单的例子来分别学习一下曲线拟合与圆拟合的应用。
一:曲线拟合与应用
基于Numpy包的polyfit函数实现,其支持的三个参数分别是x点集合、y点集合,以及多项式的幂次。得到多项式方程以后,就可以完整拟合曲线,图中有如下四个点:

调用polyfit生成的二阶多项式如下:

拟合结果如下:

使用三阶多项式拟合,调用polyfit生成的多项式方程如下:

生成的拟合曲线如下:

使用polyfit进行曲线拟合时候需要注意的是,多项式的幂次最大是数据点数目N - 1幂次多项式,比如有4个点,最多生成3阶多项式拟合。上述演示的完整代码实现如下:
def circle_fitness_demo():
image = np.zeros((400, 400, 3), dtype=np.uint8)
x = np.array([30, 50, 100, 120])
y = np.array([100, 150, 240, 200])
for i in range(len(x)):
cv.circle(image, (x[i], y[i]), 3, (255, 0, 0), -1, 8, 0)
cv.imwrite("D:/curve.png", image)
poly = np.poly1d(np.polyfit(x, y, 3))
print(poly)
for t in range(30, 250, 1):
y_ = np.int(poly(t))
cv.circle(image, (t, y_), 1, (0, 0, 255), 1, 8, 0)
cv.imshow("fit curve", image)
cv.imwrite("D:/fitcurve.png", image)
二:圆拟合与应用
圆的拟合是基于轮廓发现的结果,对发现的近似圆的轮廓,通过圆拟合可以得到比较好的显示效果,轮廓发现与拟合的API分别为findContours与fitEllipse,
有图像如下:

使用轮廓发现与圆拟合处理结果如下:

红色表示拟合的圆,蓝色是圆的中心位置
上述完整的演示代码如下:
def circle_fitness_demo():
src = cv.imread("D:/javaopencv/c2.png")
cv.imshow("input", src)
src = cv.GaussianBlur(src, (3, 3), 0)
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)
cv.imshow("binary", binary)
image, contours, hierachy = cv.findContours(binary, cv.RETR_EXTERNAL, cv.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
rrt = cv.fitEllipse(contours[i])
cv.ellipse(src, rrt, (0, 0, 255), 2, cv.LINE_AA)
x, y = rrt[0]
cv.circle(src, (np.int(x), np.int(y)), 4, (255, 0, 0), -1, 8, 0)
cv.imshow("fit circle", src)
cv.imwrite("D:/fitcircle.png", src)
吾心信其可行,则移山填海之难,终有成功之日;
吾心信其不可行,则反掌折枝之易,亦无收效之期也
acos()方法返回x的反余弦值,以弧度表示。
以下是acos()方法的语法:acos(x)
注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数。x -- 这必须是在范围内的数字值-1到1,如果x大于1,则它会产生一个错误。
扩展资料
python运行的两种方式
1、命令行:python +需要执行的代码
特点:会立即看到效果,用于代码调试,写到内存中,不会永久保存
2、写到文件里面:python +执行文件的位置
特点:可以永久保存。
过程:
1、启动python解释器
2、将内容从硬盘读取到内存中
3、执行python代码
(再次强调:程序在未运行前跟普通文件无异,只有程序在运行时,文件内所写的字符才有特定的语法意义)