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
min matlabtråd
Moderatorer: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa
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'])<...
>> 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
Du tolker num2str(j) og variabelen field inne i evalfunksjonen som tekststrenger. Skriv heller koden slik:gill skrev: if eval(['strucvector(num2str(j)).' 'field'])<...
eval(['strucvector(num2str(low)).' 'field'])
Kode: Velg alt
if eval(['strucvector(' num2str(j) ' ). ' field])<...
eval(['strucvector(' num2str(low) ' ). ' field])
Kode: Velg alt
if getfield(strucvector(j), field)<...
getfield(strucvector(low), field)
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.gill skrev:
temp=structvector(i)
structvector(i)=structvector(low)
structvector(low)=temp
...
sort=structvector
Ole J
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
??? 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
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 ''?
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
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.
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.
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
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
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..
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..
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
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
-
- 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
For en fantastisk elendig fasit de har gitt dere.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
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
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
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.
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.
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