How to solve evalfis error
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Syahirah Eshah
am 14 Mär. 2019
Beantwortet: Humaira Aslam Mian
am 21 Apr. 2020
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.
0 Kommentare
Akzeptierte Antwort
DINI
am 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
0 Kommentare
Weitere Antworten (1)
Humaira Aslam Mian
am 21 Apr. 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.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Fuzzy Logic Toolbox finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!