牛顿迭代法在求解步进电机在不同脉冲对应的时刻的用处
2015-03-08 22:57
260 查看
前段时间研究步进电机的加减速(S曲线)控制,需要求出电机在不同脉冲对应的时刻值。
需要求出电机在1,2,3....N个时刻的时刻 t 的值,公式如下:
N( t) = ( f 0 + C) t + τC (exp(-t*τ) - 1) (1)
变形为f(t) = ( f 0 + C) t + τC (exp(-t*τ) - 1) - N,需要求出N为不同值 f(t) = 0对应的 t 值 N 可以为0,1,2,3......(2k+1),也可以是0,2,4,6......(2K)。
显然人工笔算不太现实,由此想到了牛顿迭代。
证明知(1)式收敛,满足牛顿迭代条件。
python代码如下:
当然其他编程语言也可实现,例如C。
需要求出电机在1,2,3....N个时刻的时刻 t 的值,公式如下:
N( t) = ( f 0 + C) t + τC (exp(-t*τ) - 1) (1)
变形为f(t) = ( f 0 + C) t + τC (exp(-t*τ) - 1) - N,需要求出N为不同值 f(t) = 0对应的 t 值 N 可以为0,1,2,3......(2k+1),也可以是0,2,4,6......(2K)。
显然人工笔算不太现实,由此想到了牛顿迭代。
证明知(1)式收敛,满足牛顿迭代条件。
python代码如下:
# -*- coding: cp936 -*- import math tao = 0.00050 #加速时间常数 f0 = 50.0 #50 Hz fm = 150000.0 #50 KHz N = 1 Datanum = 200 table = [0.0] timevalue = [0.0] frequency = [0.0] def f(x): return (f0+fm)*x + tao*fm*(math.exp(-x/tao) - 1.0) - N def fd(x): return f0 + fm*(1.0 - math.exp(-x/tao)) def newtonMethod(k,assum): time = k x = assum Next = 0 A = f(x) B = fd(x) #print('A = ' + str(A) + ',B = ' + str(B) + ',time = ' + str(time)) if f(x) == 0.000000000001: return time,x else: Next = x - A/B #print('Next x = '+ str(Next)) #if A == f(Next): if math.fabs(Next - x) < 0.000000000001: #if math.fabs(f(Next)) < 0.000000000001: #print('Meet f(x) = 0,x = ' + str(Next))#设置迭代跳出条件,同时输出满足f(x) = 0的x值 table.append(x)#将时刻值保存在列表里 frequency.append(round(1/(table - table[N-1]),2))#每个时刻对应的频率,保留小数点后两位 timevalue.append(int(80000000*(table - table[N-1])+0.5))#求出每个脉冲的定时值,转化为整型数 else: return newtonMethod(k+1,Next) for N in range(1,Datanum+1,1): newtonMethod(0,0.00001) print ("不同脉冲对应的时刻值:") print table[1:Datanum+1] print ("不同脉冲对应的频率值:") print frequency[1:Datanum+1] print ("不同脉冲对应的计数值:") print timevalue[1:Datanum+1]#定时器计数值
当然其他编程语言也可实现,例如C。
相关文章推荐
- C# 不同版本切版时,方法不支持,加载对应dll, 相关Dll的资源
- 实现子菜单复选功能并对应不同窗体标题
- android: targetSdkVersion属性说明及其对应不同值会引起的问题
- DataView的属性DataViewRowState对应各个状态的不同输出
- 【SQL】根据多行记录的公共属性,将不同类型对应的值合并到一行中
- 数据结构中的栈,在解决很多问题都有用处,比如括号匹配,迷宫求解,表达式求值等等 java中有封装好的类,可以直接调用。
- 牛顿迭代法求解方程
- Android的api对应不同系统以及图片
- GridView表格字段显示不同数据库表的数据(如数字转换为对应的文字显示【不同数据库】)
- input的CSS样式,分别对应不同的type的写法
- 不同肥胖对应的减肥茶; 饭后七个好习惯让你健康又苗条; 吃完鸡蛋不要立即做这些事
- 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从
- WSS3.0 SDK中的不同列表类型的对应值
- cocoStudio:Button三种状态需要对应不同的图片
- matlab实现牛顿迭代法求解非线性方程组
- 编写一个函数,判断两个字符串是否是是相互打乱的,也就是说它们有着相同的字符,但是对应不同的顺序。
- 不同Bean创建方式以及对应配置
- 利用substring()方法,把一个表的不同分级所对应的字段名取出来。
- apache集成多個TOMCAT 一个tomcat对应一个应用,不同域名访问不同应用
- docker:二、(3) spring和spring-boot 对应mongo权限配置的不同