what should i do for this error ?
Afficher commentaires plus anciens
clear all;
close all;
clc;
% Define system parameters
g = 9.81; % Acceleration due to gravity
l = 1; % Length of the pendulum
m = 1; % Mass of the pendulum
% Define the fuzzy controller
fis = mamfis('Name','InvertedPendulumController');
% Add input variables and membership functions
fis = addInput(fis, [-pi/4, pi/4], 'Name', 'Error');
fis = addMF(fis, 'Error', 'trimf', [-pi/4, -pi/8, 0]);
fis = addMF(fis, 'Error', 'trimf', [-pi/8, 0, pi/8]);
fis = addMF(fis, 'Error', 'trimf', [0, pi/8, pi/4]);
fis = addInput(fis, [-pi/2, pi/2], 'Name', 'ChangeInError');
fis = addMF(fis, 'ChangeInError', 'trimf', [-pi/2, -pi/4, 0]);
fis = addMF(fis, 'ChangeInError', 'trimf', [-pi/4, 0, pi/4]);
fis = addMF(fis, 'ChangeInError', 'trimf', [0, pi/4, pi/2]);
% Add output variable and membership functions
fis = addOutput(fis, [-10, 10], 'Name', 'ControlInput');
fis = addMF(fis, 'ControlInput', 'trimf', [-10, -5, 0]);
fis = addMF(fis, 'ControlInput', 'trimf', [-5, 0, 5]);
fis = addMF(fis, 'ControlInput', 'trimf', [0, 5, 10]);
% Define rule base
ruleList = [
1 1 1 2 1;
2 2 1 1 1;
3 3 1 3 1;
2 1 2 2 1;
3 2 2 1 1;
1 3 2 3 1;
3 1 3 3 1;
1 2 3 1 1;
2 3 3 2 1;
];
fis = addRule(fis, ruleList);
% Simulation parameters
tspan = 0:0.01:10; % Time span
x0 = [0; 0]; % Initial conditions
% Define the system dynamics function
sys = @(t, x, u) [x(2); (g/l)*sin(x(1)) + (1/(m*l^2))*(u)];
% Simulate the system with control
[t, x] = ode45(@(t, x) sys(t, x, evalfis([x(1), x(2)], fis)), tspan, x0);
% Plot the results
figure;
plot(t, x(:,1), 'b', 'LineWidth', 1.5);
xlabel('Time');
ylabel('Angle');
title('Inverted Pendulum Control');
grid on;
figure;
plot(t, x(:,2), 'r', 'LineWidth', 1.5);
xlabel('Time');
ylabel('Angular Velocity');
title('Inverted Pendulum Control');
grid on;
% Function to evaluate the control input using the fuzzy controller
function u = evalfis(inputs, fis)
error = inputs(1);
changeInError = inputs(2);
u = evalfis([error, changeInError], fis);
end
Réponses (1)
Cris LaPierre
le 17 Mai 2023
0 votes
Your second input to addRule does not appear to use the syntax expected by Numeric Rule descriptions in the addRule function in the Fuzzy Inference System. You can read about the expected syntax here: https://www.mathworks.com/help/fuzzy/mamfis.addrule.html?s_tid=doc_ta#mw_b4c719d8-51ee-44de-b7f5-70bb6b1a3f90
Specifically, your column 4 values indicate the rule weight, and as the error message is stating, these must be between 0 and 1.
Catégories
En savoir plus sur Fuzzy Logic in Simulink dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!