📄 pendulum.h
字号:
//Filename: pendulum.h
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
#define boundary1 -330
#define boundary2 331
#define size 661
#define posX 25
#define negX -25
#define posY 2
#define negY -2
//system variables
int n; //system order
double u; //output of FLC
double t; //time
double h=0.001; //simpling time
double y[3]; //[x1,x2,x3]=[y,y_dot,u_bar]
double tmax=3.0; //max time
double err,err_dot; //input of FLC
double PI=3.141592654;
float g0=0,g1=0,hh=0; //increment
//=======================Runge_Kutta=====================================
void F(int kth,double *x,double u,double h,double k[][4])
{
double sinx0=sin(x[0]),cosx0=cos(x[0]);
k[0][kth]=h*(x[1]);
k[1][kth]=h*(3.0*(9.8*sinx0+cosx0*(-x[2]-0.25*x[1]*x[1]*sinx0)/1.5)/(2.0-0.5*cosx0*cosx0));
k[2][kth]=h*(100.0*(u-x[2]));
}
void RK(double *x,double u,double h)
{
double k[3][4];
double dx[3];
//================Inverted====pendulum====model===========
int i;
for(i=0;i<3;i++) dx[i]=x[i];
F(0,dx,u,h,k);
for(i=0;i<3;i++) dx[i]=x[i]+(k[i][0]/2.0);
F(1,dx,u,h,k);
for(i=0;i<3;i++) dx[i]=x[i]+(k[i][1]/2.0);
F(2,dx,u,h,k);
for(i=0;i<3;i++) dx[i]=x[i]+k[i][2];
F(3,dx,u,h,k);
for(i=0;i<3;i++)x[i]=x[i]+((k[i][0]+2*k[i][1]+2*k[i][2]+k[i][3])/6);
} //end RK4
//variables for calculating fuzzy sets
int k=0,kk=0;
double i=0;
double poss1_x1,poss1_x2,poss1_x3,poss1_x4,poss1_x5; //first input linguistic variables
double poss2_x1,poss2_x2,poss2_x3,poss2_x4,poss2_x5; //second input linguistic variables
double poss_min[5][5]={0}; //fuzzy rule (25)
double max1,max2,max3,max4,max5; //fuzzified outputs
double trib_1[size]={0},trib_2[size],trib_3[size],trib_4[size],trib_5[size]; //each output membership function
double tatal[size]={0}; //5 output membership functions as a whole
//function prototypes
void initial(void);
double fuzzy_control_coa(double,double);
double leftTrapezoid(double, double, double,double);
double triangular(double,double,double,double);
double rightTrapezoid(double,double,double,double);
double min(double,double);
double max(double,double,double,double,double,double);
double ub_triangular(double,double,double,double,double);
double tatal_ub(double,double,double,double,double);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -