62 svar
316 visningar
Zorikan2017 är nöjd med hjälpen
Zorikan2017 217
Postad: 29 maj 2023 20:04

Hur beräknar man summor i python


Jag ska beräkna summan av denna uppgiften här nedan. Jag har väldigt stora problem med den. 
jag får inte fram genom help(math.geometrical sum) för det finns inte. 
finns det något program eller kod eller modul som ni kan rekomendera för att lösa denna uppgiften. Jag har väldigt stora problem hur jag ska lösa denna svåra uppgift.

Zorikan2017 217
Postad: 29 maj 2023 20:21 Redigerad: 29 maj 2023 20:32

Summa=0

k=0

while summa <=129:

              k=k+1

              summa=summa+33/np.log(k-3)

print(k)

Svårt att se om detta stämmer!

mitt svar är 40326

Visa spoiler

Skriv ditt dolda innehåll här

Laguna Online 28607
Postad: 29 maj 2023 20:24

k börjar på 33 och inte på 1.

Zorikan2017 217
Postad: 29 maj 2023 20:27

Ja det skulle stå 33 istället men min uträkning är ändå fel.

Laguna Online 28607
Postad: 29 maj 2023 20:29

Nu efter ändringen ökar du med 33 varje gång.

Zorikan2017 217
Postad: 29 maj 2023 20:32 Redigerad: 29 maj 2023 20:34

Ska det vara såhär?

redigerade i min kod.

Och fick svaret 1 med ett rött fel meddelande. 

Zorikan2017 217
Postad: 29 maj 2023 20:40

Laguna Online 28607
Postad: 29 maj 2023 20:42

k ska börja på 33 och öka med 1 för varje varv.

Zorikan2017 217
Postad: 29 maj 2023 20:44 Redigerad: 29 maj 2023 20:44

detta måste vara rätt

Zorikan2017 217
Postad: 29 maj 2023 20:52

Detta var fel-_-

Laguna Online 28607
Postad: 30 maj 2023 08:39

Du får tänka efter vad din kod gör också. Det är nästan rätt, men vad blir det första k-värde som används?

Zorikan2017 217
Postad: 30 maj 2023 09:04

Ska k på andra raden bli 32 istället, att det räknas från noll? Annars är sedan allt rätt? 
jag har lite problem att förstå då jag bara har hållt på en vecka med python. 

Zorikan2017 217
Postad: 30 maj 2023 14:11

Eller ska k=34 på andra raden. Sedan ser allt rätt ut va? 
jag testade k=34 men det gav oxå fel output 

D4NIEL 2550
Postad: 30 maj 2023 14:42 Redigerad: 30 maj 2023 14:46

För det första talet du ska lägga till summan ska k=33k=33

Tänk också på att villkoret i while-loopen är uppfyllt även sista gången du går igenom loopen, vad betyder det för det sista k-värdet? (Dvs vad är det som händer på sista raden i loppen?)

Slutligen ska ditt villkor egentligen vara strängt dvs < inte \leq Edit: det skulle det inte alls.

Zorikan2017 217
Postad: 30 maj 2023 15:00

summa=0

k=33

while summa<=129:

         k=k+1

         summa=summa+1/np.log(k-3)

print(k) 

är oxå fel

Peter_ 470 – Avstängd
Postad: 30 maj 2023 15:37

Är det rätta svaret 763?
Det var vad jag fick med C++ eftersom jag inte kan Python.
Vilken typ är variabeln summa? Den måste vara ett flyttal.

Zorikan2017 217
Postad: 30 maj 2023 15:41

Det ska vara minsta heltal n

Peter_ 470 – Avstängd
Postad: 30 maj 2023 15:46 Redigerad: 30 maj 2023 15:47
Zorikan2017 skrev:

Det ska vara minsta heltal n

Det förstår jag. Vad är det rätta svaret?
Kan du visa din senaste kod?

Zorikan2017 217
Postad: 30 maj 2023 15:49

Det är ingen som vet verkar det som. Detta är ju en dugga. 

Peter_ 470 – Avstängd
Postad: 30 maj 2023 15:49 Redigerad: 30 maj 2023 15:53

Vad är en "dugga"?

