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

Numerische Integration

 

whitecrane19
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2013, 16:41     Titel: Numerische Integration
  Antworten mit Zitat      
Hallo Community,

hätte einige Fragen zum Thema Numerische Integration. Ich fange am besten mit meiner ersten Frage an.

Ich möchte die Länge L einer parametrischen Kurve x=f(t) und y=g(t) in einem vorgegebenen Intervall [a,b] berechnen durch numerische Integration mit einer Newton-Cotes-Formel berechnen.

Als Beispiel nehme ich f(t) = cos(t) und g(t)=sin(t) im Intervall t[0,2pi]

1. Ich möchte die Funktionen grafisch darstellen und dabei eine inline Funktion benutzen. Leider funktioniert es nicht so, wie ich möchte. Aktuell sieht mein Beispiel wie folgt aus:

Code:

% Beispiel 1
f = cos(t)
g = sin(t)

% Funktion
x=f
y=g
t=linspace(0, 2*pi, 100);
% Funktionsplot
plot (t,x, t,y)

grid on



Soweit dürfte es richtig sein, aber eben ohne inline-Funktionsunterprogramm.

Hat jemand eine Idee? Suchfunktion in Matlab habe ich benutzt aber eventuell mache ich Fehler bei der Syntax.

b) würde ich zusätzlich erfahren, wie ich die numerische BErechnung des Integrals mit Hilfe der Newton Cotes Formel berechnen kann?
Als Idee würde ich eine for-Schleife nehmen oder mit dem sum-Befehl.

Die für die Berechnung des Integranden erforderlichen Ableitungsfunktionen müsste ich ja dann der Einfachheithaklber per Hand berechnen oder und dann als inline-Funktion integrieren?? Optimal wäre natürlich die Zahl für die Teilintervalle frei wählbar zu gestalten, um verschiedenen Tests durchzuführen, aber das sollte kein Problem sein.


Danke vorab!
Private Nachricht senden Benutzer-Profile anzeigen


Bibonaut
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 06.06.13
Wohnort: Berlin
Version: 2013a
     Beitrag Verfasst am: 25.10.2013, 17:14     Titel:
  Antworten mit Zitat      
Hallo,

dein Beispiel wird einen Fehler melden und zwar kannst du sin(t) und cos(t) nicht auswerten, bevor du nicht t definiert hast.

Eine Inline-Function heißt in Matlab seit längerem (?!) Anonymous-Function.

Für dein Beispiel wäre die Syntax
f = @(argument) sin(argument) ...

Für dein Beispiel macht das aber keinen Sinn, die Sinusfunktion, welche ja schon eine Funktion, nochmal als Anonymous Function "f" zu definieren.

Welche Ableitungsfunktion meinst du konkret? Habe mir gerade mal die Newton-Cotes Formel bei Wikipedia angeschaut und kann dort und auch bei den Lagrangen Polynomen auf Anhieb keine Ableitungen finden.


Viele Grüße
Alex
Private Nachricht senden Benutzer-Profile anzeigen
 
whitecrane19
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2013, 17:57     Titel:
  Antworten mit Zitat      
Die für diese Aufgabe erforderlioche Newton-Cotes Formel fehlt mir , wie ich gerade feststellen muss.

Es macht für das Beispiel keinen Sinn, aber ich könnte es trotzdem umschreiben und als Anonymous deklarieren

EDIT:

Ich habe das jetzt so geregelt:
Code:

f = inline ('sin(t)')
g = inline ('cos(t)')

t = linspace (0, 2*pi,100);

plot (t, f(t), t, g(t)).
 

Das plotten funktioniert soweit. Ich sehe beide Verläufe.


Nun meine Frage: Ich möchte die die numerische Berechnung des Integrals mit Hilfe einer simplen Newton-Cotes-Formel berechnen. Die Berechnung der Summe könnte ich ja z.B. mit Hilfe einer for-Schleife oder mit dem sum-Befehl realöisieren.

Jemand eine Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
whitecrane19
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2013, 19:50     Titel:
  Antworten mit Zitat      
Ach und die Länge für eine Kurve ist folgende:

