Springen naar inhoud

Structuren in matlab.


  • Log in om te kunnen reageren

#1

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 augustus 2010 - 12:21

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.

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

physicalattraction

    physicalattraction


  • >1k berichten
  • 3101 berichten
  • Moderator

Geplaatst op 10 augustus 2010 - 13:29

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.

#3

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 augustus 2010 - 13:40

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

De bedoeling is eigenlijk dat:
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.

#4

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 10 augustus 2010 - 14:30

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

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)

#5

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 augustus 2010 - 15:13

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.

#6

physicalattraction

    physicalattraction


  • >1k berichten
  • 3101 berichten
  • Moderator

Geplaatst op 10 augustus 2010 - 15:17

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?

% 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).
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

#7

Bert F

    Bert F


  • >1k berichten
  • 2588 berichten
  • Ervaren gebruiker

Geplaatst op 10 augustus 2010 - 17:53

Bedankt voor de hulp het begint te lukken.

Groeten.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures