⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pendulum.h

📁 这是一个倒单摆的模糊控制程序。用C++写的程序。
💻 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 + -