MATLAB: muplisere funksjonen numel(). (Fint med raskt svar:)

Her kan du stille spørsmål vedrørende problemer og oppgaver i matematikk på høyskolenivå. Alle som har kunnskapen er velkommen med et svar. Men, ikke forvent at admin i matematikk.net er spesielt aktive her.

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

Svar
Hartvix
Pytagoras
Pytagoras
Innlegg: 14
Registrert: 03/12-2008 20:48

Hei. Har en oppgave der jeg skal lage min egen funksjon for å telle antall elementer i en liste.
På egen hånd har jeg kommer hit:

Kode: Velg alt

function t = antall(l)
n = 1;
x = -1
while x~=NaN
   x = l(n)
   n = n+1;
end
t=n
end
Planen var at når neste element i listen ikke eksisterte ville funksjonen gi tilbake nummeret på det siste elementet. Dette gikk altså ikke.
Blir veldig glad om noen gir meg et hint om hva jeg kan bruke i stedet for NaN evt. en helt annen fremgangsmåte.

På forhånd takk!
Gommle
Grothendieck
Grothendieck
Innlegg: 857
Registrert: 21/05-2007 20:05

http://www.mathworks.com/help/techdoc/ref/catch.html

Å "fange" feilen er en måte.

En annen er å bruke exist()
Hartvix
Pytagoras
Pytagoras
Innlegg: 14
Registrert: 03/12-2008 20:48

Takk for svaret.
Men du har ikke en litt mindre avansert måte og gjøre dette på?
V.h.a. if, for eller while løkker feks. Det er nemlig rundt der vi er i pensum:)
Gustav
Tyrann
Tyrann
Innlegg: 4560
Registrert: 12/12-2008 12:44

Det enkleste jeg kommer på er at du i listen l legger til et nytt element som du er sikker på at ikke befinner seg i listen fra før. F.eks. hvis l består av tall kan du legge til en boolsk variabel, f.eks. False. I python vil koden dermed bli

Kode: Velg alt

def antall(l):
     l.append(False)       #Legg til False på slutten av lista
     n=0                       
     while l[n]!=False:    
         n+=1
     return n
Hartvix
Pytagoras
Pytagoras
Innlegg: 14
Registrert: 03/12-2008 20:48

Det var jo en kjempegod idé!
Passet meg perfekt. Eneste er at da ville "false" bli lagt til som 0, så hvis listen allerede inneholdt 0 ville dette blitt et problem, så jeg la heller til elementet 'lol' og satser på at ingen vil ha det med i en liste.

Tusen takk for hjelpa!
Gommle
Grothendieck
Grothendieck
Innlegg: 857
Registrert: 21/05-2007 20:05

Du går på NTNU ja?

Enkleste metoden hittil:

for x = liste
n = n + 1
end

At jeg ikke tenkte på det med en gang :p
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

skal du telle antall unike elementer, og hva er det dere har lov til å benytte av innebygde funksjoner?

ellers er nok plutarco sin løsning den enkleste uten å benytte seg av innebygde funksjoner.
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

Gommle skrev:Du går på NTNU ja?

Enkleste metoden hittil:

for x = liste
n = n + 1
end

At jeg ikke tenkte på det med en gang :p
Det der gir ikke helt mening ;)
Gustav
Tyrann
Tyrann
Innlegg: 4560
Registrert: 12/12-2008 12:44

Gommle har jo rett. I Python:

Kode: Velg alt

def antall(l):
    n=0
    for x in l: n+=1
    return n
Uvant å ikke bruke innebygde funksjoner. Vanligvis ville man jo bare skrevet

Kode: Velg alt

def antall(l): return len(l)
Det fine med python er at syntaksen er så intuitiv;)
drgz
Fermat
Fermat
Innlegg: 757
Registrert: 24/12-2008 23:22

plutarco skrev:Gommle har jo rett. I Python:

Kode: Velg alt

def antall(l):
    n=0
    for x in l: n+=1
    return n
Uvant å ikke bruke innebygde funksjoner. Vanligvis ville man jo bare skrevet

Kode: Velg alt

def antall(l): return len(l)
Det fine med python er at syntaksen er så intuitiv;)
Det hadde han visst. Prøvde først med noen vektorer, og det gav ikke noe fornuftig svar, men nå med et enklere eksempel funket det. Snodig. For ta det på min kappe. ;)

Ellers enig i at det er uvant å ikke bruke innebygde funksjoner, gjør jo livet så utrolig mye enklere ;)

*Edit:

Lot meg lure av at lista/vektoren må være 1xN for at metoden hans skal fungere, og ikke Nx1 som jeg vanligvis pleier å lage de selv.
Svar