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

Einfaches Programm zur Trapezregel

 

opaschlumpf
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 16:04     Titel: Einfaches Programm zur Trapezregel
  Antworten mit Zitat      
Einen wunderschönen guten Tag,
ich hoffe ich bin hier nicht fehl am Platz und es kann mir geholfen werden.
Ich bin Mathematik Student im dritten Semester und habe Numerik I im Moment, leider Gottes aber noch nie ansatzweise irgendwelche Sachen programmiert. Den ersten Übungszettel haben wir schon kläglich aufgegeben, doch ich bleibe am Ball und versuche noch meine Studienleistung zu bekommen.

Ich habe das Forum schon durchsucht, aber ich glaube, dass das hier zu einfach für euch alle ist, sodass es nicht im Forum steht, wenn doch, bitte ich um einen Link, danke Smile

Zu meinem eigentlichen Problem:
Hier die exakte Aufgabenstellung:
In dieser Aufgabe sollen Integrale der Form Integral(a bis b) f(x) dx numerisch berechnet werden.
(a) Implementieren Sie für eine beliebig gegebene Zerlegung zerl mit Knotenpunkten a=x_0 < x_1 < x_2 < ... < x_(n-1) < x_n = b und eine beliebige Funktion f
(i) die summierte Trapez-Regel
(ii) die summierte Simpson - Regel

Es handelt sich also um Quadraturformeln
ich habe auch schon einen Ansatz, aber da ich noch nie programmiert habe, bitte ich um Verständnis Embarassed

mein m-File heißt trapez.m mit:

Code:


function tra=trapez(zerl,f)

%zerl - enthält Knotenpunkte der Funktion f
%f die Funktion, auf die wir die Regel anwenden wollen

y=f(zerl)
n=size(zerl,2)-1
h=(zerl(i)-zerl(i-1))

