| |
|
|
p.specht
| Das Newton-Raphson-Verfahren funktioniert auch mit Funktionen in 2 Dimensionen, sprich: z =Z(x,y). Leider ist das Verfahren insofern eher anspruchsvoll, als die sog. partiellen Ableitungen der bekannten Funktion (nach x und nach y) ebenfalls bekannt sein sollten. Bei nicht allzu komplizierten Formeln sollte das aber gehen. Liegen allerdings nur Zahlen / Datensätze, z.B. mit Messwerten circa 2 Dimensionen vor, dann empfehlen sich andere, rein numerische Verfahren, z.B. Nelder-Mead udgl.
Hinweis: Die hier einprogrammierten Funktionen wurden gewählt, um die Auswirkungen der heiklen Wahl des Startpunktes auf das Ergebnis darzustellen.
WindowTitle "Gradientenabstieg (Newtonverfahren in 2 Dimensionen)"
AppendMenuBar 100,"Geg.: Z(x,y)=(x+sin(y))*exp(-sqr(x)*-sqr(y)) Ges.: Ort des lokalen Minimus"
Window 0,0-%maxx,%maxy-40:font 2
declare z!,x!,y!,xh&,yh&,f!,g!,s!
xh&=width(%hwnd)\2:yh&=height(%hwnd)\2
g!=1.5:s!=0.1:f!=220
proc Z :parameters x!,y!
return (x!+sin(y!))*exp(-sqr(x!)-sqr(y!))
endproc
proc dZdx :parameters x!,y!
return exp(-sqr(y!)-sqr(x!))*(1-2*x!*(x!+sin(y!)))
endproc
proc dZdy :parameters x!,y!
return exp(-sqr(y!)-sqr(x!))*(cos(y!)-2*y!*(x!+sin(y!)))
endproc
' ------ Z-Feld darstellen ----
cls
x!=-g!:Repeat
y!=-g!:While y!<=g!
z!=Z(x!,y!)
usepen 0,7+7*z!,rgb(0,0,400*z!)
line xh&+x!*f!+z!*7,(yh&-y!*f!-z!*11) - xh&+x!*f!,yh&-y!*f!
y!=y!+s!:endwhile
x!=x!+s!:until x!>=g!
'-------------------------------------------------------
' Gradientenabstieg
'-------------------------------------------------------
declare gstep!,xx!,yy!,xxo!,yyo!,dx!,dy!,dz!,eps!,n&,xxx!,yyy!
gstep!=0.15
whileloop 50,-50,-5:yyy!=&Loop/50
whileloop -50,50,5 :xxx!=&Loop/30
xx!=xxx!
yy!=yyy!'Startpunkt
n&=0
REPEAT
dx!=dZdx(xx!,yy!)
dy!=dZdy(xx!,yy!)
xxo!=xx!:yyo!=yy!
xx!=xx!-dx!*gstep!
yy!=yy!-dy!*gstep!
usepen 0,4,rgb(255,0,0)
line xh&+xx!*f!,(yh&-yy!*f!)-xh&+xx!*f!,yh&-yy!*f!
locate 2,2:print xx!,yy!,Z(xx!,yy!),n&;" "
inc n&
UNTIL ((xx!=xxo!) and (yy!=yyo!)) or (n&>=250)
WEND
WEND
beep
waitinput
End
|
|
|
| XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 28.05.2021 ▲ |
|
|
|