Denna algoritm fungerar om summa är ett flyttal för att få svaret 763:

Laguna Online 28607
Postad: 30 maj 2023 15:52

Jag vet när du gör fel i koden, men jag vet inte det rätta numeriska svaret.

Om du inte kan läsa dig fram till vilket värde k får första gången det används i log(k-3) så stoppa in en print(k) precis innan den används.

Laguna Online 28607
Postad: 30 maj 2023 15:53

En dugga är en sorts diagnostiskt prov, som görs några gånger under terminen. Tror jag.

Zorikan2017 217
Postad: 30 maj 2023 15:53

Dugga är ett prov som man får göra hemifrån. Alla hjälp medel är tillåtna förutom att någon inte får göra den åt en. 

Peter_ 470 – Avstängd
Postad: 30 maj 2023 15:54

Ok!

Varifrån kom denna bild ursprungligen?

Zorikan2017 217
Postad: 30 maj 2023 15:55

Python jupyter

Zorikan2017 217
Postad: 30 maj 2023 15:58

Vart i koden är det fel? 
Ska k=33 på andra raden eller ska det vara 34?

Jag förstår inte riktigt var i koden det är fel? Är det på ett ställe eller flera?

Visa spoiler

Skriv ditt dolda innehåll här

Laguna Online 28607
Postad: 30 maj 2023 16:00
Peter_ skrev:

Är det rätta svaret 763?
Det var vad jag fick med C++ eftersom jag inte kan Python.
Vilken typ är variabeln summa? Den måste vara ett flyttal.

Variabler deklareras inte i Python. summa = 0 får summa att bli heltalet 0. summa = summa + 1/log(5) får summa att bli nåt flyttal.

Zorikan2017 217
Postad: 30 maj 2023 16:03

Ska det då vara

summa=33

k=33

while summa<=129:

        k=k+1

        summa=summa+1/np.log(k-3)

print(k)

så det är bara fel på första raden. 

Zorikan2017 217
Postad: 30 maj 2023 16:04

summa=129 menar jag

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:06
Zorikan2017 skrev:

Ska det då vara

summa=33

k=33

while summa<=129:

        k=k+1

        summa=summa+1/np.log(k-3)

print(k)

så det är bara fel på första raden. 

Nästan. Titta på originalfrågan. Summan är inget innan vi startar. Sätt summa = 0 och prova igen.

Zorikan2017 217
Postad: 30 maj 2023 16:09

Men då blir koden precis som förr

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:09
Zorikan2017 skrev:

Men då blir koden precis som förr

Ok, kan du visa mig den koden?

Zorikan2017 217
Postad: 30 maj 2023 16:12

Det är ju den på bilden den som du frågade över

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:18

Ok, när du kör den, vad är resultatet av k?

Zorikan2017 217
Postad: 30 maj 2023 16:21

Då blir outputen 763. Det var det första numret n jag testade men fick fel

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:34

Det är samma svar som jag fick. Vad är korrekt svar?

Zorikan2017 217
Postad: 30 maj 2023 16:35

