Structuren in matlab.

Moderators: jkien, Xilvo

Reageer
Berichten: 2.589

Structuren in matlab.

Graag had ik in matlab het volgende gedaan:

weektabel.arraydagen[dagnummer].werkuur[ndeuur].activiteit

waarbij weektabel de basis structuur is waaruit ik de andere variabele haal.

Echter matlab blijft een rood streepje zetten onder het eerste [. Waarom ? en hoe los ik dit op?

Groeten.

Gebruikersavatar
Moderator
Berichten: 4.096

Re: Structuren in matlab.

Ik weet niet precies hoe je nu je code hebt. Probeer je nu rechte haken in de naam van een variabele te plaatsen? Dit zal niet gaan lukken. Ook kun je niet over een index praten van arraydagen, wanneer je hier een structuur van gemaakt hebt door er weer een punt achter te zetten. Kun je even letterlijk je code geven waar je de mist in gaat, misschien begrijp ik je wel helemaal verkeerd.

Berichten: 2.589

Re: Structuren in matlab.

Ja de [] moeten () zijn dat is al mijn eerste fout.

De bedoeling is eigenlijk dat:

Code: Selecteer alles

  weektabel

   *	   *	 *	*	*

  /		 |	 |	 |	  \

dagen   var   var var	var

| is een array waarin je door nummers een nieuw structuur kan aanspreken, dus structuren in een vector gestoken
de var zijn gewoon scalairen dus 1*1 matrixen.

Echt meer code heb ik nog niet, het is de bedoeling dat ik in matlab een soort datastructuur opzet waarna ik dan gemakkelijk kn zoeken soort lookup tables.

Groeten.

Berichten: 7.068

Re: Structuren in matlab.

Het is mij niet precies duidelijk wat je wilt. Dit?

Code: Selecteer alles

weektabel(1).dag = 1;

weektabel(1).uur = 12;

weektabel(1).minuut = 4;

weektabel(2).dag = 3;

weektabel(2).uur = 10;

weektabel(2).minuut = 24;

weektabel(1)

weektabel(2)

Berichten: 2.589

Re: Structuren in matlab.

Wat ik precies wil weet ik zelf ook nog niet goed, het is nog maar de eerste keer dat ik een m-file maak waarin ik zoveel gebruik maak van structuren.

Ik denk dat het op het volgende neer komt:

één basis tabel waarop zijn beurt nieuwe tabellen in zitten.

Kortom je hebt een week, dit is het hoogste niveau hierin zetten cellen zoals:

Week nummer, vakantie, aantal werkuren, maar ook de dagen van de week die dan op hun beurt terug tabellen vormen.

Dus:

weektabel.weeknummer=3;

weektabel.vakantie=0 % false dus

weektabel.aantal_uren=40 %het is maar een voorbeeld hé

dan de onderdelen die op hun beurt weer een tabel vormen:

weektabel.dagen(1)= %nu probeer ik in weektabel en dan in dagen de eerste te selecteren

dan zou ik voor een dag een eigenschap willen kunnen veranderen bvb:

weektabel.dagen(1).mooieweer=1 %nu verander ik een getal voor elke dag

weektabel.dagen(1).temp=20

Maar ook eventueel:

weektabel.dagen(1).uren(1)= 33 % het eerste uur van de dag met als voorbeeld altijd een getal omdat ik mijn programma wel gemakkelijk kan doe werken met alleen getallen.

Groeten.

Gebruikersavatar
Moderator
Berichten: 4.096

Re: Structuren in matlab.

Is de bedoeling niet dat je variabelen krijgt als week(2).dag(2).uur(10) = 10 ?

Het ligt een beetje aan je data, maar mij lijkt dit niet de handigste manier van het gebruik van structures in Matlab. Kun je niet beter een driedimensionaal getallenblok maken, i.p.v. werken met structures?

Code: Selecteer alles

% initializatie:

udw = nan(24,7,52);

% Op uur 16 van dag 3 in week 24 is de waarde 8:

udw(16,3,24) = 8;

% Geheel dag 5 in week 12 is de waarde -1;

udw(:,5,12) = -1;

% Toon de waarden van week 33;

disp(udw(:,:,33))
EDIT: Ik zie nu dat onze posts elkaar gekruist hebben en dat je iets anders wil dan ik eerst dacht. Waarschijnlijk heb je zelf uitgevonden hoe je dit het beste kan doen. Met deze structures kun je ook strings maken of logicals (i.p.v. nullen en enen gebruik je dan "logische" nullen en enen, oftewel true of false).

Code: Selecteer alles

week(2).weertype = 'best wel mooi';

week(2).dag(1).temperatuur = 19;

week(2).dag(2).temperatuur = 23;

week(2).zwemmen = true;

if and(max(week(2).dag(:).temperatuur) > 20, week(2).zwemmen)

   week(2).ijsgegeten = true

end

Berichten: 2.589

Re: Structuren in matlab.

Bedankt voor de hulp het begint te lukken.

Groeten.

Reageer