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

Programmieren in Matlab

 

harry20
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2014, 12:41     Titel: Programmieren in Matlab
  Antworten mit Zitat      
Hallo,
Ich besuch zur zeit das Wahlpflichtfach Simulation an einer Hochschule und wir arbeiten mit der software matlab. Kann mir jemand bei dieser Aufgabe helfen oder vorschläge machen, wie ich die aufgabe lösen kann Confused ?
Hab im Anhang die Aufgabenstellung

vielen dank im voraus


Edit by Martin: Bitte keine Doppelpostings. Danke...

simu.PNG
 Beschreibung:

Download
 Dateiname:  simu.PNG
 Dateigröße:  47.37 KB
 Heruntergeladen:  236 mal
ss.PNG
 Beschreibung:

Download
 Dateiname:  ss.PNG
 Dateigröße:  11.22 KB
 Heruntergeladen:  223 mal
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2014, 19:09     Titel:
  Antworten mit Zitat      
Hallo harry20,
wo hast Du ein Problem? Generell wird Dir hier niemand Hausaufgaben lösen und wenn Du gar nicht weißt, wie man Matlab bedient, solltest Du zuerst ein Anfängertutorial durcharbeiten, bevor Du Dich an die Lösung der Aufgabe machst.
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 21.03.2014, 22:54     Titel:
  Antworten mit Zitat      
Hallo,
Ich habe gerade kein matlab parat.
Such dir erstmal die Formel für das explizite Euler-Verfahren heraus. Am besten eine mit Beispiel. Google hilft. Dann machst du dir klar, inwieweit deine erste Formel und die gegebenen Größen in die Euler-Formel passen. Sobald du das hast, definierst du dir alle Größen und die Näherungsgleichung in matlab. Versuch das erstmal. Wenn du nicht weiter kommst sag einfach nochmal genau woran es scheitert bzw. Stell mal das rein was du schon hast.
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 14:30     Titel:
  Antworten mit Zitat      
Hallo,
die Formel allgemein lautet x´(t)= f[x(t),t]