Nej tyvärr:(

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:36

Hur vet du då att 763 är fel svar?

Zorikan2017 217
Postad: 30 maj 2023 16:37

Man testar i duggan om man fick rätt eller ej. Man får bara använda den 3 gånger. Jag har testat den 3 gånger oxå. Så därför måste jag verkligen skriva in rätt svar. Annars måste jag göra om hela duggan

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:47 Redigerad: 30 maj 2023 16:50

Ok, ser nu felet:
k=k+1 ska vara sist i loopen (vilket Laguna såg)!

while summa<=129:
     summa=summa+1/np.log(k-3)
     k=k+1

 

... vilket ger 762 istället!

Zorikan2017 217
Postad: 30 maj 2023 16:53

summa=0

k=33

while summa<=129:

           summa=summa+1/np.log(k-3)

           k=k+1

print(k)

är detta den rätta koden? Jag måste få det bekräftat för jag har inga ”How did I do” kvar. 

Peter_ 470 – Avstängd
Postad: 30 maj 2023 16:55

Det var länge sedan jag läste integraler. Jag kan inte med säkerhet säga att det är korrekt.
Vad fick du för svar?

D4NIEL 2550
Postad: 30 maj 2023 18:16 Redigerad: 30 maj 2023 18:24

Hej Zorikan, testa att köra följande variant av din kod  (jag har bara lagt till en utskrift)

Förklara vad koden gör de sista looparna och notera särskilt var utskriften är placerad i loopen:

import numpy as np

summa=0
k=33

while summa <= 129:
	summa=summa+1/np.log(k-3)
	print(f'Summan är {summa} för kvärdet  {k}')
	k=k+1

Vad händer om du också skriver ut k-värdet en sista gång utanför loopen som du försökte från början? Hur kan man på ett enkelt sätt åtgärda problemet?

Visa spoiler

"Rätt svar" på den här uppgiften är förövrigt n=760n=760, för n761n\geq 761 är summan större än 129129.

Zorikan2017 217
Postad: 31 maj 2023 18:18

Detta är fel. Jag får det till 762. 
min kod är precis samma.

summa=0

k=33

while summa<129:

           summa=summa+1/np.log(k-3)

           k=k+1

print(k)

Laguna Online 28607
Postad: 31 maj 2023 19:05
D4NIEL skrev:

Hej Zorikan, testa att köra följande variant av din kod  (jag har bara lagt till en utskrift)

Förklara vad koden gör de sista looparna och notera särskilt var utskriften är placerad i loopen:

import numpy as np

summa=0
k=33

while summa <= 129:
	summa=summa+1/np.log(k-3)
	print(f'Summan är {summa} för kvärdet  {k}')
	k=k+1

Vad händer om du också skriver ut k-värdet en sista gång utanför loopen som du försökte från början? Hur kan man på ett enkelt sätt åtgärda problemet?

Visa spoiler

"Rätt svar" på den här uppgiften är förövrigt n=760n=760, för n761n\geq 761 är summan större än 129129.

Det D4niel säger om rätt svar (i spoilern) håller jag inte med om, för det vi vill ha är ett n sådant att summan > 129.

Zorikan2017 217
Postad: 31 maj 2023 19:23

Import math

summa=0

k=33

while summa <=129 and k<=762:

              k=k+1

              summa=summa+1/math.log(k-3)

print(summa)

man kan ju variera värdet på summan och k. Det är enklare att se vad summan blir exakt om man ändrar den till 130 tex. Och skriver tex k<=761 så blir summan 128. Om k=762 så blir summan 129.09 och k=763 blir summan 129.1. Så k=762 är definitivt rätt svar. 
men svårt att bekräfta det mer än på detta sättet. 

Laguna Online 28607
Postad: 31 maj 2023 19:28

Det slarvas hela tiden här, inte bara av dig.

k börjar som 33, och sedan innan man räknar ut första termen så sätts den till 34. Det är inte det vi ska räkna ut. Vi ska börja på 33.

Zorikan2017 217
Postad: 31 maj 2023 19:31

Kolla min senaste kod. Den är 100%

Zorikan2017 217
Postad: 31 maj 2023 19:34

Jag har frågat säkert 3 personer om detta och koden kan inte vara mer korrekt. Har frågat andra chalmerister och lite annat folk

D4NIEL 2550
Postad: 31 maj 2023 19:40
Laguna skrev:
Det D4niel säger om rätt svar (i spoilern) håller jag inte med om, för det vi vill ha är ett n sådant att summan > 129.

Jag tror det finns några villkor till på nn. Hursomhelst.

för n=760n=760 är summan 128.93\approx 128.93, för n=761n=761 är summan 129.088\approx 129.088

762 eller 763 tycker jag är fel eftersom det varken är det minsta eller största nn för vilket vi går över eller under 129.

Zorikan2017 217
Postad: 31 maj 2023 19:44

Varför tar du inte bara print(summa)?

D4NIEL 2550
Postad: 31 maj 2023 19:46

Frågar du mig om något? :)

Zorikan2017 217
Postad: 31 maj 2023 19:51

Jag undrar bara varför min print(summa) och din print summa inte ger samma svar. Verkar som ett k nedåt bara. 
Annars är våra koder lika. Jag förstår inte riktigt din print summa. 
jag har bara hållt på med programmering en dryg vecka nu. Så jag hoppas ni förstår

