Altobelli Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 Hei. Jeg trenger litt råd her. Har laget en funksjon som tar inn to parametere - en vektor med tall, samt et tall. Vektoren skal returnere to vektorer, den ene med alle elementene som er mindre enn dette tallet og den andre med alle elementene som er større eller lik tallet. Dette er det jeg har gjort: function [vektor1, vektor2] = separate(x,tall) vektor1 = []; vektor2 = []; for i = 1:length(x); if x(i) < tall x(i) = vektor1; else x(i) = vektor2; end end end ---- Noen tips? Lenke til kommentar
''' Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 (endret) variablene du definerer skal på venstre side av likhetstegnet Endret 18. oktober 2013 av Grønnsyre Lenke til kommentar
Nebuchadnezzar Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 function [ X,Y ] = ballesaft( tall,V ) X = V(V>=tall); Y=V(V<tall); end 1 Lenke til kommentar
Altobelli Skrevet 18. oktober 2013 Forfatter Del Skrevet 18. oktober 2013 variablene du definerer skal på venstre side av likhetstegnet Får bare error når jeg forsøker dette..? function [ X,Y ] = ballesaft( tall,V ) X = V(V>=tall); Y=V(V<tall); end Ja, men hvordan skal jeg gjøre dette i praksis? Jeg vil liksom at de to tomme vektorene mine skal oppdateres fortløpene, og skrives ut når løkken har iterert over alle elemtene i vektoren. Lenke til kommentar
Nebuchadnezzar Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 Prøv og kjør koden min du, den funker. Lenke til kommentar
Altobelli Skrevet 18. oktober 2013 Forfatter Del Skrevet 18. oktober 2013 Prøv og kjør koden min du, den funker. Haha, fancy! pent laget men har du noe råd til utbedring av min kode? Det står i øvingen at vi skal løse den vha. løkke. Lenke til kommentar
Nebuchadnezzar Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 (endret) Tja, du gjør mye rart. Problemet ditt ligger i at du har en tom vektor, men du sier ikke hvor tallene skal stå. Eksempelvis vil følgende fungere function [vektor1, vektor2] = separate(x,tall) for i = 1:length(x); if x(i) < tall vektor1(i) = x(i); else vektor2(i) = x(i); end end Om en går igjennom koden linje for linje så sier jeg at omjeg har x(i) < tall, så skal den fylle ut den i'te plassen i vektor1(i). Merk at dette er horribelt tregt, og en bør lage tomme vektorer til å begynne med =) (prøv help zeros) For å fjerne de tomme plassene er det flere ting du kan gjøre. Men jeg kan jo la deg prøve først. Endret 18. oktober 2013 av Nebuchadnezzar Lenke til kommentar
Altobelli Skrevet 18. oktober 2013 Forfatter Del Skrevet 18. oktober 2013 (endret) Ok, takk. Jeg hadde tilsvarende funksjon tidligere (bare at jeg hadde byttet plass på vektorene og x'ene - altså jeg hadde x(i) = vektor1(i) og tilsvarende for den andre vektoren. Når jeg da kjørte funksjonen fikk jeg den index out of bounds feilmeldingen. Har du noen god forklaring på hvorfor dette skjer? edit: ja, zeros-funksjonen prøvde jeg også. Problemet var bare at den lagde en matrise istedenfor en vektor. Endret 18. oktober 2013 av mentalitet Lenke til kommentar
Nebuchadnezzar Skrevet 18. oktober 2013 Del Skrevet 18. oktober 2013 (endret) Problemet ditt er at matlab leser koden fra venstre til høyre. Altså sier du først at vektor = [] altså har vektor ingen lengde, eller elementer. Den er tom. Så sier du at x(1) = vektor(1) Du definerer altså x(1) til å være lik vektor(1) men vektor(1) eksisterer ikke! Så du må heller definere vektor(1) = x(1). Og skriver du help zeros finner du og ut hvordan du skal lage en vektor og ikke en matrise =) Endret 18. oktober 2013 av Nebuchadnezzar Lenke til kommentar
Altobelli Skrevet 18. oktober 2013 Forfatter Del Skrevet 18. oktober 2013 Takk!! : Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå