min matlabtråd

Det er god trening å prate matematikk. Her er det fritt fram for alle. Obs: Ikke spør om hjelp til oppgaver i dette underforumet.

Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

http://bildr.no/view/1007785

Jeg lurer på hva de sier i boka her. I teksten som er nederste avsnitt hvor de sier at fscanf skal lese samme fil uten newline-tegnet. Sier de at fscanf innebygd alltid leser newline og derfor leser newline istedenfor %c på slutten av kommandolinjen?

Her brukes fscanf uten newline (øverst på siden i linken):

http://bildr.no/view/1007869
ærbødigst Gill
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg lurer på om noen vet om hva som er galt med denne funksjonen for å sortere structures:

>> structures(3)=struct('item_id',12,'price',39,'color','blue')

structures =

1x3 struct array with fields:
item_id
price
color

>> structures(2)=struct('item_id',13,'price',29,'color','red')

structures =

1x3 struct array with fields:
item_id
price
color

>> structures(1)=struct('item_id',14,'price',19,'color','green')

structures =

1x3 struct array with fields:
item_id
price
color


Så prøvde jeg å sorter strukturen etter pris i denne funksjonen:


function sort=sortstructure(strucvector, field)

if isfield(strucvector,field)



for i=1:length(strucvector)-1

low=i

for j=i+1:length(strucvector)

if eval(['strucvector(num2str(j)).' 'field'])<...
eval(['strucvector(num2str(low)).' 'field'])

low=j

end

end

temp=structvector(i)

structvector(i)=structvector(low)

structvector(low)=temp

end

else disp('wrong field')

end

sort=structvector


hva ble feil. Fikke denne meldingen:

>> sortstructure(structures, 'price')

low =

1

??? Reference to non-existent field 'field'.

Error in ==> sortstructure at 13
if eval(['strucvector(num2str(j)).' 'field'])<...
ærbødigst Gill
ojmik
Pytagoras
Pytagoras
Innlegg: 9
Registrert: 07/10-2011 16:23

gill skrev: if eval(['strucvector(num2str(j)).' 'field'])<...
eval(['strucvector(num2str(low)).' 'field'])
Du tolker num2str(j) og variabelen field inne i evalfunksjonen som tekststrenger. Skriv heller koden slik:

Kode: Velg alt

if eval(['strucvector(' num2str(j) ' ). ' field])<... 
eval(['strucvector(' num2str(low) ' ). ' field])
Men jeg anbefaler deg heller å droppe eval-funksjonen og heller skrive det slik:

Kode: Velg alt

if getfield(strucvector(j), field)<... 
getfield(strucvector(low), field)
gill skrev:
temp=structvector(i)

structvector(i)=structvector(low)

structvector(low)=temp

...

sort=structvector
Her heter variabelen din plutselig "structvector", i stedet for "strucvector", som tidligere. Du har ikke fått feilmelding på det, men kommer til å gjøre det.
Ole J
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg prøvde å kjøre den en gang til men fikk feil på slutten:

??? Undefined function or variable 'structvector'.

Error in ==> sortstructure at 34
sort=structvector

her er den nye funksjonen:

function sort=sortstructure(strucvector, field)

if isfield(strucvector,field)



for i=1:length(strucvector)-1

low=i

for j=i+1:length(strucvector)

if eval(['strucvector(' num2str(j) ' ). ' field])<...
eval(['strucvector(' num2str(low) ' ). ' field])

low=j

end

end

temp=strucvector(i)

strucvector(i)=strucvector(low)

strucvector(low)=temp

end

else disp('wrong field')

end

sort=strucvector
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Du bruker både strucvector og structvector i koden din.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

jeg skjønner meg ikke helt på eval-function (hvis jeg skal kalle den for det etter at jeg kan gjøre dette her). Jeg har fjernet eval og den fungerer helt fint med dette:

if (['strucvector(' num2str(j) ' ). ' field])<...

(['strucvector(' num2str(low) ' ). ' field])


men hvis jeg fjerner mellomrommet etter punktum slik:

if (['strucvector(' num2str(j) ' ).' field])<...

(['strucvector(' num2str(low) ' ). ' field])

får jeg ikke kjørt den. Jeg ser liksom ikke helt systemet i i hvor det skal være mellomrom og ''?
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Definer: "fungerer helt fint". Når jeg kjører koden din så sorterer den ikke vektoren..

Når du fjerner eval så sammenligner du bare om en string er mindre enn en annen, og det er ikke helt det du vil. Du må LESE hva funksjonene gjør og hvordan de fungerer. Det virker som at du prøver på helt tilfeldige ting uten å prøve å forstå hva og hvordan for å deretter klø deg i hodet når det ikke fungerer slik du tror det skal.

Ellers bør du lime inn kode med [code.][/code.] (uten punkttum!) tagger rundt, så den er leselig. Sånn du holder på nå er det lite fristende å bruke tid på å hjelpe deg når man først må bruke tid på å formatere koden din til noe leselig.

