WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Euler Verfahren in 4 Schritten - DGL

 

baller
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2012, 18:56     Titel: Euler Verfahren in 4 Schritten - DGL
  Antworten mit Zitat      
Hallo an alle Experten ich komm wieder mal mit einer Aufgabe nicht weiter.

Aufgabe:

Schreiben Sie eine octave-Funktion euler_no2, die für
das Anfangswertproblem zur chemischen Reaktion von Stickstoffdioxid:
DGL:
y ′ (t) = −k · y(t)2 ,
Startwert:
y(0) = 5,
k = 0.54,

mehrere Schritte des Euler-Verfahrens ausführt. Die Funktion soll in der Form
euler_no2(h,n)
aufrufbar sein, wobei h die Schrittweite und n die Anzahl der durchzuführenden Schritte ist.

Zum Testen:
Mit
euler_no2(0.1,4)
müssen sich folgende Ergebnisse,
y=3.6500
y=2.9306
y=2.4668
y=2.1382

ergeben.

Meine bisherigen Denkansätze sehen ungefähr so aus

DGL:
y ′ (t) = −0.54 · y(t)2 ,
Startwert:
y(0) = 5,
Anzahl der schritte:
4
Schrittweite:
0.1

Also ich habe die Aufgabe komplett Mathematisch gelöst (Blatt und Taschenrechner)
Bekomme es aber einfach nicht hin, dies in Matlab/Octave umzusetzen.

Krieg immer irgendwelche Fehlermeldungen.
Hat hierzu jemand eventuell ein anpassbares Skript? bzw. Hilfreiche Tipps für den Anfang?

Komm einfach nicht weiter. Ich hoffe hier ein paar "Profis" zu finden die mir bei der Lösung behilflich sein könnten.

Bedanke mich schon mal für alle Vorschläge und Hilfestellungen.

MFG
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.12.2012, 22:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Hat hierzu jemand eventuell ein anpassbares Skript?

Sollten sich mit Forum- oder Googlesuche finden lassen.

Zitat:
Krieg immer irgendwelche Fehlermeldungen.

Dann zeig doch mal, was du versucht hast.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 14:12     Titel:
  Antworten mit Zitat      
Zuersteinmal danke für die Hilfsbereitschaft.
Hab gestern erstmal ruhen lassen. ('Laughing')
Hier mal mein bisheriger Versuch:

Code:
% Schrittweite h
h=0.1;
 
%Startwerte
y_0=5;
t_0=0;
 
%Näherungslösung auf Intervall [t_0,b]

 
% Anzahl der Iterationen
n=4
 
%DGL
f=@(t,y)-0.54*y;
 
%Euler-Verfahren (Iteration)
poly_y(5)=y_0;
t(0)=t_0;
 
for i=1:n
 
    poly_y(i+1)=poly_y(i)+h*f(t(i),poly_y(i));
    t(i+1)=t(i)+h;
 
end


Hab versucht ein fertiges Skript an meinen Aufgabe anzupassen, klappt aber irgenwie nicht... .

Ich bedanke mich schon mal recht herzlich für alle Vorschläge und Hilfen.

euler.m
 Beschreibung:

Download
 Dateiname:  euler.m
 Dateigröße:  293 Bytes
 Heruntergeladen:  1118 mal

_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.12.2012, 14:20     Titel:
  Antworten mit Zitat      
Hallo,

das Problem ist t(0)=t_0. Matlab indiziert ab 1.

Grüße, Marc
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 14:55     Titel:
  Antworten mit Zitat      
Ich habs jetzt noch einmal mit komplett eigener Logik probiert.

Und kann nun besser beschreiben wo das Problem liegt.

