nichtlineare DGL Problem

Neue Frage »

dabro Auf diesen Beitrag antworten »
nichtlineare DGL Problem
Meine Frage:
Hallo,

ich habe eine nichtlineare DGL bei der ich einfach nicht weis wie ich sie lösen soll. Super wäre es wenn sie exakt lösbar wäre, wenn es aber nur nummerisch gehen sollte wäre es auch super.
Hier die Funktion:
\cos(atan(dy(x)/dx-y(x)/x)*\cos(var_{phi}+atan(dy(x)/dx)=var_1

var_{phi} und var_1 sind Variablen.


Meine Ideen:
Ich habe versucht die Gleichung mit Mathcad zu lösen; leider ohne erfolg :-(

Ich danke schon mal für Hilfe.

Grüße
Jan
Lampe16 Auf diesen Beitrag antworten »
RE: nichtlineare DGL Problem
Es würde mich wundern, wenn die DGl. analytisch lösbar wäre - aber fast nichts ist unmöglich.

Numerisch geht es mit dem impliziten oder expliziten Euler-Verfahren.
dabro Auf diesen Beitrag antworten »
RE: nichtlineare DGL Problem
Hallo Lampe16,

danke für die Antwort. Ich habe versucht das so zu lösen, aber das Problem ist, dass ich die Gleichung so auflösen muss, dass dy/dx=... da steht. Leider kann ich die Gleichung aber nicht nach dy/dx auflösen.
Ich schreibe die Gleichung nochmal hin, da dass das letzt mal mit dem Formeleditor nicht richtig funktioniert hat.



Grüße
Jan
Lampe16 Auf diesen Beitrag antworten »
RE: nichtlineare DGL Problem
Ich habe das auch in einem Wiki gelesen. Ist aber falsch.

Ich schreibe das implizite Eulerverfahren für den ersten Schritt an, um die Notation flach zu halten. Die weiteren Schritte lassen sich leicht auf den ersten zurückführen.

Die gegebene DGl.

............(1)

ist auf die algebraische Gl.

..............(2)

abzubilden, wobei in (1) und (2) dieselbe Funktion bezeichnet (nur vorsichtshalber erwähnt).

In (2) ist im 1. Schritt der Anfangswert und die Unbekannte.

Letztere ist mit Newton als Nullstelle der Funktion iterativ zu bestimmen.

Im nächsten Schritt spielt das eben errechnete die Rolle von im 1. Schritt, usw.. Als Anfangs-Schätzwert für Newton ist jeweils der letzte y-Wert hervorragend geeignet.

Wie du an (1) siehst, werden an die Form der Dgl. praktisch keine Anforderungen gestellt. Jede "Kraut- und Rüben-Dgl." ist damit zu bearbeiten.

Jetzt kannst du vielleicht schon losprogrammieren.
dabro Auf diesen Beitrag antworten »

Hallo,
erst mal wieder vielen Dank Lampe16! Deine Tipps bringen mich schon weiter auch wenn ich noch immer auf dem Schlauch stehe :-)

Ich habe mal in Scilab angefangen die ganze Sache zu programmieren, aber es gibt noch mehrere Baustellen:
Hier mal der Programmcode:

------------------------------------
eps=0.0000001;
eps2=0.0001;
y0=0.03
x0=0.12;
h=0.1;
var_1=5;
var_phi=0.2;


function y=g(x0,y0,y1,h)
y=(cos(atan(y1-y0/h-y0/x1))*cos(var_phi+atan(y1-y0/h))*1/var_1)
endfunction


function ye=euler(g,eps,eps2)
while norm(res)>eps
while norm(res2)>eps2
y1= newton2
res=y1-y0
end
y=y0+h*g(x0,y0,y1,h);
disp(y);
res=y-g(x0,y1,y,h);
y0=y1;
y1=y;
end
endfunction

disp(g(x0,y0,y1,h));
disp("Berechnung des x-Wertes mittels des Euler-Verfahrens");

euler(g,eps,eps2)
------------------------------------------------------------------

Das Problem ist, dass die Anweisung des impliziten Euler-Verfahrens ja lautet:



wie soll das gehen, wie kann ich ausrechnen wenn es von sich selbst abhängig ist? Ich bin einfach mal davon ausgegangen, dass ich ein anderes y ausrechne.

Das zweite Problem ist, dass ich nicht weiß was ich jetzt eigentlich beim Newtonverfahren ausrechnen soll. Klar ich brauche y1, aber ich brauche doch eigentlich auch noch einen x-Wert. Bz. ich habe eine Schrittweite zum nächsten x-Wert. D.h. ist nichts anderes als h oder liege ich da falsch.

Oh man, ich tue mich mit der Numerischen Mathematik immer so schwer :-)

Grüße
Jan
Lampe16 Auf diesen Beitrag antworten »

Ich bleibe bei meiner einfachen Notation, die den 1. Eulerschritt beschreibt:

Du suchst mit dem Newton-Verfahren die Nullstelle der Funktion



Dabei habe ich den var-Konstanten gefälligere Namen gegeben. In der Funktion ist außer der Variablen alles bekannt.


Das Newton-Verfahren würde ich zunächst nicht selber kodieren, sondern den Scilab-Befehl fsolve(...) benutzen. Später kannst du ja auch für Newton noch einen Eigenbau anfertigen.

Melde dich bitte, ob du vorankommst.
 
 
dabro Auf diesen Beitrag antworten »

So wie es aussieht kann ich das was ich bisher gemacht habe so ziemlich vergessen - ganz viel Müll ist es leider :-)

