Verfasst am: 21.11.2009, 21:48
Titel: Function handle
Guten Tag,
das ist mein erster Beitrag .
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))
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 % -------------------------------------------------------------------------
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
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?
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 .
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'?
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
Einstellungen und Berechtigungen
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
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.