文档介绍:自适应控制算法
#include<>
#include<>
#include<>
float h=; //定义采样步长为全局变量h
float m=0, //设定系统的运行区间(m,n)
n=10;
float g=1;
float r(float t){ //系统输入r(t)
float r;
r=5+5*sin(t);
return (r);
}
void cleartxt(char filename[10]) //清空指定文件
{
FILE *fp;
if((fp=fopen(filename,"w"))==NULL) //打开输出文件,a为追加方式
{
printf("cannot open the file\n");
exit(0);
}
fclose(fp); //用w方式打开,不写入任何数据,文件清空
}
void txt(float data,char filename[10]) //文件操作,向filename的txt文档中输出一个数据{
FILE *fp;
if((fp=fopen(filename,"a"))==NULL) //打开输出文件,a为追加方式
{
printf("cannot open the file\n");
exit(0);
}
fprintf(fp,"%f\n",data); //向文件输出一个数据data
fclose(fp); //关闭文件
}
void inte(float &s,float x1,float x2) //积分
{
//printf("%f %f\n",x1,x2);
s=s+g*h*(x1+x2)/2;
}
void f1(float x,float x1,float &dx1 ) //定义微分方程为一阶方程
{
dx1=-x1+x;
}
void RK1(float x,float &y)// 一阶微分方程四阶龙格-库塔法
{
float dx1;
float k1,k2,k3,k4;
f1(x,y,dx1);
k1=dx1;
x=x+h/2;
f1(x,y+h/2*k1,dx1);
k2=dx1;
f1(x,y+h/2*k2,dx1);
k3=dx1;
x=x+h/2;
f1(x,y+h*k3,dx1);
k4=dx1;
y=y+h*(k1+2*k2+2*k3+k4)/6;
}
void f2(float x,float x1,float &dx1,float x2,float &dx2){//定义微分方程含两个一阶方程的方程组 dx1= x2; //lamda(s)=(s+2)*(s+3)
dx2=-6*x1-5*x2+x;
}
void RK2(float x,float &x1,float &x2)
//两个一阶方程的方程组四阶龙格-库塔法
{
float dx1,dx2;
flo