[matlab] probleem met loops
Geplaatst: di 17 sep 2013, 21:48
Beste allemaal,
Ik heb een probleem met loops in het programma matlab. Het volgende is de vraag:
En de locale functie 'decode':
Mijn vraag is hoe het gedeelte van:
A=INVOER(1,4);
for i =[51];
IFF1(i)=rem(A,10);
A =fix(A/10);
end;
makkelijker gedaan kan worden zodat hij deze berekening voor [:,4] bij invoer doet. Oftewel zodat er ook een lijst aangeleverd kan worden van 4 of 8 rijen. Vervolgens moet er van deze resultaten vanzelf een matrix gegenereerd worden in de trand van: IFF = [IFF1;IFF2;IFF3;IFF4;IFF5;IFF6]; etc naar gelange het aantal IFF's.
Iemand een idee?
Ik heb een probleem met loops in het programma matlab. Het volgende is de vraag:
Code: Selecteer alles
%Een compacte weergave van de radarcontacten in de omgeving van het schip is het tactisch plot.
%In dit plot kan in één oogopslag gezien worden wat de classificatie van de verschillende
%contacten is (vriend, vijand, ...) en waar de contacten zich bevinden. Tevens is het identificatie
%nummer van elk contact gegeven. In een modern systeem wordt het tactisch plot op een
%computerbeeldscherm gepresenteerd en is het gekoppeld aan verschillende databases. Hierdoor
%kan bijvoorbeeld snel extra informatie over een contact worden verkregen door erop te klikken.
%Gegeven
%Een lijst (array) van contacten (elke regel is één contact) met identificatienummer (ID, 1ste kolom), x- en y-coördinaten
%(in nm; 2de en 3de kolom) en hun IFF-reeks (4de kolom). In tegenstelling tot voorbeeldopgave D (IFF), is de IFF-reeks
%in deze opgave één getal, bijvoorbeeld 10110, waarbij de opeenvolgende ‘bits’ overeenkomen met modes 1, 2, 3a, 3c en 4.
clear all; clc;
% ID X Y IFF
INVOER = [1 100 70 00100; % contact 1, etc.
2 100 -60 11000;
3 50 100 00110;
4 -50 60 00101;
5 -50 -100 00110;
6 100 40 00010];
A=INVOER(1,4);
for i =[5:-1:1];
IFF1(i)=rem(A,10); % IFF staat voor identificatie Friend or Foe (vriend of vijand)
A =fix(A/10);
end;
B=INVOER(2,4);
for i =[5:-1:1];
IFF2(i)=rem(B,10);
B =fix(B/10);
end;
C=INVOER(3,4);
for i =[5:-1:1];
IFF3(i)=rem(C,10);
C =fix(C/10);
end;
D=INVOER(4,4);
for i =[5:-1:1];
IFF4(i)=rem(D,10);
D =fix(D/10);
end;
E=INVOER(5,4);
for i =[5:-1:1];
IFF5(i)=rem(E,10);
E =fix(E/10);
end;
F=INVOER(6,4);
for i =[5:-1:1];
IFF6(i)=rem(F,10);
F =fix(F/10);
end;
IFF = [IFF1;IFF2;IFF3;IFF4;IFF5;IFF6];
CONTACT=IFF;
for i=1:size(CONTACT,1)
IFF=decode(CONTACT(i,1),CONTACT(i,2),CONTACT(i,3),CONTACT(i,4),CONTACT(i,5));
disp(['De IFF van contact ' num2str(i) ' is ' IFF '.'])
end
Code: Selecteer alles
function [bericht] = decode(mode1,mode2,mode3a,mode3c,mode4)
% Decoder het IFF bericht (zie inleidende tekst in 'IFF')
reeks = [mode1 mode2 mode3a mode3c mode4];
if sum( (reeks==1)|(reeks==0) )~=5
errordlg('Fout in de IFF-code: niet binair!'); % fout in de code
end
if mode4
bericht = 'FRIEND';
elseif (mode3a)&(mode3c)
bericht = 'NEUTRAL';
elseif mode3c % houdt impliet in dat IFF niet mode4 of mode3a bevat
bericht = 'ASSUMED NEUTRAL';
else
bericht = 'FOE';
end
A=INVOER(1,4);
for i =[51];
IFF1(i)=rem(A,10);
A =fix(A/10);
end;
makkelijker gedaan kan worden zodat hij deze berekening voor [:,4] bij invoer doet. Oftewel zodat er ook een lijst aangeleverd kan worden van 4 of 8 rijen. Vervolgens moet er van deze resultaten vanzelf een matrix gegenereerd worden in de trand van: IFF = [IFF1;IFF2;IFF3;IFF4;IFF5;IFF6]; etc naar gelange het aantal IFF's.
Iemand een idee?