tra=zeros(1,n)
for i=2:1:n+1
   add=1
   add=h/2*(f(zerl(i-1))-f(zerl(i))
end
tra=add
end
 



Ich bitte um baldige und exakte Hilfe.
Ich möchte mich wirklich mit diesem Thema mehr auseinandersetzen, aber mir fehlt einfach das know-how.
Ich habe schon viele Tutorials durchgeschaut, aber gebracht hat es wohl alles nichts :/


Vielen Dank
Mit freundlichen Grüßen
opaschlumpf

edit by denny: Bitte die Codeumgebung verwenden. Danke!
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: 30.11.2011, 16:30     Titel:
  Antworten mit Zitat      
lies mal das sollte dir schonmal weiterhelfen
http://www.mathworks.co.uk/help/techdoc/math/bsgprpq-3.html
Private Nachricht senden Benutzer-Profile anzeigen
 
DerBesteMensch
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 03.07.11
Wohnort: Lummerland
Version: ---
     Beitrag Verfasst am: 30.11.2011, 16:42     Titel:
  Antworten mit Zitat      
Hallo opaschlumpf,

Dieser Teil

Code:
tra=zeros(1,n)
for i=2:1:n+1
add=1
add=h/2*(f(zerl(i-1))-f(zerl(i))
end
tra=add


macht mMn keinen Sinn. Zunächst einmal ist die Trapezformel an sich falsch, da die Summe der Funktionswerte und nicht deren Differenz betrachtet wird. Entweder willst du in tra die fertig aufsummierte Fläche zurückgeben; in diesem Fall verwende Folgendes

Code:
tra = 0
for i=2:n+1
h=(zerl(i)-zerl(i-1))
tra = tra + h/2*(f(zerl(i-1))+f(zerl(i))
end


Hier wird in jedem Schritt die jeweilige Trapezfläche zum bisherigen Wert von tra dazuaddiert. Am Ende bekommst du in tra also einen Näherungswert für das gesuchte Integral.

Falls du hingegen tra als Vektor zurückgeben willst, der die einzelnen Trapezflächen unaufsummiert zurückgibt, so verwende:

Code:
tra=zeros(1,n)
for i=2:n+1
h=(zerl(i)-zerl(i-1))
tra(i-1) = h/2*(f(zerl(i-1))+f(zerl(i))
end


In beiden Fällen kann das h jedoch nicht vor der Schleife einmal ausgerechnet werden (was soll das i außerhalb der Schleife denn bedeuten?) sondern muss in der Schleife bei jedem Durchlauf neu berechnet werden, da die Intervalllänge natürlich jedesmal ändern kann.

Viele Grüße
DerBesteMensch
Private Nachricht senden Benutzer-Profile anzeigen
 
hwilmsmeyer
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 07.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 16:47     Titel:
  Antworten mit Zitat      
Hallo opaschlumpf,

es kann sein, dass ich Dich total falsch verstehe.
Meinst Du mit a(i) das: ?

Code:
a = 0;
b = 1;
dx = 0.1;

x = [a:dx:b];
f = cos(x);

Integral = sum(f.*dx);

_________________

Freundliche Grüße,
Hannes Wilmsmeyer
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
opaschlumpf
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 21:04     Titel:
  Antworten mit Zitat      
Vielen vielen Dank für die schnelle Hilfe Smile

Habe es jetzt auf dieses hier reduziert:

Code:
function tra=trapez(zerl,f)

y=f(zerl)
n=size(zerl,2)-1

tra=0
for i=2:n+1
   h=(zerl(i)-zerl(i-1))
   tra = tra + h/2*(y(i-1))-y(i))
end
end


doch gebe ich nun z.B. "trapez([0:1],cos(x))"
dann kommt folgendes zurück:

Code:
syntax error

>>>    tra = tra + h/2*(y(i-1))-y(i))
                ^


vorher wird auf das verzeichnis von dem m-File trapez.m verwiesen.
wenn ich zB zerl(i) schreibe, meine ich den i-ten Eintrag des Vektors zerl
Was tun? Sad

PS: Ich benutze Octave, aber das sollte ja eigentlich kein Problem darstellen.
Private Nachricht senden Benutzer-Profile anzeigen
 
joker811
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 29.10.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.11.2011, 21:42     Titel:
  Antworten mit Zitat      
tra = tra + h/2*(y(i-1))-y(i))
------------------------- ^
diese zeile enthält einen klammerfehler
ich weiß jedoch nicht wie octave sowas darstellt

es müsste heißen

tra = tra + h/2*(y(i-1)-y(i))
------------------------^
ohne das ich den rest überprüft habe....
ggf gibt es noch weitere fehler
Private Nachricht senden Benutzer-Profile anzeigen
 
DerBesteMensch
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 03.07.11
Wohnort: Lummerland
Version: ---
     Beitrag Verfasst am: 30.11.2011, 22:30     Titel:
  Antworten mit Zitat      
Hallo opaschlumpf,

Abgesehen von dem Klammerfehler ist deine Trapezformel (siehe mein erster Beitrag) immer noch falsch. Das was du damit ausrechnest wird wenig mit dem tatsächlichen Wert des Integrals zu tun haben.

Des Weiteren kannst du deine trapez-Funktion auf die Art, wie du es gemacht hast, nicht aufrufen. Verwende statt dessen

trapez([0:1],@(x)cos(x))

Der geklammerte Buchstabe hinter dem @ gibt die Variable deiner Funktion an, direkt im Anschluss kannst du dann die Funktion selbst hinschreiben.

Das Integral im Intervall [0,1] durch ein ein einziges Trapez zu approximieren, wie in deinem Aufruf ist schon recht "grob". Verwende für eine gute Näherung am besten mehrere Knoten.

[0:0.01:1] zB zerlegt dir das Intervall [0,1] in 100 äquidistante Intervalle, und es werden die Flächeninhalte von 100 Trapezen aufsummiert, was eine sehr viel genauere Näherung darstellt.

Viele Grüße
DerBesteMensch
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: 01.12.2011, 09:30     Titel:
  Antworten mit Zitat      
is schon lustig das hir jede woche die hausaufgaben von nummerik der tu berlin kommen ^^ und das mit dem anonymen @(x) cos(x) deswegen hatte ich oben den link gepostet
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: 01.12.2011, 10:50     Titel:
  Antworten mit Zitat      
Hallo Winkow, hallo opaschlumpf,

Mich hat es mehr an die Uni Hannover erinnert.

@opaschlumpf: Im Gegensatz zu vielen anderen Leuten, die hier Fragen zu ihren Hausaufgaben posten, legst Du die Karten offen auf den Tisch. Das bringt Dir zwar nicht unbedingt "baldige und exakte Hilfe", aber zumindest Anerkennung.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2011, 17:18     Titel: Danke
  Antworten mit Zitat      
Vielen vielen Dank für eure Antworten,
ich habe jetzt die Trapez und Simpson Regel soweit hinbekommen, wobei wir noch ein wenig mehr editieren mussten, aber das sei so hingestellt.

Ich komme von der Leibniz Uni Hannover ja, das Problem ist nur, dass ich noch nie programmiert habe und unsere Einleitung in Matlab eher gar nicht geholfen hat bei den Problemstellungen, die wir jetzt in den Übungszetteln an den Kopf geworfen kriegen, also seid mir nicht böse, wenn ich hier dumme oder einfache Fragen stelle.

Vielen Dank nochmal

Mfg opaschlumpf
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



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.