Im Eulerverfahren muss verwendet man ja die allgemeine Form.
y=y(n+1) + f(t(n+1);y(n+1)

Die werte vorher müssten ja in die allgemeine Form gebracht werden.
Nach meienr Logik innerhalb der for-Schleife

und genau das bekomm ich irgenwie nicht richtig hin...

Hier nochmal mein selbst erstellter code:
Code:
%Schrittweite
h=0.1;

%Startwerte
t_0=0;
y_0=5;

%DGL
k=0.54;
f= -k*y^2

%allgemeine Form:

for i=1:4
 
   y_n(i+1)=y_n(i)+f(t(i),y_0(i))*h
 
end


Danke schon mal an alle helfenden Köpfe. Wink
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.12.2012, 15:40     Titel:
  Antworten mit Zitat      
Code:

%Schrittweite
h=0.1;

%Startwerte
y_n(1)=5;

%DGL
k=0.54;
% Die rechte Seite hängt nicht von t ab
f=@(y) -k*y.^2;

%allgemeine Form:
for i=1:4-1
   y_n(i+1)=y_n(i)+f(y_n(i))*h
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 15:50     Titel:
  Antworten mit Zitat      
Hallo,
thx für die Anregungen.

@matfam:
Meinst du die null bei t_0 oder t(0)?
t_0 ist ja nur die Variable. Und sollte keine Problem verursachen.

und bei t(0) wird der y-wert 5. Ich kann die Startwerte ja nicht einfach ändern.

Das Problem ergibt sich auch erst bei der for-Schleife (s. neuen Post) vorher stimmt ja alles soweit. Werte werden richtig in die DGL übernommen.

Hab nur Probleme in der Schleife... ???? Ich glaub irgendwas an der Formel schient noch nicht richtig zu sein.
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.12.2012, 16:03     Titel:
  Antworten mit Zitat      
Ne, vorher stimmte auch so einiges nicht. Ich weiß nicht, wo dein Problem ist. t(0) funktioniert nicht. Matlab unterstützt das nicht. Indizes beginnen mit 1! Überhaupt bedeutet t(i) und y_n(i) nicht sowas wie f(i), also nichts Funktionales. Mit i zählt man lediglich die Wertepaare durch. Man kann mein Beispiel noch mit dem Zeitvektor erweitern:

Code:

%Schrittweite
h=0.1;

%Startwerte
t_n(1)=0;
y_n(1)=5;

%DGL
k=0.54;
% Die rechte Seite hängt nicht von t ab
f=@(y) -k*y.^2;

%allgemeine Form:
for i=1:4-1
   y_n(i+1)=y_n(i)+f(y_n(i))*h;
   t_n(i+1)=t_n(i)+h;
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 16:35     Titel:
  Antworten mit Zitat      
Ah ok das mit den Indizes hatt ich falsch verstanden.sorry und ein herzliches Dankeschön an dich (MaFam).
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.12.2012, 16:48     Titel:
  Antworten mit Zitat      
Prima. Smile

P.S. Der Sinn des Lebens ist übrigens nicht die Sinngebung, sondern, bloß nicht nach einem Sinn zu fragen... (Nicht ganz ernst gemeint.)
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.12.2012, 17:48     Titel:
  Antworten mit Zitat      
Hallo MaFam,

Der Sinn des Lebens liegt in einem psychogonischen Würfel der Kantenlänge 10.

Beweis:
Code:
1 + 2 + 3 + 4 = 10

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 10.12.2012, 18:41     Titel:
  Antworten mit Zitat      
Ein "psychogonischer Würfel"... Selbst google weiß nichts darüber. Dann muss es ein sehr tiefer Sinn sein. Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2012, 18:48     Titel:
  Antworten mit Zitat      
noch mal vielen Dank an alle Helfer besonders an MaFam.

Das wäre meine bisherige "Musterlösung" zur Aufgabe.

Code:
%Schrittweite
h=0.1;

%Startwerte
t_n(1)=0;
y_n(1)=5;

%DGL
k=0.54;
% Die rechte Seite hängt nicht von t ab
f=@(y) -k*y^2;

%allgemeine Form:
for i=1:4
   y_n(i+1)=y_n(i)+f(y_n(i))*h;
   t_n(i+1)=t_n(i)+h;
end
y_n(1);
y_n(2)
y_n(3)
y_n(4)
y_n(5)


Müsste nur noch die Aufrufbarkeit "euler(h,n)" integrieren.
Falls hierzu noch jemand tipps hätte -jederzeit-.
Aber für heute mach ich erstmal Schluss.
Danke an alle und allen im Forum noch einen schönen Abend Very Happy
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
MaFam
Forum-Meister

Forum-Meister


Beiträge: 799
Anmeldedatum: 02.05.12
Wohnort: ---
Version: R2009b
     Beitrag Verfasst am: 11.12.2012, 09:56     Titel:
  Antworten mit Zitat      
Nun, dann packst du noch einen Funktionskopf darüber und übergibst die entsprechenden Parameter. Als Rückgabewerte eignen sich natürlich t_n und y_n.
Private Nachricht senden Benutzer-Profile anzeigen
 
baller
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 21.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.12.2012, 20:30     Titel:
  Antworten mit Zitat      
Servus,
an alle nochmal.

des ist mein ergebniss bisher, dank aller helfenden Köpfe. Wink

Code:

%Schrittweite
h=0.1;
function [ y_n ] = euler_no2( h,n );

%Startwerte
t_n(1)=0;
y_n(1)=5;

%DGL
k=0.54;
f=@(y) -k*y^2;

%allgemeine Form:
for i=1:n;
   y_n(i+1)=y_n(i)+f(y_n(i))*h;
   t_n(i+1)=t_n(i)+h;
end
y_n(2:i+1)
endfunction


Bei der Ausgabe haut es mir jetzt immer zwei "ans=" rauß.
Eine mit den Näherungslösungen (für die Parameter n & h). und einen immer inkl. dem Startwert 5.

Kann man des irgend wie unterbinden? Auch wenn es sich nur noch um einen Schönheitsfehler handelt. Wink

Aber wie gesagt die Hauptprobleme wurden dank kompetenter Hilfe beseitigt. Smile

Schönen Abend an alle und eventuell kommt ja noch ein Tipp zum Schönheitsfehler.
_________________

Der Sinn des Lebens ist dem Leben einen Sinn zu geben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.