in unserem Fall ist das die gegebene Funktion
x`(t)=x(t)+b*t

und Desweiteren lautet die Explizite Lösung
x(t)=(b+2)*e^t-b*(t+1)


Aus diesen beiden Funktion kann ich dann den Fehler heraus lesen oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 14:46     Titel:
  Antworten mit Zitat      
Hab mal versucht mit einem Beispiel die Aufgabe zu lösen.
irgendwie zeigt der mir aber keine Grafik an!

Code:

%% Parameter festlegen

%Anfangswert b

b = 3;

%Anfangswert x0
x0 = 2;

% Simulationszeit
t_start = 0;
t_stop  = 5;

% Schrittweite h
h = 0.5;


%% Berechnung

% Maximaler Index
i_max = round(t_stop/h);

% Speicherplatz reservieren (Vektoren anlegen)
t_sim   = zeros(1, i_max+1);
x_sim   = zeros(1, i_max+1);
x_exakt = zeros(1, i_max+1);

% Initialisierung
t_sim(1) = t_start;
x_sim(1) = x0;

% Schleife
%
% Hier entspricht
% i ~ t (Index i entspricht Zeitpunkt t "aktuelle Zeit")
% i+1 ~ t + h = t + 1*h
% t_sim(i)   = t
% t_sim(i+1) = t + h
%
% x_sim(i)   = x(t)
% x_sim(i+1) = x(t+h)
%
for i = 1:i_max
   
    % Neuer Simulationszeitpunkt
    % t+h = t + h
    % t_sim(i+1) = t        + h
    t_sim(i+1)   = t_sim(i) + h;
   
    % Funktionswert berechnen: f(x(t),t)
    % *************************************************************
    % *************************************************************
    % FUNKTIONSSPEZIFISCH !!!!
    %
    % f(x(t),t) =
    fxt = x_sim(i)+b*t_sim(i);
    %
    % *************************************************************
    % *************************************************************
   
    % Neuer x-Wert berechnen x(t+h)
    % x(t+h)   =   x(t)   + f(x(t),t)*h
    x_sim(i+1) = x_sim(i) +    fxt*h;
   
end


%% VERGLEICH ZUR "REALITÄT" (exakte Lösung der Differentialgleichung)
   
for i = 1:i_max+1
   
 % *************************************************************
 % *************************************************************
 % FUNKTIONSSPEZIFISCH !!!!
 %  
 % x(t) = (b+2)*e^t-b*(t+1)
 x_exakt(i) = (b+2)*exp(t)-b*(t+1);
 % *************************************************************
 % *************************************************************

end

%% Berechnung des Fehlers (Exakte Lösung - Simulationslösung)
sim_error = x_exakt - x_sim;


%% Graphik
figure

subplot(2,1,1)

% Zeichne Simulationslösung (Euler)
plot(t_sim, x_sim,'r')

%Plot halten
hold on

% Zeichne exakte Lösung
plot(t_sim, x_exakt,'LineStyle','--')

   
subplot(2,1,2)
plot(t_sim, sim_error,'r')
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 24.03.2014, 15:05     Titel:
  Antworten mit Zitat      
hallo. bitte verwende die code umgebung wenn du code postest.
Zitat:
irgendwie zeigt der mir aber keine Grafik an!

das kann ich nicht nachvollziehen. bei mir werden grafiken generiert. es tritt allerdings ein fehler auf da t in line 77 nicht definiert ist.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 24.03.2014, 15:27     Titel:
  Antworten mit Zitat      
Hallo,

lass die 2 for Schleife weg und binde deine exacte Lösung in die erste Schleife ein und verwende statt t einfach t_sim(i)

Code:

x_exakt(i) = (b+2)*exp(t_sim(i))-b*(t_sim(i)+1);
 


Gruß Jim
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 15:49     Titel:
  Antworten mit Zitat      
Code:
for i = 1:i_max
   
    % Neuer Simulationszeitpunkt
    % t+h = t + h
    % t_sim(i+1) = t        + h
    t_sim(i+1)   = t_sim(i) + h;
   
    % Funktionswert berechnen: f(x(t),t)
    % *************************************************************
    % *************************************************************
    % FUNKTIONSSPEZIFISCH !!!!
    %
    % f(x(t),t) =
    fxt = x_sim(i)+b*t_sim(i);
    %
    % *************************************************************
    % *************************************************************
   
    % Neuer x-Wert berechnen x(t+h)
    % x(t+h)   =   x(t)   + f(x(t),t)*h
    x_sim(i+1) = x_sim(i) +    fxt*h;
   
    x_exakt(i) = (b+2)*exp(t_sim(i))-b*(t_sim(i)+1);
   
end




%% Berechnung des Fehlers (Exakte Lösung - Simulationslösung)
sim_error = x_exakt - x_sim;




ist das so richtig?
da bekomme ich 2 grafiken!

lösung.PNG
 Beschreibung:

Download
 Dateiname:  lösung.PNG
 Dateigröße:  24.8 KB
 Heruntergeladen:  215 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 24.03.2014, 16:22     Titel:
  Antworten mit Zitat      
Ah...sorry nein,
mach mal lieber die exakte lösung hinter die Schleife, die Funktion sollte nämlich eigentlich kein maximum an der Stelle haben. das kommt weil dein x_exakt ein element zu wenig hat, wenn man es in dieser Schleife verwendet....
Code:

for i = 1:i_max
   
    % Neuer Simulationszeitpunkt
    % t+h = t + h
    % t_sim(i+1) = t        + h
    t_sim(i+1)   = t_sim(i) + h;
   
    % Funktionswert berechnen: f(x(t),t)
    % *************************************************************
    % *************************************************************
    % FUNKTIONSSPEZIFISCH !!!!
    %
    % f(x(t),t) =
    fxt = x_sim(i)+b*t_sim(i);
    %
    % *************************************************************
    % *************************************************************
   
    % Neuer x-Wert berechnen x(t+h)
    % x(t+h)   =   x(t)   + f(x(t),t)*h
    x_sim(i+1) = x_sim(i) +    fxt*h;
   
   
   
end

  x_exakt = (b+2)*exp(t_sim)-b*(t_sim+1);


%% Berechnung des Fehlers (Exakte Lösung - Simulationslösung)
sim_error = x_exakt - x_sim;
 

...aber so ist es korrekt Very Happy...du kannst deutlich sehen, dass die Näherungsfunktion nach der Euler funktion wesentlich langsamer steigt als die expliite Lösung...wenn du deinen Zeitschritt h jetzt verkleinerst, verbessert sich die übereinstimmung der Funktionen
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 16:30     Titel:
  Antworten mit Zitat      
hallo,
hab die daten angepasst. Bekomm aber trotzdem die selbe Grafik!

lös.PNG
 Beschreibung:

Download
 Dateiname:  lös.PNG
 Dateigröße:  25.84 KB
 Heruntergeladen:  230 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 24.03.2014, 16:48     Titel:
  Antworten mit Zitat      
Hier nochmal der komplette Code

Code:

close all; clear all;clc
%% Parameter festlegen

%Anfangswert b

b = 3;

%Anfangswert x0
x0 = 2;

% Simulationszeit
t_start = 0;
t_stop = 5;

% Schrittweite h
h = 0.5;


%% Berechnung

% Maximaler Index
i_max = round(t_stop/h);

% Speicherplatz reservieren (Vektoren anlegen)
% t_sim = zeros(1, i_max+1);
% x_sim = zeros(1, i_max+1);
% x_exakt = zeros(1, i_max+1);

% Initialisierung
t_sim(1) = t_start;
x_sim(1) = x0;

% Schleife
%
% Hier entspricht
% i ~ t (Index i entspricht Zeitpunkt t "aktuelle Zeit")
% i+1 ~ t + h = t + 1*h
% t_sim(i) = t
% t_sim(i+1) = t + h
%
% x_sim(i) = x(t)
% x_sim(i+1) = x(t+h)
%
for i = 1:i_max
   
    % Neuer Simulationszeitpunkt
    % t+h = t + h
    % t_sim(i+1) = t        + h
    t_sim(i+1)   = t_sim(i) + h;
   
    % Funktionswert berechnen: f(x(t),t)
    % *************************************************************
    % *************************************************************
    % FUNKTIONSSPEZIFISCH !!!!
    %
    % f(x(t),t) =
    fxt = x_sim(i)+b*t_sim(i);
    %
    % *************************************************************
    % *************************************************************
   
    % Neuer x-Wert berechnen x(t+h)
    % x(t+h)   =   x(t)   + f(x(t),t)*h
    x_sim(i+1) = x_sim(i) +    fxt*h;
   
   
   
end

  x_exakt = (b+2)*exp(t_sim)-b*(t_sim+1);

% *************************************************************
% *************************************************************



x_exakt = (b+2)*exp(t_sim)-b*(t_sim+1);
%% Berechnung des Fehlers (Exakte Lösung - Simulationslösung)
sim_error = x_exakt - x_sim;


%% Graphik
figure

subplot(2,1,1)

% Zeichne Simulationslösung (Euler)
plot(t_sim, x_sim,'r')

%Plot halten
hold on

% Zeichne exakte Lösung
plot(t_sim, x_exakt,'LineStyle','--')


subplot(2,1,2)
plot(t_sim, sim_error,'r')

 

_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 16:56     Titel:
  Antworten mit Zitat      
@Jknopf Danke das du dir die Zeit nimmst meine Frage zu beantworten
Hab die Lösung wieder im Anhang. Desweiteren, wie kann man auf diese Frage eine Antwort fromulieren? (Wie groß ist jeweils der maximale Fehler zwischen der Näherungslösung und der
expliziten Lösung im betrachteten Zeitraum?). ich weiss nicht genau wie ich das interpretieren kann!

lösun.PNG
 Beschreibung:

Download
 Dateiname:  lösun.PNG
 Dateigröße:  24.49 KB
 Heruntergeladen:  232 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 24.03.2014, 18:24     Titel:
  Antworten mit Zitat      
Gerne, wenn dir das hilft, freut mich das Very Happy ...

Ich würde sagen die Frage hast du in deinem 2. plot schon beantwortet. Innerhalb des betrachteten Zeitraum ist der maximale Fehler gerade die Differenz zwischen den letzten Punkten der beiden Funktionen. Du musst also nur den letzten Wert deines sim_error vektors herausziehen.

In Frage c wird es dann interessant...prinzipiell würde ich dafür

Code:


empfehlen...aber das kriegst du bestimmt auch selber hin, wenn nicht du weist ja wo du hilfe bekommst Wink
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
Private Nachricht senden Benutzer-Profile anzeigen
 
harry20
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 21.03.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.03.2014, 18:56     Titel:
  Antworten mit Zitat      
du hast mir wirklich unheimlich viel geholfen Smile!
also wenn ich das so richtig verstanden habe, müsste ich theoretisch bei 5 sekunden schauen wie groß der abstand zwischen der roten und der blauen Kurve ist?
Private Nachricht senden Benutzer-Profile anzeigen
 
JKnopf
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 16.03.14
Wohnort: Magdeburg
Version: ---
     Beitrag Verfasst am: 24.03.2014, 19:48     Titel:
  Antworten mit Zitat      
Ja genau... einfach

Code:

F_max=sim_error(end);
 


oder

Code:

F_max=max(sim_error);
 


ist zwar nicht der selbe Befehl, kommt in diesem Fall aber das gleiche raus
_________________

"good manners are just a way of showing other people we have respect for them" (Blast from the Past)

If you can't say somethin' nice ... don't say nothin' at all. (Thumper, Bambi)
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 - 2025 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.