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

Adaptives Verfahren zur numerischen Berechnung des Integrals

 

opaschlumpf
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 30.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2011, 17:35     Titel: Adaptives Verfahren zur numerischen Berechnung des Integrals
  Antworten mit Zitat      
Wir haben nun wiederum Probleme beim Programmieren dieses adaptiven Programms, wir haben auch einen Lösungsansatz, jedoch wird uns gesagt, dass eine Matrix dimension nicht stimmt.

Implementieren Sie ein Programm adaptiv(zerl,f,tol), ausgehend von einer beliebigen Zerlegung
zerl und einer beliebigen Funktion f, welches das Integral |f(x) dx (in den Grenzen a,b) approximiert und folgendermaßen
ablaufen soll:
1. Starte mit einer beliebigen Zerlegung von [a; b], z.B. mit zerl=[a b].
2. Berechnen Sie auf jedem Teilintervall eine Näherung unter Verwendung der Trapez - Regel und der Simp-
son - Regel. Wenn der absolute Fehler zwischen den beiden Näherungen auf den Teilintervallen größer
als die vorgegebene Toleranz tol ist, so sollen diese Teilintervalle halbiert werden. Die anderen Teilin-
tervalle sollen bestehen bleiben. Dies wiederholen Sie solange bis eine Zerlegung erreicht wurde, bei der
der absolute Fehler auf jedem Teilintervall kleiner oder gleich der Toleranz ist. Als Näherungswert für
das Integral benutzen Sie dann den Wert aus der Simpson - Regel.

Ihr Programm soll die Zerlegung, für die dies erreicht wird, und den Näherungswert des Integrals ausgeben.

soll ich unseren Vorschlag einfach mal hier posten?
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:57     Titel:
  Antworten mit Zitat      
Code:
function r = refine(zerl, m)
   zerl = [zerl, (zerl(m)+zerl(m+1))/2];
   sort(zerl)
end


dies ist unsere "verfeinerungs"-funktion

Code:
function [a ,z]= addaptiv(zerl,f,tol)
   for i = 1:size(zerl,2)-1
      for j = 1:size(zerl,2)
         a(j) = f(j);
         while abs((simpson(i+1)-simpson(i))-(a(i+1)-a(i)) >=tol
            m = i
            refine(zerl,m);
            zerl = r;
            a(i) = 1/2 * (zerl(i+1)-zerl(i)) * (f(i) + f(i+1));
         end
      z = zerl;
      end  
   end
   a =sum(a);
end


dies ist unsere eigentliche adaptive funktion, bei der wir mit simpson auf unsere vorher definierte Funktion für die Simpson Regel verweisen.

und die Fehlermeldung dazu:
error: A(I): Index exceeds matrix dimension.

wobei er hier auf die Datei refine.m verweist, line 2 column 7.

wir haben schon öfter drübergesehen, konnten aber leider keinen Fehler feststellen

Vielen Dank für eure Hilfe
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: 05.12.2011, 22:11     Titel:
  Antworten mit Zitat      
Hallo opaschlumpf,

Bitte poste immer eine Kopie der orginalen Fehlermeldung.
"error: A(I): Index exceeds matrix dimension." ist sehr merkwürdig, da ich gar kein "A(I)" in dem geposteten Code finden kann.

Und welches ist denn die Zeile 2, Spalte 7 in File refine.m?

Die Funktion "refine" Berechnet die Ausgabe "r" gar nicht:
Zitat:
Code:
function r = refine(zerl, m)
   zerl = [zerl, (zerl(m)+zerl(m+1))/2];
   sort(zerl)
end

Meinst Du "r = sort(zerl)"?

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: 06.12.2011, 14:29     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort,
also das war jetzt leider nicht das Problem, im Endeffekt hat er uns bei refine schon eine Ausgabe gegeben. Hier nochmal die gesamte Fehlermeldung:

Befehl von mir:
Code:
addaptiv(@refine(zerl,m), [2,5], 3*zerl.^2,0.02)

und der error dazu:
Code:
error: A(I): Index exceeds matrix dimension.
error: called from:
error:   C:\Users\Ron\qtoctave-0.10.1-win32\qtoctave-0.10.1\bin\refine.m at lin
e 2, column 7
error: evaluating argument list element number 1
error: evaluating argument list element number 1


ich gehe davon aus, dass er Probleme hat die Länge von m irgendwie dann in der funktion addaptiv zu implementieren, kann aber auch sein, dass ich mich irre.
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 06.12.2011, 21:29 Uhr von Jan S
Von Programmierung nach Octave-Forum
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.12.2011, 21:30     Titel:
  Antworten mit Zitat      
Hallo opaschlumpf,

Bitte poste Frage zu Octave im Octave-Forum. Das erspart denjenigen Zeit, die versuchen zu helfen.

Gruß, Jan
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 - 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.