Ok, danke, ich glaube das mit dem fsolve habe ich hin bekommen, hier das Programm:

---------------------------------
var_1=20;
var_phi=0.05;
h=0.01;
y0=0.04;
x0=0.10;


function Z=myequ(y1)
Z = cos(atan((y1-y0)/h)-y1/(x0+h))*cos(var_phi+atan((y1-y0)/h))-var_1
endfunction

z=fsolve([x0],myequ);
disp(z);
--------------------------------

Wenn ich die Anfangsbedingung von fsolve x0 nur leicht variiere, dann kommt immer was komplett anderes raus. Ich glaube die Funktion oszilliert sehr stark um Null - ist natürlich nicht optimal mit dem vielen Cosinus :-) Ich hoffe das der Wert bei x0 halbwegs stimmt.

Wie wende ich jetzt die implizite Euler-Verfahren an? Ich kann ja nicht nach y`auflösen.
Lampe16 Auf diesen Beitrag antworten »

Bevor du weiter kodierst, schau dir erst deine Formel



nochmal an. Die hat 7 "(" und 5 ")". Bitte berichtigen!

Zweiter Punkt: Ist klar, dass die Dgl. eine Lösung hat? Sonst üben wir am untauglichen Objekt.
Lampe16 Auf diesen Beitrag antworten »

Ich liefere mal ein einfacheres Beispiel nach:

//Dgl. y'+y=10 //sin(x)
xa=0; ya=0; //Anfangswerte der Dgl.
h=0.01;

function y=g(y1)
dydx=(y1-y0)/h
y=dydx+y1-10// sin(x1)
endfunction

X(1)=xa;
Y(1)=ya;
for k=2:1500
x0=X(k-1);
x1=x0+h;
X(k)=x1;
y0=Y(k-1);
[Y(k),v]=fsolve(y0,g);
end
xdel();plot(X,Y)

Wenn du die "10" gegen die sin-Terme austauschst, hast du ein 2. Beispiel.
dabro Auf diesen Beitrag antworten »

Perfekt, so langsam komme ich dahinter. Es geht also nur darum die Gleichung nach dem Euler-Ansatz gleich Null zu setzen und dann die Nullstellen mit dem Newton-Verfahren auszurechnen und dann die errechnete Nullstelle wieder als x0 für das Newton-Verfahren zu verwenden. Ich dachte immer ich muss das nach dem Newton-Verfahren wieder irgendwie in das Euler-Verfahren integrieren.

Die DGL von mir ist noch etwas vereinfacht dargestellt. Die Variablen die ich definiert habe haben bis jetzt nur Schätzwerte. Ich habe die DGL durch ein mechanisches Problem erhalten und habe die Abhängigkeiten von äußeren Konstanten herausgerechnet. Ich muss da aber nochmal was umstellen. Aber da ich jetzt weiß wie ich eine Lösung für die DGL bekomme denke ich das ich die Lösung hinbekomme.
Wenn man es mal verstanden hat ist es schon ein schönes Gefühl. Irgenwie habe ich bei der Nummerischen Mathematik nur immer erst ein Brett vor dem Kopf.

Nochmal vielen Dank. Es wird jetzt ein weilchen dauern bis ich die ganzen Sachen umgestellt habe. Ich habe meine ganzen vorangegangenen Rechnungen mit Matcad erstellt und damit ist schlecht nummerisch zu rechnen. Ich baue das jetzt alles mal auf Scilab um und poste dann nochmal meine Ergebnisse.

Grüße
Lampe16 Auf diesen Beitrag antworten »

Zitat:
Original von dabro
Perfekt, so langsam komme ich dahinter. Es geht also nur darum die Gleichung nach dem Euler-Ansatz gleich Null zu setzen und dann die Nullstelle[n] mit dem Newton-Verfahren auszurechnen und dann die errechnete Nullstelle wieder als x0 für das Newton-Verfahren zu verwenden.


Genau das isses. Viel Erfolg beim Weitermachen! Das Schöne an Euler ist einfach, dass die Dgl. so verschachtelt sein kann, wie sie will. Alle algebraischen Kunststückchen nimmt einem der alte Newton ab.
dabro Auf diesen Beitrag antworten »
mehrere nicht auflösbare DGLs
Hallo,

mein Problem ist leider noch etwas komplexer geworden und ich weiß wieder nicht mehr weiter:

Ich habe nach wie vor eine DGL dieser Art:



( ist die Veränderliche Variable, d1 und L1 sind Konstanten, ist eine externe vorgegebene Funktion)

Leider lässt sich das dydx nun nicht auflösen und bleibt ebenfalls als DGL stehen:



Jetzt müsse dydx nach sich selbst aufgelöst werden, aber in Abhängigkeit der Variable x1 (x0 und y0 sind Kostante Werte), sonst kann ich sie nicht oben einsetzen.

Gibt es dafür auch ein Verfahren welches zwei DGLs berücksichtigt? Gefühlt steigt dabei der Rechenaufwand mit n², liege ich da ungefähr richtig?
Gibt es denn ein gutes Programm (am besten Open Source) welches diese Gleichung Symboisch auflösen kann?

Vielen Dank und Grüße
Jan
Lampe16 Auf diesen Beitrag antworten »
RE: mehrere nicht auflösbare DGLs
Hallo Jan,
m. E. ist z. B.
Zitat:
Original von dabro

ein sinnloser Ausdruck. Ich glaube, du musst zuerst an der Aufstellung der Dgl. arbeiten, bevor die Lösung Sinn macht.
dabro Auf diesen Beitrag antworten »

Hallo Lampe16,

ich verstehe nicht ganz was du meinst. dydx steht für y'. atan(y') gibt mir den Winkel der Steigung von y wieder, oder?

Hier nochmal korrekt geschrieben:



Nach dem Euler-Verfahren subsituiere ich dann y' durch dydx= (y1-y0)/(x1-x0). y und x sind in meinem Fall über einen geometrischen Zusammenhang abhängig und es ergibt sich:



Grüße
Jan
Lampe16 Auf diesen Beitrag antworten »

Zitat:
Original von dabro
Du schreibst:



wobei die Ableitung der gesuchten Fuktion ist. ist eine gegebene Funktion. Und alle anderen Größen sind Konstanten.
Verstehe ich das so richtig?
dabro Auf diesen Beitrag antworten »

Hmm, nicht so ganz:

, das passt.
ist eine Variable die vorgegeben wird, sie ist nicht von x abhängig.
x1 soll berechnet werden.
Die Funktion ist nur von abhängig und damit für die Rechnung eigentlich eine Konstante.

Verdammt :-) wenn ich es nun so anschaue kommen ja bis auf y' eigentlich nur Konstanten in meiner Gleichung vor, damit dürfte es wohl kein Problem sein die Gleichung zu lösen :-)

Hmm, ich muss glaube ich mal schauen ob ich die Sache richtig aufgestellt habe.

Danke schon mal, manchmal steht man einfach wie der Ochs vorm Berg :-)

Grüße
Jan
Neue Frage »
Antworten »



Verwandte Themen

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