求PID算法程序详解?!!!!!

求PID算法程序详解?!!!!!,第1张

推荐题目:简单中等,经典TSP问题中等,状态压缩DP中等中等,树形DP。可参考《算法艺术与信息学竞赛》动态规划一节的树状模型中等,《算法艺术与信息学竞赛》中的习题中等,《算法艺术与信息学竞赛》中的习题中等,《算法艺术与信息学竞赛》中的习题中等,明清递推中等,需要减少冗余计算中等,四边形不等式的简单应用较难,状态压缩DP,《算法艺术与信息学竞赛》中有解答较难,《算法艺术与信息学竞赛》中有解答较难,需要配合数据结构优化(我的题目^_^)较难,写起来比较麻烦较难难,树形DP难,状态压缩DP,题目很有意思难非常难二.搜索参考资料:刘汝佳《算法艺术与信息学竞赛》推荐题目:简单,深搜入门题中等,广搜中等,广搜较难,广搜难,IDA*,迭代加深搜索,需要较好的启发函数难,可重复K最短路,A*。可参考解题报告:难,深搜剪枝,《算法艺术与信息学竞赛》中有解答难,《算法艺术与信息学竞赛》习题难,深搜较难,《算法艺术与信息学竞赛》中有解答很难三. 常用数据结构参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》线段树资料:树状数组资料关于线段树和树状数组更多相关内容可在网上搜到后缀数组资料推荐题目较难,线段树应用,《算法艺术与信息学竞赛》中有解答简单,线段树应用矩形面积并,《算法艺术与信息学竞赛》中有解答较难,线段树应用,可参考解题报告难,二维树状数组。中等,线段树应用。难,堆的应用,《算法艺术与信息学竞赛》中有解答中等,左偏树,二项式堆或其他可合并堆的应用。左偏树参考毕前 二项式堆参见《算法导论》相关章节中等,并查集中等,字典树较难,多串匹配树参考: 难,后缀数组较难,最长公共子串,经典问题,后缀数组很难,后缀数组可参考解题报告很难,数据结构综合运用四.图论基础参考资料:刘汝佳《算法艺术与信息学竞赛》《算法导论》《网络算法与复杂性理论》谢政推荐题目:简单,欧拉路中等,无向图割边较难,无向图双连通分支中等,最小度限制生成树,《算法艺术与信息学竞赛》中有解答中等,最小比率生成树,《算法艺术与信息学竞赛》中有解答简单,最短路问题中等,差分约束系统,Bellman-Ford求解,《算法艺术与信息学竞赛》中有解答简单,Bellman-Ford中等,网络流较难,网络流中等,二部图最大匹配较难,二部图最大匹配中等,二部图最大权匹配KM算法参考《网络算法与复杂性理论》较难,二部图最大权匹配中等,LCA(最近公手槐清共祖先)问题参考Tarjan's LCA algorithm 《算法导论》第21章习题较难,2-SAT问题参考: 较难,2-SAT问题

刚好前不久搞过PID,部分程序如下,仅供参考

/*==============================================================================

在使用单片机作为控制cpu时,请稍作简化,具体的PID参数必须由具体对象通过实验确定。

由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,

运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,

根据控制精度的不同要求,当精度要求穗者雹很高时,注意保留移位引起的“余数”,做好余数补偿。猜帆

这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。

==============================================================================*/

#include <string.h>

#include <stdio.h>

/嫌衡*===============================================================================

PID Function

The PID function is used in mainly

control applications. PID Calc performs one iteration of the PID

algorithm.

While the PID function works, main is just a dummy program showing

a typical usage.

PID功能

在PID功能主要用于控制应用。 PID 计算器执行一个PID的迭代算法。虽然PID功能的工程,

主要只是一个虚拟程序显示一个典型的使用。

================================================================================*/

typedef struct PID {

double SetPoint // 设定目标 Desired Value

double Proportion// 比例常数 Proportional Const

double Integral // 积分常数 Integral Const

double Derivative// 微分常数 Derivative Const

double LastError // Error[-1]

double PrevError // Error[-2]

double SumError // Sums of Errors

} PID

/*================================ PID计算部分===============================*/

double PIDCalc( PID *pp, double NextPoint )

{

double dError,Error

Error = pp->SetPoint - NextPoint // 偏差

pp->SumError += Error // 积分

dError = pp->LastError - pp->PrevError// 当前微分

pp->PrevError = pp->LastError

pp->LastError = Error

return (pp->Proportion * Error // 比例项

+ pp->Integral * pp->SumError // 积分项

+ pp->Derivative * dError // 微分项

)

}

/*======================= 初始化的PID结构 Initialize PID Structure===========================*/

void PIDInit (PID *pp)

{

memset ( pp,0,sizeof(PID))

}

/*======================= 主程序 Main Program=======================================*/

double sensor (void)// 虚拟传感器功能 Dummy Sensor Function{return 100.0}

void actuator(double rDelta)// 虚拟驱动器功能 Dummy Actuator Function{}

void main(void)

{

PID sPID // PID控制结构 PID Control Structure

double rOut // PID响应(输出) PID Response (Output)

double rIn // PID反馈(输入) PID Feedback (Input)

PIDInit ( &sPID ) // 初始化结构 Initialize Structure

sPID.Proportion = 0.5 // 设置PID系数 Set PID Coefficients

sPID.Integral = 0.5

sPID.Derivative = 0.0

sPID.SetPoint = 100.0 // 设置PID设定 Set PID Setpoint

for ()

{ // 模拟最多的PID处理 Mock Up of PID Processing

rIn = sensor () // 读取输入 Read Input

rOut = PIDCalc ( &sPID,rIn ) // 执行的PID迭代 Perform PID Interation

actuator ( rOut ) // 所需的更改的影响 Effect Needed Changes

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12454428.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存