用C语言编写的PI调节器函数,采用位置式算法,求大神指教

用C语言编写的PI调节器函数,采用位置式算法,求大神指教,第1张

typedef struct{  

    float limit    //输出限幅  

    float target   //设置量  

    float feedback //实测量  

    float Kp       //比禅纯例系数

    float Ki       //积分系数

    float Kd       //微分系数

    float eSum     //误差积分

    float e0       //当前误差  

    float e1       //上一次误差  

}PIDType  

  

#define max(a, b)           (a>b? a:b)  

#define min(a, b)           (a<b? a:b)  

#define 烂袭备range(x, a, b)      (min(max(x, a), b))  

  

float pid_pos_update(PIDType *p)  

{  

    float pe, ie, de  

    float out=0  

    //计算当前误差  

  饥毁  p->e0 = p->target - p->feedback  

    //误差积分  

    p->eSum += p->e0  

    //误差微分  

    de = p->e0 - p->e1  

    pe = p->e0  

    ie = p->eSum  

    p->e1 = p->e0  

    //数据增量  

    out = pe*(p->Kp) + ie*(p->Ki) + de*(p->Kd)  

    //输出限幅  

    out = range(out, -p->limit, p->limit)  

    return out  

}

输入:要在C语言中使用圆周率π值,一般使用宏定义或者常变量的方式实现。并根据精度要求,定义实际值。用三角函数可携拿以打印出pi。cos(pi)=-1的,用反三角函数acos(-1.0)=pi。

标准的C语言中没有π这个符号及常量,一般在开发过程中是通过开发人员自己定义这个常量的,最常见的方式是使用宏定义:#definePI3.141592。

可以直接普通变量定义,如:doublepi=3.141592;C语言中,并不支持希辩携搭腊字符π,而且,也不存在系统自带的π(圆周率值)。

C语言

一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易隐禅的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

一个足以让渗伏你吐血的计算400位pi的C程序:

int a=10000, b, c=2800, d, e, f[2801], g

main() {

for(b-cf[b++]=a/5)

for(d=0,g=c*2c -=14,printf("%.4d"纯渗,e+d/a),e=d%a)

for(b=cd+=f[b]*a,f[b]=d%--g,d/=g--,--bd*=b)

}

理论上只要用大数算法扩了就能一直算下去。我在Palm上面实现的那个就是基于这个算法,没有扩,算到4680位(受到Palm平台32k数组的长度限制)。

这个程序的特点是:你抱着想看看算pi原理的希望来读这个程序,结果发现就是看了也还是看不懂~~

转的,但是百度知道不允许贴地址哦

第二种:

用C语言编程π*π/6=1/1*1+1/2*2+1/3*3+。。。+1/n*n

#include<stdio.h>

#include<math.h>

main()

{

int n,i

double s=0

printf("输入n:")

scanf("%d",&n)

for(i=1i<=ni++)

{s=s+1.0/(i*i)

}

printf("pai=%f",sqrt(s*6))

}

第三种:

求pi=(1+1/做喊脊(1*3))*(1+1/(3*5))*(1+1/(5*7))…………直到最后一项的分数小于10的负6次方为止。

#include<stdio.h>

#include<math.h>

#include<stdlib.h>

void main()

{

double pi,i,j,sigh,term

i=1,j=3,sigh=1,term=1

while(sigh>1e-6)

{

sigh=1/(i*j)

term=(1+sigh)*term

i=i+2

j=j+2

}

pi=term

printf("pi=%f\n",pi)

}


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

原文地址: http://outofmemory.cn/yw/12416004.html

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

发表评论

登录后才能评论

评论列表(0条)

保存