D4NIEL 2550
Postad: 31 maj 2023 20:03

Det som eventuellt skiljer våra exempel åt är NÄR du adderar +1 till k

I den kod jag föreslog att du skulle testa skrivs summan ut för varje k-värde INNAN man adderar +1 till variabeln kk.

Låt oss analysera rad för rad

Först sätter vi variablerna summa och k till ursprungsvärdena, notera att k=33k=33 när vi går igenom loopen första gången.

summa=0
k=33

Sedan räknar vi ut den första delsumman, som då blir 1ln(30)\frac{1}{\ln(30)}\approx då n=33 och summan bara har en enda term.

summa=summa+1/np.log(k-3)

Sedan skriver vi ut summan för första gången

	print(f'Summan är {summa} för kvärdet  {k}')
Summan är 0.29401410379520604 för kvärdet  33

Kontrollera var i loopen du lägger till 1!

Zorikan2017 217
Postad: 31 maj 2023 20:06

Ja jag förstår ditt resonemang nu. 
jag ska testa ditt sätt nu fast jag kommer ändå printa(summa) enda jag testar nu är att byta plats på det sättet som du skrev din kod på.

Zorikan2017 217
Postad: 31 maj 2023 20:07

K=k+1 alltså

Zorikan2017 217
Postad: 31 maj 2023 20:11

Okej detta oroar mig lite. Nu får jag precis samma svar som du. 
varför spelar det roll vilken rad k och summan är inom loppen?

Zorikan2017 217
Postad: 31 maj 2023 20:11

D4NIEL 2550
Postad: 31 maj 2023 21:01 Redigerad: 31 maj 2023 21:04

Om summan är 4 och k är 3 och du ska räkna ut summan=summan + 3k så får du

summan=4+3k=4+3·3=4+9=13\textit{summan}=4+3k=4+3\cdot 3 = 4+9=13

Om summan är 4 och k är 3 och du lägger till +1 till k före du räknar ut summan räknar du egentligen ut summan när k är 4

summan=4+3k=4+3·(3+1)=16\textit{summan}=4+3k=4+3\cdot (3+1)=16

Det som "ligger i" variabeln k är det som används i summan. Lägger du till +1 till k blir det ju ett annat, större  tal än det var innan.

Zorikan2017 217
Postad: 2 jun 2023 14:56

glömde säga det att din kod stämde Daniel. Man skulle bara byta plats på k=k+1, och summa=summa.... 

Men jag fattar faktiskt inte varför det spelar någon roll. Jag fattar att det blir ett större k när man lägger in den i summan om man k=k+1 kommer först. Jag tror jag inte helt enkelt fattar varför man plussar k med 1 egentligen. 

Laguna Online 28607
Postad: 2 jun 2023 16:04

Det vi vill göra är att summera termerna för stigande k. Alltså

summa = 0

summa = summa + 1/ln(33-3)

summa = summa + 1/ln(34-3)

summa = summa + 1/ln(35-3)

osv. tills summan överskrider 129.

Om vi använder k så blir det

summa = 0

k = 33

summa = summa + 1/ln(k-3)

k = k+1

summa = summa + 1/ln(k-3)

k = k+1

summa = summa + 1/ln(k-3)

osv. Om vi inte adderar 1 till k mellan stegen så stannar k kvar på 33. Det är inte det den ursprungliga summan uttrycker.

När vi nu har två rader kod som upprepas hela tiden så kan vi lägga dem i en while-loop, som kollar när summan har överskridit 129.

Zorikan2017 217
Postad: 2 jun 2023 16:14

Okej det var bra förklarat!

att den andra raden (k=k+1) är till för nästa loop! 

Laguna Online 28607
Postad: 2 jun 2023 16:19 Redigerad: 2 jun 2023 16:20

Man får välja om man lägger k=k+1 före eller efter den andra raden. Om den ligger före så får man tänka efter så att k är 33 första gången det används i ln(k-3) och alltså sätta k till 32 först. Om den ligger efter så har man lagt till 1 en gång i onödan när man är klar.

Svara Avbryt
Close