How to solve evalfis error
9 views (last 30 days)
Show older comments
Syahirah Eshah
on 14 Mar 2019
Answered: Humaira Aslam Mian
on 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 Comments
Accepted Answer
DINI
on 30 May 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 Comments
More Answers (1)
Humaira Aslam Mian
on 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 Comments
See Also
Categories
Find more on Fuzzy Logic Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!