ojmik har forresten forklart deg hva du heller bør gjøre i funksjonen din. I tillegg til det han har bør du ha en sjekk på om "field" faktisk er et eksisterende felt (les: help isfield). Hvis det er sånn at du MÅ bruke eval, så sjekk doc eval og se på eksemplene.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

http://itgk.idi.ntnu.no/oving/oving1-matlab.pdf

jeg lurer på en ting med oppgave 5c her. Jeg har ingen problemer med å skrive funksjonen da jeg har vært borti litt verre før men hva menes med:

I kommandolinjevinduet / terminalen, naviger til mappen som inneholder filen f.m (cd <sti>), og start Matlab

terminal er noe som kan ta i mot og gi ut data men kan ikke bearbeide data. Hvor er denne terminalen
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Du har ikke noe terminal i Windows. I verste fall kan du sikkert navigere i CMD og starte matlab med å skrive f.eks "matlab -nojvm -nodisplay".

Bruker du Linux så kan du kjøre MATLAB i terminalen som f.eks octave og python, men det er Linux. Og dette er neppe noe du får spørsmål om på eksamen..
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

Jeg lurer på oppgave 5c

http://itgk.idi.ntnu.no/oving/oving3-matlab.pdf

Her er fasit:

http://itgk.idi.ntnu.no/oving/lf/oving3 ... a5e2f2.pdf

fra fasiten lurer jeg på:

hva er oving3(t)?

Og hva vil firkanten som folketall_table er lik si. Jeg pleier å definere en matrise som en rekke med 0 fra zeros innebygd funksjon Mistenker firkanten definerer en matrise men er ukjent med å skrive inn en firkant i matlab i alle fall
Sist redigert av gill den 01/11-2011 11:49, redigert 1 gang totalt.
ærbødigst Gill
Vektormannen
Euler
Euler
Innlegg: 5889
Registrert: 26/09-2007 19:35
Sted: Trondheim
Kontakt:

Det er ikke en firkant, men []. [] er en tom vektor/tabell/matrise, så de setter altså folketall_table til å være en tom vektor.
Elektronikk @ NTNU | nesizer
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

gill skrev:Jeg lurer på oppgave 5c

http://itgk.idi.ntnu.no/oving/oving3-matlab.pdf

Her er fasit:

http://itgk.idi.ntnu.no/oving/lf/oving3 ... a5e2f2.pdf

fra fasiten lurer jeg på:

hva er oving3(t)?

Og hva vil firkanten som folketall_table er lik si. Jeg pleier å definere en matrise som en rekke med 0 fra zeros innebygd funksjon Mistenker firkanten definerer en matrise men er ukjent med å skrive inn en firkant i matlab i alle fall
For en fantastisk elendig fasit de har gitt dere.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

total=0;

teller=0;

a=input('vil du skrive inn flere karakterer svar ja eller nei: ');



if a=='ja'

kar=input('skriv inn karakter ')

if kar<=6 && kar>=1

total=total+kar;

teller=teller+1;



calcchar

else

disp('character not legal')

calcchar

end

elseif a=='nei'

if teller~=0

disp(total/teller);

else

disp('no characters to calculate')

end

else

disp('skriv ja eller nei')

calcchar

end


hva er galt med denne og hvordan kan jeg gjøre slik at jeg slipper å skrive inne ja og nei med ' ' rundt
ærbødigst Gill
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

1) Når du limer inn kode her på forumet, bruk [.CODE]KODE HER[./CODE] (uten punktum).

2) Når du skal sammeligne variabelen a med enten 'ja' eller 'nei' så må du huske at det du sammenligner er en char-array med en annen variable, og når du skal sammenligne en char-array med noe må det du sammenligner med også være en char-array, ergo MÅ du ha '' med mindre du går over til å sjekke boolske verdier (eller tilsvarende). Det går an å skrive if 'blabla' > 10 uten å få feilmelding, men selve sammenligningen gir ikke mening.

Et tips: Få bedre oversikt over de forskjellige datatypene før eksamen.
gill
Leibniz
Leibniz
Innlegg: 993
Registrert: 24/03-2008 19:04

jeg har prøvd å flikke litt på den men det ser ut som den ikke registrerer inputet jeg kommer med. Altså jeg får alltid meldingen no characters to calculate og når jeg skriver teller i matlab får jeg teller=0:

Kode: Velg alt

total=0;

teller=0;

a=input('vil du skrive inn flere karakterer svar ja eller nei: ' ,'s');

if length(a)==2
    a(3)=' ';
    
else
    
    a=a(1:3);
    
end

    
    if a=='ja '
    

kar=input('skriv inn karakter ')

if kar<=6 && kar>=1
    
    total=total+kar;
    
    teller=teller+1;
    
    
    
    calcchar
    
else
    
    disp('character not legal')
    
     calcchar
    
end

elseif a=='nei'
    
    if teller~=0
    
    disp(total/teller);
    
    else
        
        disp('no characters to calculate')
        
    end
    
else
    
    disp('skriv ja eller nei')
    
      calcchar
      
end
    
    
ærbødigst Gill
Svar