Effacer les filtres
Effacer les filtres

Why my code is not working, showing the error "Illegal use of reserved keyword "elseif"

10 vues (au cours des 30 derniers jours)

Parse error: Illegal use of reserved keyword "elseif".

Function 'MATLAB Function' (#23.614.615), line 44, column 5: "e" Launch diagnostic report.

function [SaT, SaB, SbT, SbB, ScT, ScB] = pwm(u) f = 50; ts=0.0002; vdc=1; peak_phase_max = vdc/sqrt(3);

x=u(2);

y=u(3); mag=(u(1)/peak_phase_max) * ts;

% sector I if (x>=0) && (x<pi/3)

ta = mag * sin(pi/3-x); tb = mag * sin(x); t0 =(ts-ta-tb); t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1);

v1=[0 1 1 1 1 1 0]; v2=[0 0 1 1 1 0 0]; v3=[0 0 0 1 0 0 0]; for j=1:7 if(y<t1(j)) break end end SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j);

end

% sector II elseif (x>=pi/3) && (x<2*pi/3)

adv= x-pi/3; tb = mag * sin(pi/3-adv); ta = mag * sin(adv); t0 =(ts-ta-tb);

t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1);

v1=[0 0 1 1 1 0 0]; v2=[0 1 1 1 1 1 0]; v3=[0 0 0 1 0 0 0];

for j=1:7 if(y<t1(j)) break end end

SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j);

end %sector III

    elseif (x>=2*pi/3) && (x<pi)
        		adv=x-2*pi/3;
                ta = mag * sin(pi/3-adv);
		        tb = mag * sin(adv);
		        t0 =(ts-ta-tb);

t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1); v1=[0 0 0 1 0 0 0]; v2=[0 1 1 1 1 1 0]; v3=[0 0 1 1 1 0 0]; for j=1:7 if(y<t1(j)) break end end SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j); end

%sector IV

    elseif (x>=-pi) && (x<-2*pi/3)
                adv = x  + pi; 

tb= mag * sin(pi/3 - adv); ta = mag * sin(adv); t0 =(ts-ta-tb);

t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1); v1=[0 0 0 1 0 0 0]; v2=[0 0 1 1 1 0 0]; v3=[0 1 1 1 1 1 0];

for j=1:7 if(y<t1(j)) break end end

SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j);

end % sector V

    elseif (x>=-2*pi/3) && (x<-pi/3)

adv = x+2*pi/3;

ta = mag * sin(pi/3-adv); tb = mag * sin(adv); t0 =(ts-ta-tb);

t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1); v1=[0 0 1 1 1 0 0]; v2=[0 0 0 1 0 0 0]; v3=[0 1 1 1 1 1 0];

for j=1:7 if(y<t1(j)) break end end

SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j);

end

%Sector VI (x>=-pi/3) && (x<0)

    else 

adv = x+pi/3; tb = mag * sin(pi/3-adv); ta = mag * sin(adv); t0 =(ts-ta-tb);

t1=[t0/4 ta/2 tb/2 t0/2 tb/2 ta/2 t0/4]; t1=cumsum(t1); v1=[0 1 1 1 1 1 0]; v2=[0 0 0 1 0 0 0]; v3=[0 0 1 1 1 0 0]; for j=1:7 if(y<t1(j)) break end end SaT = v1(j); SaB = 1-v1(j); SbT = v2(j); SbB = 1-v2(j); ScT = v3(j); ScB = 1-v3(j); end

Réponses (2)

Kai Domhardt
Kai Domhardt le 1 Mai 2018
Your control flow is broken, it appears that there is always one "end" when you see three "end"
Also there is no If statement corresponding to all those Elseif statements.
I have deleted all conditionals and actual code, as to leave only the control flow structure, that should make it easier to see what is wrong.
function
% sector I
for
if
end
end
end
% sector II
for
if
end
end
end
%sector III
elseif
for
if
end
end
end
%sector IV
elseif
for
if
end
end
end
% sector V
elseif
for
if
end
end
end
%Sector VI
else
for
if
end
end
end

keerthi vardhana
keerthi vardhana le 30 Mai 2018
STILL I HAD RECEIVED ERROR ?
  1 commentaire
Steven Lord
Steven Lord le 30 Mai 2018
If you have the code open in the MATLAB Editor, select all of it, right-click, and select "Smart Indent" from the context menu. This will line up for, if, elseif, and else statements with their corresponding end statements.
The final end should line up with the initial for or if. If it doesn't, you're probably missing one or more end statements. If it does but there are other end statements all at the same level of indentation (with the later ones possibly underlined in red) then you probably have too many end statements.
Basically, look for red Code Analyzer indicators as they will likely indicate where the problem is located (or where MATLAB was able to determine that there is a problem.)

Connectez-vous pour commenter.

Tags

Aucun tag saisi pour le moment.

Community Treasure Hunt

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

Start Hunting!

Translated by