partielle numerische Differentiation, numerisch Tensor 2. Stufe

Neue Frage »

wover Auf diesen Beitrag antworten »
partielle numerische Differentiation, numerisch Tensor 2. Stufe
Meine Frage:
Hallo zusammen,

hoffe mir kann jemand weiterhelfen.

Es geht um Folgendes:
ich habe in C eine numerische Funktion in die ich einen Vektor mit 4 Variablen rein schiebe und und einen Wert zurück bekomme.

Den Satz der ersten partiellen Ableitungen habe ich über zentrale Differenzen berechnet.
für die restlichen Variablen analog.

Jetzt muss ich aber noch die 2. partiellen Ableitungen, also den Tensor 2. Stufe berechnen.

Meine Ideen:
irgendwie muss ich ja die zweite Richtung mit rein bringen.
Also hatte ich gedacht ich komme mit

weiter. Allerdings stimmt die Lösung nicht.
Kann mir jemand sagen, ob der Ansatz überhaupt stimmt? bzw. Wie es sonst geht.

Gruß Wover
Lampe16 Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Die Gleichung suggeriert, dass Du Deine Ableitungs-Function für die 2. Ableitungen auch auf die Funktionen anwendest.
wover Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Danke erst mal für die Antwort. Aber analytisch ist mir schon klar, wie das funktionieren sollte. Aber die numerische Umsetzung bereitet mir Schwierigkeiten...
Wie gesagt, ich habe nur die function, quasi als Blackbox in die ich 4 Werte rein gebe und den Funktionswert zurück bekomme. Über zentrale Differenzen ist der Vektor der ersten partiellen Ableitungen einfach zu berechnen.
Aber wie stellst du dir vor, dass ich die partiellen Ableitungen noch mal in die Ableitungs-function schicken soll. Ein bissche konkreter wäre nett.

Gruß
wover

PS: Seh grad dass ich oben nen Fehler gemacht hab. Der Tensor muss logischer weise 4x4 sein.
Lampe16 Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Der folgende Scilab-Code leistet, was ich meine.

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
function Df=Df!(foo,x,k) //Ableitung von foo an der Stelle x nach x(k) 
  xo=x, xu=x
  xo(k)=xo(k)+h, xu(k)=x(k)-h
  Df=(foo(xo)-foo(xu))/2/h
endfunction

function D2f=D2f!(foo,x,j,k) //Ableitung von foo an der Stelle x nach x(j) und x(k)
  xo=x,xu=x
  xo(k)=x(k)+h, xu(k)=x(k)-h
  D2f=(Df!(foo,xo,j)-Df!(foo,xu,j))/2/h
endfunction

//Beispiel
function f=foo(x) //Testfunktion
  f=2*x(1)^2*x(2)+3*x(1)*x(2)^2
endfunction

h=1e-4 //global
x=[2,3]
f=foo(x)
Df=Df!(foo,x,1), Df=Df!(foo,x,2)
D2f=D2f!(foo,x,1,1), D2f=D2f!(foo,x,1,2), D2f=D2f!(foo,x,2,1), D2f=D2f!(foo,x,2,2)


Falls Du die Freeware nicht hast, kannst Du sie von http://www.scilab.org/products/scilab/download downloaden.
wover Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Danke,
hat mich schon viel weiter gebracht. Das ganze Ding auf 4-dimensional bringen werde ich hoffentlich noch hinbekommen.

gruß
wover
Lampe16 Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Das Ding ist von vornherein n-dimensional. Es genügt, die Ableitungsstelle x zu ändern (z.B. x=[3 5 2 7]) und die function foo um Terme mit x(3) und x(4) zu ergänzen.
 
 
wover Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Danke Gott
komm heute wahrscheinlich nicht mehr zum proggn, da ich an der uni bin (und die nur visual express haben Hammer ), werds aber spätestens morgen ausprbieren.
Lampe16 Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Habe gerade noch beim Blättern in der Scilab-Hilfe ein hübsches Kommando gefunden, mit dem Du Deine Rechnungen mit einer einzigen Zeile überprüfen kannst:
code:
1:
[J,H] = derivative(foo,x,H_form='hypermat')

H ist die von Dir angefragte Hesse-Matrix. x ist als Spaltenvektor einzugeben.

Für den Fall, dass Du Dich bisher noch nicht mit der Freeware Scilab (oder dem teuren Bruder Matlab) beschäftigt hast: Nach der Art der Aufgaben, die Du zu lösen hast, finde ich die Software unentbehrlich.
wover Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Hi Lampe16,
ich arbeite bisher wenn möglich mit Matlab, da ich es von der Uni gestellt bekomme. Für diese Aufgabe muss ich allerdings in C bleiben, da mein Prof/Betreuer des halt so will.

Und die Funktion um die es mir geht bekomme ich auch nicht so einfach in MATLAB/SciLab rein da ich in C etwa 800 zeilen code hab. -> Da wird es wohl einfacher sein die ableitung in c mit einer testfunktion zu implementieren.
Lampe16 Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Ich will dich nicht von C abbringen; es ist auch unentbehrlich.

Für Dich als C- und Matlab-Nutzer könnte noch interessant sein, was in der Matlab-Hilfe unter "External Interfaces/API", dort unter "Calling C and Fortran Programs from Matlab" steht.
wover Auf diesen Beitrag antworten »
RE: partielle numerische Differentiation, numerisch Tensor 2. Stufe
Hat alles geklappt.
Danke nochmal

*closed*
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »