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

Function handle

 

kosten
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.11.2009, 21:48     Titel: Function handle
  Antworten mit Zitat      
Guten Tag,
das ist mein erster Beitrag Smile .
Ich brauch eure Hilfe. Ich möchte die Funktion y=x^2 mit der Trapezregel integrieren.
Dazu soll ich drei Funktionen verwenden.
Eine Funktion die, die y-Werte berechnet.
Eine andere die, die Fläche für ein Trapez berechnet.
Und die andere die, die Summe aller Trapezflächen berechnet.

Ich packe dazu eine Funktion in die andere.
Das hat doch was mit dem function handle zu tun. Das verstehe ich noch nicht ganz.
Wo sind meine Fehler?




function test_01
% --- tra ------- Trapezregel --------------------------------------
% Zweck : Eine Funktion mit der Trapezregel integrieren.
% Drei Funktionen dafür verwenden.
% Autor : kosten
% Erstellungsdatum : 21.11.2009
% -------------------------------------------------------------------------

clc
clear all
close all


b = input('Obere Intervallgrenze: ');
n = input('Anzahl der Trapeze: ');
a = input('Untere Intervallgrenze: ');


fprintf('Die Fläche beträgt: %3.1f', intwert(a, b, n))

% -------------------------------------------------------------------------
% -------------------------------------------------------------------------
% -------------------------------------------------------------------------

function summe = intwert(summe, @streifen)

summe = 0;
h = (b-a) / n;

for i = 0 : (n-1)
summe = summe + streifen(i, h, a);
end



function q = streifen(i, h, a)

q = (h/2)*( funwert(a+i*h) + funwert(a+(i+1)*h) );



function y = funwert(x)

y = x^2;
Private Nachricht senden Benutzer-Profile anzeigen


kosten
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2009, 17:12     Titel:
  Antworten mit Zitat      
Kann mir keiner helfen?
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: 22.11.2009, 17:35     Titel:
  Antworten mit Zitat      
Hallo,

damit man dir leichter helfen kann, empfehle ich folgendes:

- Fehlermeldung posten, sofern eine aufgetreten ist.
- Das Beispiel so klein und übersichtlich wie möglich halten.

Tipps zur Selbsthilfe: Auf M-Lint achten (die orange bzw. rot unterringelten Code-Stellen, siehe auch Balken rechts und das Quadrat rechts oben im Editor-Fenster)

Zum besseren Verständnis von Function Handles vielleicht mal die Hilfe dazu lesen.

Ich habe mal die notwendigen Korrekturen in dem Code gemacht.

Code:
function test_01
% --- tra ------- Trapezregel --------------------------------------
% Zweck : Eine Funktion mit der Trapezregel integrieren.
% Drei Funktionen dafür verwenden.
% Autor : kosten
% Erstellungsdatum : 21.11.2009
% -------------------------------------------------------------------------

clc
clear all
close all


b = input('Obere Intervallgrenze: ');
n = input('Anzahl der Trapeze: ');
a = input('Untere Intervallgrenze: ');


fprintf('Die Fläche beträgt: %3.1f', intwert(@streifen, a, b, n))

% -------------------------------------------------------------------------
% -------------------------------------------------------------------------
% -------------------------------------------------------------------------

function summe = intwert(fctn, a, b, n)

summe = 0;
h = (b-a) / n;

for i = 0 : (n-1)
summe = summe + fctn(i, h, a);
end



function q = streifen(i, h, a)

q = (h/2)*( funwert(a+i*h) + funwert(a+(i+1)*h) );



function y = funwert(x)

y = x^2;


Grüße,
Harald[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
kosten
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2009, 19:38     Titel:
  Antworten mit Zitat      
Hi,
danke für deine Antwort Harald.
Das Programm läuft zwar jetzt, es werden aber nicht die richtigen ergebnisse berechnet.
Umso mehr Trapeze 'n' ich hab desto genauer muss der Integralwert werden.
Das ist aber hier nicht der Fall, der Integralwert wird immer größer.
Ich sehe nicht wo der Fehler mit den Funktionen ist.

Klassisch programmiert krieg ich das hin.

a = input('Untere Intervallgrenze: ');
b = input('Obere Intervallgrenze: ');
n = input('Anzahl der Trapeze: ');

summe = 0;
h = (b-a) / n;



for i = 0: (n-1)
summe = summe + (h/2)*( (a + i*h)^2 + (a + (i+1)*h)^2 );
end

disp(summe)
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: 22.11.2009, 19:51     Titel:
  Antworten mit Zitat      
Hallo,

dann poste mal bitte deine Eingaben. Ich habe den Code mal für Intervall [0, 1] und [0, 2] laufen lassen, und bei mir wird die Fläche mit zunehmender Trapezzahl nur in dem Sinne größer, dass sie sich an den Integralwert annähert... und das soll sie ja?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.11.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.11.2009, 20:31     Titel:
  Antworten mit Zitat      
Das war jetzt ein ganz Dummer Fehler von mir Harald.
Hast recht, der Integralwert wird genauer.
Mein Problem war das ich bei der Eingabe nicht gelesen hab was da steht, ich hatte im Kopf diese Reihenfolge:

a = input('Untere Intervallgrenze: ');
b = input('Obere Intervallgrenze: ');
n = input('Anzahl der Trapeze: ');

Kein Wunder das dann falsche Werte rauskommen Smile .

Ich hab da noch 2 letzte Fragen.
1) Wieso muss man bei fprintf das '@'-Zeichen eingeben
und bei 'function summe = intwert(fctn, a, b, n)' nicht?
2) Woher kommt die Funktion 'fctn', muss man die nicht vorher definieren, das ist doch die Funktion 'streifen'?

Danke nochmal.
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: 22.11.2009, 20:46     Titel:
  Antworten mit Zitat      
Hallo,

fctn ist eine veränderliche Funktion (Funktionshandle) die von außen übergeben wird. Innerhalb von intwert kann fctn daher wie eine Funktion verwendet werden.
Von außen muss man aber sagen, welche Funktion denn im Inneren von intwert konkret verwendet werden soll... und das ist streifen. Und damit da keine Verwechslungsgefahr mit einer "normalen" Variablen besteht, wurde das @ davor eingeführt.
Um das im Detail zu verstehen, arbeite dich doch am besten mal durch folgenden Teil der Doku:
http://www.mathworks.com/access/hel.....matlab_prog/f2-38133.html

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