Effacer les filtres
Effacer les filtres

How to solve evalfis error

5 vues (au cours des 30 derniers jours)
Syahirah Eshah
Syahirah Eshah le 14 Mar 2019
I try to run the program "Modeling Inverse Kinematics in a Robotic Arm"
l1 = 10; % length of first arm
l2 = 7; % length of second arm
theta1 = 0:0.1:pi/2; % all possible theta1 values
theta2 = 0:0.1:pi; % all possible theta2 values
[THETA1,THETA2] = meshgrid(theta1,theta2); % generate a grid of theta1 and theta2 values
X = l1 * cos(THETA1) + l2 * cos(THETA1 + THETA2); % compute x coordinates
Y = l1 * sin(THETA1) + l2 * sin(THETA1 + THETA2); % compute y coordinates
data1 = [X(:) Y(:) THETA1(:)]; % create x-y-theta1 dataset
data2 = [X(:) Y(:) THETA2(:)]; % create x-y-theta2 dataset
plot(X(:),Y(:),'r.');
axis equal;
xlabel('X','fontsize',10)
ylabel('Y','fontsize',10)
title('X-Y coordinates generated for all theta1 and theta2 combinations using forward kinematics formula','fontsize',10)
opt = anfisOptions;
opt.InitialFIS = 7;
opt.EpochNumber = 150;
opt.DisplayANFISInformation = 0;
opt.DisplayErrorValues = 0;
opt.DisplayStepSize = 0;
opt.DisplayFinalResults = 0;
disp('--> Training first ANFIS network.')
anfis1 = anfis(data1,opt);
disp('--> Training second ANFIS network.')
opt.InitialFIS = 6;
anfis2 = anfis(data2,opt);
x = 0:0.1:2; % x coordinates for validation
y = 8:0.1:10; % y coordinates for validation
[X,Y] = meshgrid(x,y);
c2 = (X.^2 + Y.^2 - l1^2 - l2^2)/(2*l1*l2);
s2 = sqrt(1 - c2.^2);
THETA2D = atan2(s2,c2); % theta2 is deduced
k1 = l1 + l2.*c2;
k2 = l2*s2;
THETA1D = atan2(Y,X) - atan2(k2,k1); % theta1 is deduced
Until I run the coding below, I got error using evalfis
XY = [X(:) Y(:)];
THETA1P = evalfis(anfis1,XY); % theta1 predicted by anfis1
THETA2P = evalfis(anfis2,XY); % theta2 predicted by anfis2
The error that I get:
Error using evalfis (line 51)
The second argument must be a FIS structure.

Réponse acceptée

DINI
DINI le 30 Mai 2019
Hi!!!, when you use the evalfis function, you need to specify: to what data you want to evaluate and with what file.fis what you want to do.
For example, part of my code
in_fis_0000 = genfis1(mem,numMFs,mfType);
out_fis_0000 = anfis(mem,in_fis_0000,epoch_n);
nnn = num2str(ii);
writefis(out_fis_0000,['inf_',nnn]);
fis_0000 = readfis(['inf_',nnn]);
inf_0000 = evalfis(previo,fis_0000); %final evaluation
The steps would be: generate it, read it and evaluate it

Plus de réponses (1)

Humaira Aslam Mian
Humaira Aslam Mian le 21 Avr 2020
XY = [X(:) Y(:)];
THETA1P = evalfis(anfis1,XY); % theta1 predicted by anfis1
THETA2P = evalfis(anfis2,XY); % theta2 predicted by anfis2
Hey just change the position of evalfis(XY,anfis1) & evalfis(XY,anfis2)
worked for me.

Catégories

En savoir plus sur Fuzzy Logic Toolbox dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by