Vinnaren i pepparkakshustävlingen!
2009-02-03, 23:28
  #1
Medlem
Efter att i en tidigare tråd ha blivit rekommenderad Lamberts W-funktion för att lösa ekvationen 5*1.6^z-z=5*10^6 så har jag nu tagit en titt på det hela, och förstår ungefär vad teorin bakom det är. Vissa frågetecken kvarstår dock.

Först och främst, wikipedias exempel: Jag har vridit fram och tillbaka på den under hela eftermiddagen nu, utan att riktigt greppa den. Det vore hemskt uppskattat om någon kunde fylla i luckorna:

Citat:
[T]he equation

p^{a*x + b} = c*x + d

where

p>0 and c,d!=0

can be transformed via the substitution

-t = a*x +a*d/c

into

t*p^t = R = -(a/c)*p^(b-a*d/c)

giving

t =W(R*ln(p))/ln(p)

which yields the final solution

x = -W(-(a*ln(p)/c)*p^(b-a*d/c))/(a*ln(p)) - d/c

Jag fastnar ungefär när man byter ut t, och har fruktansvärt svårt att få hela grejen rätt. Skulle någon orka vara pedagogisk nog att gå igenom den lite mer steg för steg, så att jag får rätsida på det hela? Då jag verkar få fel svar när jag applicerar formeln 'blint' efter wikipedias instruktion, misstänker jag att det är just i det här steget som jag fular till saker, alternativt så har jag missat att den inte är applicerbar på något vänster. Mitt svar borde ligga på runt 30 eller så; när jag matar in uttrycket i 'Qalculate!' blir mitt svar runt -5*10^6, dvs -d/c om man applicerar formeln direkt.

I övrigt är jag mest i behov av några förtydliganden. Funktionen W(z) är alltså helt enkelt en funktion som man definierat till att vara inversen av f(x)=xe^x, och inte en faktisk funktion som det finns ett enkelt uttryck för, annat än som inversen av f(x)? På vilken nivå inom matematiken stöter man normalt på Lambert W:s funktion? Vet någon hur bedömare inom IBO skulle se på att man använde sig av konceptet i en portfolio? Stort tack på förhand, all hjälp är verkligen guld värd.
Citera
2009-02-04, 00:52
  #2
Medlem
Jag har läst en hel del matematik på högskolan, och där har aldrig varit någon som nämnt LambertW. Vad jag kan se så tjänar det ingenting till att lösa ut x med LambertW eftersom den ändå måste evalueras numeriskt, och då kan du lika bra ta och lösa ekvationen numeriskt direkt.
Citera
2009-02-04, 01:35
  #3
Medlem
Nä, även fast det var jag som länkade till skiten, så blir jag lite konfundersam.

Exemplet på wikipedia, 2^t = 5t har ju dels en lösning i t ~ 0.2355, men även en lösning då t ~ 4.48785 och hur man hittar den senare med hjälp av W() är för mig oklart.

Vad är det för kurs du fått den uppgiften i? Kanske vill de att du helt enkelt skall inse att du kan skippa termen "-z" och uppskatta lösningen som z ~ 6*ln(10)/ln(1.6) ~ 29.4 ?
Citera
2009-02-04, 08:21
  #4
Medlem
Citat:
Ursprungligen postat av Larsson85
Jag har läst en hel del matematik på högskolan, och där har aldrig varit någon som nämnt LambertW. Vad jag kan se så tjänar det ingenting till att lösa ut x med LambertW eftersom den ändå måste evalueras numeriskt, och då kan du lika bra ta och lösa ekvationen numeriskt direkt.
Med det resonemanget kan man lika väl hävda att exp, ln, sqrt, sin m.fl. är meningslösa.
Citera
2009-02-04, 10:18
  #5
Medlem
Naturligtvis skulle jag kunna utvärdera den numeriskt, men för mig har det här blivit mer intressant för förståelsen i sig än för uppgiften. Dessutom ser det ganska mycket 'fräschare' ut om man slänger in Lambert W istället för en sketen numerisk uppskattning när man räknar ut det, det ger ett mått av exakthet skulle man väl kunna säga.

Kursen jag läser är Higher Level Math, vi har aldrig nämnt Lambert W. Då uppgiften är en del av en portfolio kan jag inte bara slänga bort z, det skulle människorna som rättar det hela få tokspatt av.

Återigen, ingen som skulle orka ge mig en walkthrough av den härledning jag postade i mitt första inlägg?
Citera
2009-02-04, 12:44
  #6
Medlem
Härledning av vad? Wikipedias slutgiltiga formel för x?

Börja med 5*1.6^z-z=5*10^6 och skriv om det på samma form som på Wikipedia, d.v.s

1.6^z = (1/5)*z + 10^6

eller

p^z = c*z +d, (1)


där p = 1.6, c = (1/5) och d = 10^6 (a = 1, b = 0).

Gör substitutionen -t = z + d/c, d.v.s z = -t - d/c. Insatt i (1) får du att

p^(-t - d/c) = c*(-t - d/c) + d = -c*t - d + d = -c*t.

