For loop
Hej!
Jag försöker göra en for loop med euklidiska normen. Jag har en vektor b = på 240 element. och när jag kör norm på min vektor b så får jag ett värde. Jag vet inte hur jag kan göra det till en vektor så att jag sedan kan det element som har högst och lägst värde.
oj min for loop blir såhär:
for t = 1:240
x = norm(b(t))
end
Problemet är att den skriver ut alla värden för sig. Jag vill ha det som en lång vektor med alla värden för att jag sedan skall kunna ta fram max o min värdet i vektorn.
Skapa en vektor innan loopen som du lägger in värdena i. Förslagsvis preallokerar du minne med t ex X = zeros(240);
parveln skrev:Skapa en vektor innan loopen som du lägger in värdena i. Förslagsvis preallokerar du minne med t ex X = zeros(240);
Jag förstår inte riktigt vad du menar med ditt förslag. Jag har min b vektor som jag fått från en gausseliminering . Jag har ju min beräkning inne i loopen så hur ska jag lägga värderna av x innan loopen ?
charlizo121 skrev:parveln skrev:Skapa en vektor innan loopen som du lägger in värdena i. Förslagsvis preallokerar du minne med t ex X = zeros(240);
Jag förstår inte riktigt vad du menar med ditt förslag. Jag har min b vektor som jag fått från en gausseliminering . Jag har ju min beräkning inne i loopen så hur ska jag lägga värderna av x innan loopen ?
Du skapar en "tom" (egentligen fylld med nollor) vektor X först, sen tilldelar du den ett värde i taget inne i loopen, förslagsvis genom X(t) = ...
Tegelhus skrev:charlizo121 skrev:parveln skrev:Skapa en vektor innan loopen som du lägger in värdena i. Förslagsvis preallokerar du minne med t ex X = zeros(240);
Jag förstår inte riktigt vad du menar med ditt förslag. Jag har min b vektor som jag fått från en gausseliminering . Jag har ju min beräkning inne i loopen så hur ska jag lägga värderna av x innan loopen ?
Du skapar en "tom" (egentligen fylld med nollor) vektor X först, sen tilldelar du den ett värde i taget inne i loopen, förslagsvis genom X(t) = ...
Hej sorry jag misstförtod min uppgift. Det är så att jag har en b vektor som består av nollor med 240 element. Jag ska räkna ut x via Ax=b då jag redan har A i uppgiften. Jag ska byta ut varje element var för sig mot -2 och räkna ut x via AX =b . Ja ska sedan ta normen för alla x och även kunna hita max o min. Detta ska ske genom att använda en for loop.
charlizo121 skrev:Hej sorry jag misstförtod min uppgift. Det är så att jag har en b vektor som består av nollor med 240 element. Jag ska räkna ut x via Ax=b då jag redan har A i uppgiften. Jag ska byta ut varje element var för sig mot -2 och räkna ut x via AX =b . Ja ska sedan ta normen för alla x och även kunna hita max o min. Detta ska ske genom att använda en for loop.
Ganska oklart vad du menar, är det så här:
enorm=zeros(240,1);
maxmin=zeros(240,2);
for i=1:240
b(i)=-2;
x=A\b;
enorm(i)=norm(x);
maxmin(i,1)=max(x);
maxmin(i,2)=min(x);
end
Om inte får du vara mer tydlig.
Ebola skrev:Det jag menar är att jag har en vektor som består av nollor och har 240 element. Jag skall byta ut vartannat värde till minus 2 var för sig och räkna ut (x) från Ax = b där jag har A redan givet och vektorn är b. Så i första steget har jag min vektor b = 0 -2 0 0 osv och så får jag ett x från x = A\b. Sedan så gör jag det igen där jag har b = 0 0 0 -2 0 0 osv. Jag flyttar -2 med 2. Sedan får jag ett nytt x värde. Detta ska ske i en for loop och jag ska få ett nytt x värde. Jag ska göra så för alla gånger -2 ersätts till ny plats. Därfefters skall ajg använda euklidiska normen för att summera alla x jag får.
j = 2;
v =0;
for v = 0:100 Osäker på hur långt det ska gå.
b = zeros(240,1); b(j+v)=-2 ; % f
x = A\b;v = v+2;
Så har jag skrivit och jag få inte flera x med olika värden efter varandra utan jag får ett x värde när jag kör som ser ut att vara typ en summa av alla itterationer.
Ganska oklart vad du menar, är det så här:
enorm=zeros(240,1);
maxmin=zeros(240,2);
for i=1:240
b(i)=-2;
x=A\b;
enorm(i)=norm(x);
maxmin(i,1)=max(x);
maxmin(i,2)=min(x);end
Om inte får du vara mer tydlig.
Vet inte hur jag ska byta plats på -2 i b för varje iteration.
Du kan väl skriva
for i=2:2:240
b(i) = -2;
x = A\b;
...
b(i) = 0;
end
Ebola skrev:Du kan väl skriva
for i=2:2:240
b(i) = -2;
x = A\b;
...
b(i) = 0;
end
Betyder din kod att alla varanan 2 4 6 osv är -2 ? eller betyder den att den räknar ut för x för varsin -2 på varanan plats i b. ?
charlizo121 skrev:Betyder din kod att alla varanan 2 4 6 osv är -2 ? eller betyder den att den räknar ut för x för varsin -2 på varanan plats i b. ?
Eftersom sista raden är b(i)=0; så återställs naturligtvis vektorn efter varje loop.
Om du testar koden kan du säkert se vad den gör, ha för vana att göra det när du programmerar. Eftersom du har en lång vektor kan du helt enkelt testa koden för en kortare vektor och printa vektorn efter varje loop för att se vad som händer med den.
Ebola skrev:charlizo121 skrev:Betyder din kod att alla varanan 2 4 6 osv är -2 ? eller betyder den att den räknar ut för x för varsin -2 på varanan plats i b. ?
Eftersom sista raden är b(i)=0; så återställs naturligtvis vektorn efter varje loop.
Om du testar koden kan du säkert se vad den gör, ha för vana att göra det när du programmerar. Eftersom du har en lång vektor kan du helt enkelt testa koden för en kortare vektor och printa vektorn efter varje loop för att se vad som händer med den.
Varför blev det vartannat element (for i = 2:2:240)? Man ska väl sätta varje element i b till -2 i tur och ordning?
Jag kan tänka mig att det är normen man ska hitta maximum och minimum för, för övrigt.
Laguna skrev:Varför blev det vartannat element (for i = 2:2:240)? Man ska väl sätta varje element i b till -2 i tur och ordning?
Jag kan tänka mig att det är normen man ska hitta maximum och minimum för, för övrigt.
Charlizo skrev så här:
Jag skall byta ut vartannat värde till minus 2 var för sig och räkna ut (x) från Ax = b där jag har A redan givet och vektorn är b. Så i första steget har jag min vektor b = 0 -2 0 0 osv och så får jag ett x från x = A\b. Sedan så gör jag det igen där jag har b = 0 0 0 -2 0 0 osv. Jag flyttar -2 med 2.
Det kanske är normen som man ska hitta ett maximum för, uppgiftsbeskrivningen var oklar och förhoppningsvis har hen löst uppgiften.
Ebola skrev:Laguna skrev:Varför blev det vartannat element (for i = 2:2:240)? Man ska väl sätta varje element i b till -2 i tur och ordning?
Jag kan tänka mig att det är normen man ska hitta maximum och minimum för, för övrigt.
Charlizo skrev så här:
Jag skall byta ut vartannat värde till minus 2 var för sig och räkna ut (x) från Ax = b där jag har A redan givet och vektorn är b. Så i första steget har jag min vektor b = 0 -2 0 0 osv och så får jag ett x från x = A\b. Sedan så gör jag det igen där jag har b = 0 0 0 -2 0 0 osv. Jag flyttar -2 med 2.
Det kanske är normen som man ska hitta ett maximum för, uppgiftsbeskrivningen var oklar och förhoppningsvis har hen löst uppgiften.
Jaha, det gjordes en redigering djupt inuti ett inlägg.
När den körs får jag en lista på x där det blir ett mellanrum och så får man nästa x värden som en lista undan. Hur gör jag då för att få euklidiska formen för alla dessa x. Koden sparar ju inte alla x utan matar bara ut dem från for slingan. Jag tänkte att man kan använda norm funktionen.
När jag lägger till norm(X) under b(0)= 0. Så får jag massa normen för varje x (arje iteration) och inte för alla x tillsammans.
Det här förstår jag inte riktigt: "Därfefters skall ajg använda euklidiska normen för att summera alla x jag får".
Har du en bild på uppgiften?
Laguna skrev:Det här förstår jag inte riktigt: "Därfefters skall ajg använda euklidiska normen för att summera alla x jag får".
Har du en bild på uppgiften?
Det jag menar är att jag har nu fått x som matas ut för varje -2 i varannan position. Det jag vill ha nu är roten ur (summan av alla x) dvs normen. Om jag skriver normen efter loopen får jag ett x värde vilket borde stämma och det borde vara den totala .Men jag behvöer även ta fram minimala och max då jag har en massa x. Så jag antar att jag även ska ta normen för varje x varsin och kolla vilken som har minst och stört värde. Jag antar det kan göras efter loopen också.
Om du vill summera något kan du sätta en variabel
summa=0;
före loopen och sedan plussa på variabeln inne i loopen.
Det jag missade med min fråga är att jag ska spara varje x som matas ut från loopen . I nuläget så viar den x som en list amed siffror efter varandra och om jag lägger in norm / max / min etc i loopen så kommer den ta på sista x värdet som körs i iterationen.