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

 

zyx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2018, 14:49     Titel: Euler-Verfahren
  Antworten mit Zitat      
Hallo zusammen,

ich soll eine function schreiben, die das explizite Euler-Verfahren anwendet.

Mein Code:

Code:

tspan = linspace(0, 1/nu, 1000);
y0    = [1, 0];
f_dydt = @(tspan,y) [y(2); -y(1)*w_0^2];
w_0 = 2*pi*0.1;

function [tspan, y] = ode_euler(f_dydt, tspan, y0)
% Explizites Euler-Verfahren
    h = 0.01; % diff(tspan);
    y = y0;
    t = tspan(1);
% Iteration
for k = 1:length(tspan)
y = y + h * feval(f_dydt,t,y);
t = t + k * h;
end
 


Ich möchte einen Vektor bzw. eine Matrix y erhalten, wobei y(k)
die Lösung zum Zeitpunkt t(k) ist.

Leider bekomme ich immer nur eine 2x2 Matrix.

Bin für jede Hilfe sehr dankbar! Smile

Vielen Dank schon mal im Voraus
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: 23.06.2018, 15:06     Titel:
  Antworten mit Zitat      
Hallo,

und welches Ergebnis erwartest du?

Eine Empfehlung wäre, konsequent mit Zeilen- oder Spaltenvektoren zu arbeiten. Momentan ist y0 ein Zeilenvektor und f_dydt liefert einen Spaltenvektor.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2018, 16:03     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine schnelle Antwort und für den Tipp!

Ich möchte eigentlich jedes Ergebnis. Also sollte es in diesem Beispiel eine [1000 x 2] Matrix (1000 Zeitpunkte, 2 Startpunkte).
Ich habe auch schon versucht, die Matrix aufzufüllen, also:

Code:

function [tspan, y] = ode_euler(f_dydt, tspan, y0)
% Explizites Euler-Verfahren
    h = 0.01; % diff(tspan);
    y = zeros(length(tspan),length(y0));
    t = zeros(length(tspan));
    y(1,:) = y0;
% Iteration
for k = 2:length(tspan)-1
t = t(k) + k * h;
y = y(k,:) + h * feval(f_dydt,t(k),y0);
end
 


Aber ich verstehe nicht, wie ich den Index definieren muss, damit es klappt?
(index exceeds matrix dimensions)

Danke für deine Hilfe!
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: 23.06.2018, 16:36     Titel:
  Antworten mit Zitat      
Hallo,

hast du dir das ganze schon mal im Debugger angesehen? Da sollte dir z.B. auffallen, dass die Definition von t so nicht sinnvoll ist, denn es wird eine quadratische Matrix.
Auch ist es sicher nicht sinnvoll, die Funktion immer wieder bei y0 auszuwerten.
Die Zeile y = y(k,:) + ... ist nicht sinnvoll. Vermutlich meinst du etwas wie
Code:
y(k,:) = y(k-1,:) + ...


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2018, 17:44     Titel:
  Antworten mit Zitat      
Hallo,

danke für deine Antwort!

Den Debugger habe ich leider nicht zur Verfügung. Soweit ich das nun verstanden habe
müsste es dann so etwas wie:

Code:

for k = 2:length(tspan)
y(k,:) = y(k-1,:) + feval(f_dydt,tspan(k)*k,y(k-1,:))';
end
 


sein? Die size würde passen aber das Ergebnis nicht...
Bin ich zumindest am richtigen Weg?

Danke für deine Hilfe! Smile
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: 23.06.2018, 17:51     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Den Debugger habe ich leider nicht zur Verfügung.

Der Debugger ist in MATLAB integriert. Den sollte also jeder haben.

Zitat:
aber das Ergebnis nicht...

und inwiefern nicht? Welches Ergebnis erwartest du?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2018, 18:12     Titel:
  Antworten mit Zitat      
Hallo,

über den Debugger hatten wir uns schon mal unterhalten. Da ich eine Browserversion von Matlab (kein Debugger-Tool) besitze und ich leider schon mit den Beispielen genug zu tun habe, konnte ich mich noch nicht genauer damit beschäftigen.

Das Ergebnis sollte auf jeden Fall nichts sein, was mit 10^72 anfängt. Kann es sein dass es an feval liegt? Ich meine gibt es da eine Alternative? Sonst weiß ich auch nicht mehr weiter...

Danke!
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: 23.06.2018, 18:56     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
über den Debugger hatten wir uns schon mal unterhalten.

Gut möglich.

Zitat:
Da ich eine Browserversion von Matlab (kein Debugger-Tool) besitze

Was für eine "Browserversion"? Falls du MATLAB Online meinst: da gibt es den Debugger auch.

Zitat:
und ich leider schon mit den Beispielen genug zu tun habe, konnte ich mich noch nicht genauer damit beschäftigen.

Das widerspricht sich. Wenn du ein Problem mit einem Beispiel hast, dann ist der Debugger eine große Hilfe, dem Problem auf die Spur zu kommen, und erspart Zeit.

Grüße,
Harald
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: 23.06.2018, 19:22     Titel:
  Antworten mit Zitat      
Hallo zyx,

Da kann ich Harald nur wärmstens zustimmen. Wenn wir im Forum herausbekommen wollen, was im Code genau geschieht, würden wir auch den Debugger verwenden. Also wäre es sinnvoll und effizient, wenn Du das selbst machst.

Code:

Das legt übrigens eine quadratische Matrix an. Ich vermute Du meinst:
Code:
t = zeros(length(tspan), 1);


Zitat:
Die size würde passen aber das Ergebnis nicht...

Die Leser können nicht wissen, was Du erwartest und was "nicht passen" genau bedeutet.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.06.2018, 20:23     Titel:
  Antworten mit Zitat      