Substitutionen tar alltså bort den konstanta termen i högerledet. Ytterligare omskrivning ger att

-(1/c)* p^(-d/c) = t*(p^t).

För att använda W-funktionen vill du skriva om högerledet på formen t*e^t.

Använd att p^t = e^ln(p^t) = e^(t*ln(p)).

t*e^(t*ln(p)) = -(1/c)*p^(-d/c).

Multiplicera bägge led med ln(p),

t*ln(p)*e^(t*ln(p)) = -(ln(p)/c)*p^(-d/c).

Sätt y = t*ln(p)

y*e^y = -(ln(p)/c)*p^(-d/c).

Använd att x*e^x = y ger att x = W(y), d.v.s

y = W(-(ln(p)/c)*p^(-d/c))

eller, eftersom y = t*ln(p),

t = W(-(ln(p)/c)*p^(-d/c))/ln(p).

Slutligen, byt tillbaka till z genom t = -z - d/c

-z - d/c = W(...)/ln(p),

z + d/c = -W(...)/ln(p),

z = -W(...)/ln(p) - d/c,

vilket är formeln på Wikipedia. Hur du sedan går vidare vet jag faktiskt inte. Argumentet till W() är ju i princip noll, eftersom du får

... = -(ln(1.6)*5)*1.6^(-5*10^6), och 1.6^(-5*10^6) är otroligt litet.

Då W(0) = 0 skulle det alltså bli

z = -0/ln(1.6) - 5*10^6 = -5*10^6,

vilket är helt galet. Förmodligen är det W-funktionens flervärdighet som spökar, men jag har förträngt komplexanalysen.

Någon annan kanske ser vad som är fel?

Edit: Eller galet och galet, z = -5*10^6 är ju en "lösning" eftersom du får att 5*1.6^(-5*10^6) -(-5*10^6) ~ 5*0 + 5*10^6 = 5*10^6.
__________________
Senast redigerad av Anencefali 2009-02-04 kl. 12:54.
Citera
2009-02-04, 14:30
  #7
Medlem
Anencefali, tack. Och jo, det blir otroligt litet, jag får nämligen precis samma svar. Jag får vad jag tror är rätt svar om jag i svaret tar det absoluta värdet av 5*10^6, om jag tänker bort minustecknet med andra ord. Då ser det hela ut ungefär såhär:

−(W(5⋅1.6^(5⋅10^6)⋅log(1.6)))/log(1.6)+5⋅10^6

vilket ger att z är ungefär 30, vilket stämmer väl överens med svaret jag förväntar mig. Då är frågan bara, hur fasiken kommer man dit? Jag sitter och pillar här allt eftersom, men känn er fria att slänga in ett inlägg om ni får någon form av uppenbarelse rörande det hela.
__________________
Senast redigerad av nonamenikos 2009-02-04 kl. 14:34.
Citera
2009-02-04, 23:09
  #8
Medlem
evolutes avatar
Det handlar främst två saker. För det första är argumentet till funktionen för litet för att en dator ska hantera det, för det andra ligger den lösning du är ute efter inte på W-funktionens principialgren.

Om jag plottar principialgrenen i blått i MATLAB som i figuren nedan ser man att den lösning som hittas är den nära origo, eftersom argumentet x ≈ 0. Den andra lösningen som ger ett z runt 30 ges på den andra grenen, plottad i rött, för ett extremt litet argument x som ger ett värde på W-funktionen kring ~ -10^6 så att de två termerna balanseras.

I MATLAB har jag plottad grenen med beteckning k = -1 för att få den röda kurvan.

http://i39.tinypic.com/34gadmf.jpg

Det går dock att räkna ut ett värde på z om vi använder någon lämplig asymptotisk form av W. Definitionen för Lambertfunktionen är x = W(x)exp(W(x)). Betrakta negativa x och stora värden av -W(x). Då kan vi skriva (-x) = -W(x)exp(W(x)) och tar man logaritmen av båda sidor så får vi
ln(-x) = ln(-W(x)) + W(x) ≈ W(x)
eftersom den linjära termen dominerar den logaritmiska. En första approximation är alltså W(x) ≈ ln(-x). Använder vi detta får vi dock i detta problem
z0 ≈ -ln(5ln(1.6)*1.6^(-5*10^6))/ln(1.6) - 5*10^6 = -ln(5ln(1.6))/ln(1.6) ≈ -1.82
vilket uppenbarligen inte är rätt. Låt oss istället göra så att vi stoppar in vår första grova approximation i den logaritmiska slasktermen vi slängde bort så att vi har
ln(-x) ≈ ln(-ln(-x)) + W(x)
vilket ger
W(x) ≈ ln(-x) - ln(-ln(-x)).
Detta ger i vårt problem
z1 ≈ z0 + ln(-ln(5ln 1.6) + 5*10^6*ln(1.6))/ln(1.6) ≈ 29.3945
vilket är rätt till fjärde decimalen (minst). Om vi vill kan vi fortsätta nästla approximationer på det här sättet men det verkar inte behövas.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback