11 svar
435 visningar
Bnim 12 – Fd. Medlem
Postad: 17 dec 2020 19:51

While-loop taylorpolynom

Jag ska beräkna ett approximativt värde på ln3 genom taylorserien av ln x kring x = 1 och addera alla termer vars absolutbelopp är större än 10^-8

 

ln x =  (x-1) - (x-1)^2 /2 + (x-1)^3/3....

Det jag har till hjälp är denna kod: 

tol=1e-8; s=0; i=0;
term=;
while abs(term) > tol
s=s+term;
i=i+1;
term=...;
end

Jag förstår mig inte riktigt på hur jag ska gå vidare, har googlat runt efter liknande problem utan lycka då alla använder syms. Skulle uppskatta lite vägledning

Hondel 1377
Postad: 17 dec 2020 21:20 Redigerad: 17 dec 2020 21:20

Vi kan se ett mönster i varje term. Taylorserien är:

i=0(x-1)ii\sum_{i=0}^\infty \frac{(x-1)^i}{i}

I ditt fall är x=3. Kan du se hur detta kan stoppas in i koden?

Bnim 12 – Fd. Medlem
Postad: 18 dec 2020 01:30
Hondel skrev:

Vi kan se ett mönster i varje term. Taylorserien är:

i=0(x-1)ii\sum_{i=0}^\infty \frac{(x-1)^i}{i}

I ditt fall är x=3. Kan du se hur detta kan stoppas in i koden?

Jag tänkte mig att sätta term = (x-1)^i/i men får inte ut något resultat

Albiki 5096 – Fd. Medlem
Postad: 18 dec 2020 06:56 Redigerad: 18 dec 2020 08:27

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Laguna Online 30472
Postad: 18 dec 2020 08:35

Betyder term=; att term blir 1?

Albiki 5096 – Fd. Medlem
Postad: 18 dec 2020 09:35 Redigerad: 18 dec 2020 09:36
Laguna skrev:

Betyder term=; att term blir 1?

Det betyder att studenten ska fylla i den kod som fattas efter = tecknet. Koden avslutas med semikolon för att undvika visning.

Bnim 12 – Fd. Medlem
Postad: 18 dec 2020 11:11
Albiki skrev:

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Så  innan while-loopen ska term=1? 

Hondel 1377
Postad: 18 dec 2020 11:30
Bnim skrev:
Albiki skrev:

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Så  innan while-loopen ska term=1? 

Nej, eftersom första raden i loopen är s+term så måste du ha term=första termen i summan utanför loopen. 

Bnim 12 – Fd. Medlem
Postad: 18 dec 2020 11:39 Redigerad: 18 dec 2020 11:47
Hondel skrev:
Bnim skrev:
Albiki skrev:

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Så  innan while-loopen ska term=1? 

Nej, eftersom första raden i loopen är s+term så måste du ha term=första termen i summan utanför loopen. 

Så innan loopen är term= (x-1) och inom loopen ska term=serien? Kan vara värt att tillägga att x = 1/3

Albiki 5096 – Fd. Medlem
Postad: 18 dec 2020 12:28 Redigerad: 18 dec 2020 12:30
Bnim skrev:
Albiki skrev:

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Så  innan while-loopen ska term=1? 

Korrigering: Innan snurran ska term vara 2 och inte 1 som jag skrev tidigare.

Bnim 12 – Fd. Medlem
Postad: 18 dec 2020 13:36
Albiki skrev:
Bnim skrev:
Albiki skrev:

Hej,

Det som i koden betecknas ss är partialsummor till ln3\ln 3.

    Si=Si-1+2ii.\displaystyle S_i = S_{i-1}+\frac{2^i}{i}.

och det som betecknas termterm är

    2ii\displaystyle\frac{2^{i}}{i}

och denna term uppdateras för varje steg hos while-snurran.

Innan snurran startar är term lika med 11 och eftersom abs(1)>10-8\text{abs}(1) > 10^{-8} kommer snurran att starta.

Så  innan while-loopen ska term=1? 

Korrigering: Innan snurran ska term vara 2 och inte 1 som jag skrev tidigare.

Det som ska sättas in är x = 1/3 så term = (1/3-1). Men då är problemet i loopen, har prövat sätta term=serien men utan någon lycka. Term = 2^i / i ger ingenting. 

Albiki 5096 – Fd. Medlem
Postad: 18 dec 2020 14:10

Om x=3 så kommer snurran aldrig att stanna eftersom (-2)i/i(-2)^{i}/i divergerar. Det är därför man sätter x=1/3x=1/3 istället och i slutsteget använder att ln1/3=-ln3\ln 1/3 = -\ln 3 för att få den sökta approximationen till ln3\ln 3.

Sätt i=1 istället för i=0 och term till 1/3-1 utanför snurran och term till (-1)i+1·(1/3-1)i/i(-1)^{i+1}\cdot(1/3-1)^{i}/i innanför snurran så går det nog bra.

Svara
Close