Hallo an alle,


ich habe Matlab durch die Universität erhalten und ich bin mir ziemlich sicher, dass unser Professor so etwas wie den Debugger bestimmt erwähnen würde.

Danke jedenfallsl für die Hilfe!

Ich habe das Problem nun ohne feval und einen zusätzlichen t Vektor (den ich, wie ihr richtig beschrieben habt falsch definiert hatte) gelöst.

Ich glaube, dass feval die ganze Funktion noch einmal zusätzlich ausgewertet hat, weshalb vielleicht auch die Zahlen so groß wurden.


Grüße!
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: 23.06.2018, 21:25     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich habe Matlab durch die Universität erhalten

Das klärt nicht, wie der Zugriff erfolgt. Ich kenne nur die Möglichkeiten einer "normalen" Installation und MATLAB Online - beide bieten Debugging.

Zitat:
ich bin mir ziemlich sicher, dass unser Professor so etwas wie den Debugger bestimmt erwähnen würde.

Davon würde ich nicht ausgehen. Viele Professoren gehen davon aus, dass ihre Studenten sich so etwas selbst aneignen. Mir hat auch nie ein Professor den Debugger gezeigt, und dennoch gibt es ihn.
https://de.mathworks.com/help/matla.....process-and-features.html

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2018, 09:49     Titel:
  Antworten mit Zitat      
Hallo Harald,

die in deinem Link gezeigte Leiste auf der Seite existiert bei mir nicht. Ich kann also
nur die Befehle setzen.

Wenn ich zum Beispiel:

Code:

x = ones(1,10);

for n = 1:10
x(n) = x(n) + 1;
end
dbstop in MyUnitNotes at 20 if n >= 2
 


eingebe (von der Matlab site) bekomme ich als Antwort:

Code:

KK20  x(n) = x(n) + 1
K
 


Vielleicht könnt ihr mir ja sagen was das heißen soll?

Zitat:
Viele Professoren gehen davon aus, dass ihre Studenten sich so etwas selbst aneignen.



Ja das stimmt. Es liegt natürlich in meiner Verantwortung.

Aber so gut bin ich nicht, dass ich alles von alleine und auf Anhieb verstehe. Trotzdem möchte ich es lernen.

Grüße
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: 24.06.2018, 10:12     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
die in deinem Link gezeigte Leiste auf der Seite existiert bei mir nicht.

Das ist erstaunlich. Ich kann mir offen gesagt nicht erklären, wie du MATLAB verwendest bzw. darauf zugreifst. Kannst du mal einen Screenshot senden?

Zitat:
Vielleicht könnt ihr mir ja sagen was das heißen soll?

Ich würde es so interpretieren, dass du in Zeile 20 mit dem angegebenen Inhalt stehen geblieben bist. Das entscheidende ist, dass du dann im Workspace Browser die momentan aktiven Variablen und deren Werte, Datentyp, Dimensionen etc. siehst.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.06.2018, 10:39     Titel:
  Antworten mit Zitat      
Hallo,

da ich keinen Screenshot machen kann, ohne dass mein Name ganz groß dabei steht, musst du leider vorerst darauf verzichten.
Laut unserem Professor ist das aber eine uni-eigene Browserversion, damit die Studenten auch von zu Hause aus arbeiten können.

Als du mich damals auf den Debugger aufmerksam gemacht hast, hab ich auch schon mit den Befehlen experimentiert.
Allerdings war damals wie heute das einzige was ich bekommen habe ein "K", oder mehrere.

Deshalb glaube ich auch, dass, wenn es den Debugger in unserer Version geben würde, hätte man es uns bestimmt gesagt, denn es würde den Lehrkräften wahrscheinlich Arbeit ersparen.

Grüße
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: 24.06.2018, 12:51     Titel:
  Antworten mit Zitat      
Hallo zyx,

Wir versuchen Dir zu helfen. Dazu wäre es wirklich sehr hilfreich, wenn Du erklärst und zeigst, wie Du Matlab überhaupt verwendest. Einen Screenshot anzufertigen und dann z.B. Paint oder ein anderes Grafikprogramm zu verwenden um Deinen Namen zu entfernen, ist ein sehr kleiner Aufwand. Dies wäre viel effizienter, als wenn wir hier noch lange weiterrätseln.

Zitat:
Deshalb glaube ich auch, dass, wenn es den Debugger in unserer Version geben würde, hätte man es uns bestimmt gesagt, denn es würde den Lehrkräften wahrscheinlich Arbeit ersparen.

Wenn Du eine Matlab-Version benutzt, die ohne Debugger läuft und von der selbst die Profis aus dem MathWorks-Support-Team nichts wissen, läuft hier etwas grundsätzlich schief.
Matlab ist ohne Debugger ein ziemlich nutzloses und ineffizientes Tool. Keine Programmiersprache lässt sich ohne Debugger sinnvoll benutzen, denn wenn der Programmierer nicht prüfen kann, wie der Code funktioniert, ist das Erstellen eines Programms die "Gunshot-Methode". Gerade zum Erlernen einer Programmiersprache ist das völliger Unfug und wenn Eure Uni so etwas zur Verfügung stellt, hat die aus pädagogischer Sicht eine echte Niete gezogen.

Bitte poste einen Screenshot der Matlab-Umgebung, die Du verwendest. Du kannst sie mir auch gerne per PN schicken, falls es Dir zu umständlich ist Deinen Namen daraus zu entfernen. Ich könnte mich dann ohne persönliche Daten weiter zu geben mit Deiner Uni in Verbindung setzen und sie bitten, eine benutzbare Oberfläche mit Debugger zur Verfügung zu stellen.

Viele Grüße, Jan
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.