Hallo Fritz,
danke für deine schnelle Antwort!
Leider funktioniert das ganze noch nicht. Wenn ich aus dem Pdouble ein double mache, also die Matrix zurück gebe, kommt die Fehlermeldung '
Access Violation at ....: read of the address ...'
Eine andere Funktion der gleichen
DLL ist auch so aufgebaut, nur mit dem Unterschied keine Matrix(*
df[]) sondern eine normale Variable (*y). Ich habe es bei dieser Funktion auch so gemacht, dass ich auf diese Adresse schreibe mit y^:=, siehe unten. Hat alles wunderbar funktioniert!
Code:
function f(k:integer; x: Tarray; y: Pdouble): integer; cdecl;
begin
if k=0 then
begin
y^ := x[0]*x[0]/4 + x[1]*x[1]/5 + x[0] - 0.5;
end else
begin
y^ := x[0]*x[0]/4 + x[1]*x[1]/2 + x[1] - 0.5;
end;
result := 0;
end;
C-Funktionsaufruf:
Code:
int f( int k, double x[], double *y)
Mit der Beschreibung der Funktion:
Code:
Funktion, welche das n × n–System beschreibt.
In
int k;
double x[], y;
...
f( k, x, &y);
...
wird der Wert der k-ten Komponentenfunktion des Systems an der Stelle x
(Vektor der Länge n) berechnet und das Ergebnis (also eine Zahl) nach y geschrieben.
(Im Gegensatz zum Verfahren newt berechnet hier die Funktion f
nur eine Komponente des nicht linearen Systems!)
Ich stehe im Moment ziemlich auf der Leitung wie ich das mit dem Pointer auf das Array (bzw. Matrix) realisieren soll.
Vielleicht hat noch jemand eine Idee?
Gruß Johannes