Daher schrieb ich vorhin, dass ich die Funktionen von Hand aus einfach ableiten könnte und dann das Ergebniss als Inline deklarieren. Aber wozu brauche ich jetzt die Newton-Cotes Formel bzw wie verwende ich diese?
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: 25.10.2013, 20:14     Titel:
  Antworten mit Zitat      
du solltest dich an bibonauts vorschlag halten anonyme funktionen zu verwenden.
Zitat:
inline will be removed in a future release. Use Anonymous Functions instead.

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
whitecrane19
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2013, 20:19     Titel:
  Antworten mit Zitat      
hmm, ok, komme aber trotzdem nicht weiter, vor allem n icht, wenn ich satatt cos(t) z.B. nur t ausgeben möchte, und das in der FUnktion lediglich ersetze ...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was bedeutet "nur t ausgeben"?

Was spricht gegen eine Integration beispielsweise mit INTEGRAL, bzw. in älteren Versionen mit QUAD?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2013, 08:21     Titel:
  Antworten mit Zitat      
Ich möchte alternativ zum Berechnen von L oben die Trapez Formel aus Matlab verwenden. Wenn ich jetzt meine beiden Funktionen sinx und cosx integriere und in die Formel einfuege, wie programmiere ich das in Matlab?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.10.2013, 09:16     Titel:
  Antworten mit Zitat      
Hallo,

Trapezformel: TRAPZ. Zur Anwendung siehe die Dokumentation
Code:


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 08:38     Titel:
  Antworten mit Zitat      
Sorry, Trapez Formel ist hier Fehl am Platz. Hab mich vertan. Muss doch mit Newton Cotes irgendwie gehen, hab aber absolut keine Idee ... wie ich die Länge L oben nun berechnen kann, wenn ich die Funktionen bereits integriert habe ...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2013, 09:56     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar, warum die Trapezformel hier "fehl am Platz" sein soll. Sie ist ein bewährtes Integrationsverfahren.

Wenn du aber darauf bestehst: Newton-Cotes beinhaltet im Grunde die symbolische Integration angepasster Polynome. Falls du die Symbolic Math Toolbox hast, kannst du die Implementierung in MuPAD verwenden.
http://www.mathworks.de/de/help/sym.....d_ref/numeric-ncdata.html

Ansonsten schau mal online, dann findest Du z.B. das hier:
http://www.mathworks.com/matlabcent.....summed-newton-cotes-rules

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 11:32     Titel:
  Antworten mit Zitat      
ich möchte das Ganze selbst realisieren. Dies sollte doch mit einer for Schleife oder sum möglich sein ... mir ist nur nicht klar wie ich meine Funktionen fx=sinx und gx=cosx die ich per Hand in Fx=cosx und Gx=-sinx integriert habe nun in Matlab mit Newton Cotes Formel so berechnen lasse, dass ich die Länge L (siehe Formel oben) erhalte ...?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2013, 12:30     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe keinen Weg, aus den Integralen von f und g direkt die Kurvenlänge zu ermitteln. Ich würde unmittelbar die Formel implementieren: Ableitungen annähern und dann über diese integrieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 25.10.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.10.2013, 12:49     Titel:
  Antworten mit Zitat      
ok wie sieht das in Matlab den genau aus? Es muss ja eine Möglichkeit geben ...
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.10.2013, 12:58     Titel:
  Antworten mit Zitat      
Hallo,

numerische Ableitung bilden:
Code:
df = diff(fx, x);


Integrieren dann z.B. mit trapz oder eben anderen Methoden.

Code:
x = linspace(0, 2*pi, 1000);
f = @sin;
g = @cos;
fx = f(x);
gx = g(x);
% Ableitungen über zentrale bzw. am Rand einseitige Differenzen
df = (fx(3:end)-fx(1:end-2))./(x(3:end) - x(1:end-2));
dg = (gx(3:end)-gx(1:end-2))./(x(3:end) - x(1:end-2));
df = [(fx(2)-fx(1))/(x(2)-x(1)), df, (fx(end)-fx(end-1))/(x(end)-x(end-1))];
dg = [(gx(2)-gx(1))/(x(2)-x(1)), dg, (gx(end)-gx(end-1))/(x(end)-x(end-1))];
integrand = sqrt(df.^2 + dg.^2);
trapz(x, integrand)


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