| |
|
|
p.specht
| Genauer gesagt handelt es sich hier um den Versuch, die Eulersche Gammafunktion zu invertieren. Dort erhält man aber jeweils um 1 zuviel gegenüber der Faktoriellen-Funktion.
WindowTitle "Mittels Newton-Raphson in der Genauigkeit verbesserte Lambert-W-Funktion"
Cls:Set("decimals",17)
print $profver:waitinput 7000
proc Wu :parameters y!
declare Wu!
if y!>1
Wu!=ln(y!)-ln(ln(y!)) + 0.5*ln(ln(y!))/ln(y!)
else
Wu!=1
endif
return Wu!
endproc
proc Wo :parameters x!
declare Wo!
Wo!=ln(x!)-ln(ln(x!))+ exp(1)/(exp(1)-1)*ln(ln(x!))/ln(x!)
return Wo!
endproc
Declare xn!,x!,y!,epsilon!,i&,max&
y!=1.295' Stabil erst am Haupt-Ast
Repeat
if y! > if($profver="11.2a-NT",10^305 , 10^53)
sound 500,200:sound 300,200
waitinput 20000:end
endif
y!=y!*1.1
max&=4000'Verbesserungs-Läufe
epsilon!=5/10^16:case y!>227.93:epsilon!=5.687/10^14
xn!=Wu(y!)'Startwert (zu klein) für Newton-Raphson
i&=0
Repeat
inc i&
x!=xn!
if ((x!+1)*exp(x!)) = 0
xn!=(Wu(y!)+Wo(y!))/2'dann eben ab hier aus Näherungsformel... ab x~18.56
break
else
xn! = x!-(x!*exp(x!)-y!)/((x!+1)*exp(x!))
endif
until (abs(xn!-x!)<=epsilon!) or (i&>max&)
if i&>max&
print " x-Suche für y=";format$("%g",y!);" nach",i&,"Durchläufen abgebrochen!"
print tab(2);i&,
print tab(10);"Y=";format$("%g",y!),
print tab(23);"x=";format$("%g",xn!),
print tab(50);"err=";format$("%g",abs(x!-xn!))
' print tab(50);"Y2=";format$("%g",xn!*exp(xn!))
sound 2000,200:waitinput
else
print i&,
print tab(5);"Y=";format$("%g",y!),
print tab(29);"x=";format$("%g",xn!),
print tab(52);"err=";format$("%g",abs(x!-xn!))
' print tab(50);"Y2=";format$("%g",xn!*exp(xn!))
endif
if %csrlin>22:waitinput :locate 1,1:endif' cls:endif
Until %key=27
END
|
|
|
| Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 15.05.2021 ▲ |
|
|
|