MATLAB - Funktionen. function fcn (Parameterliste) 1. Zeiger

Ähnliche Dokumente
4.2 Selbstdefinierte Matlab-Funktionen 1. Teil

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

WiMa-Praktikum 1. Woche 8

Einstieg in die Informatik mit Java

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Einstieg in die Informatik mit Java

Programmierung und Angewandte Mathematik

6 ZEIGER UND REFERENZEN - ALLGEMEINES

Einstieg in die Informatik mit Java

Programmieren in MATLAB Mehr als nur ein Taschenrechner

C.3 Funktionen und Prozeduren

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Musterklausur_2 Grundlagen Informatik

Wima 1 - Praktikum (Woche 6)

2 FUNKTIONSZEIGER UND BEHÄLTER

Programmieren in C. Zeiger auf Funktionen. Prof. Dr. Nikolaus Wulff

m-files sind Folgen von MATLAB-Anweisungen oder Daten-Files.

Bei den Parabeln gibt es eine Grundfigur: Die Normalparabel, sie hat die

Von der Programmiersprache WHILE zum ersten Einstieg in Java

Einführung in die Programmierung Wintersemester 2008/09

EWS, WS 2016/17 Pfahler I-1

Ulrich Stein

2. Unterprogramme und Methoden

Programmieren in MATLAB Mehr als nur ein Taschenrechner

2. Programmierung in C

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Systemnahe Programmierung in C (SPiC)

Praxis der Programmierung

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

2. Programmierung in C

Konzepte der Programmiersprachen

5.3 Auswertung von Ausdrücken

Analysis mit dem CAS

C++ - Funktionen und mehr -

4 Kontrollfluss-Diagramme

Funktionen. mehrfach benötigte Programmteile nur einmal zu schreiben und mehrfach aufzurufen

C++ - Objektorientierte Programmierung Vererbung

Prozeduren und Funktionen

Intuitive Einführung. Informatik B Objektorientierte Programmierung in Java. Vorlesung 01: Objektorientierte Programmierung (Teil 1)

Repetitorium Programmieren I + II

Grundlagen der Objektorientierten Programmierung - Methoden -

Einführung in die Programmierung mit VBA

6. Funktionen, Parameterübergabe

float *point(float a, float b); // Funktionsdeklaration Zeiger als Funktionswert // point liefert als Wert die Adresse seines Ergebnisses

2. Programmierung in C

Tag 4 Repetitorium Informatik (Java)

Programmierpraktikum

Java Einführung Methoden. Kapitel 6

CS1005 Objektorientierte Programmierung

Klassenvariablen, Klassenmethoden

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Tag 5. Repetitorium Informatik (Java) Dozent: Marius Kamp Lehrstuhl für Informatik 2 (Programmiersysteme)

Methoden und Wrapperklassen

Arrays,Strings&Pointer in C/C++

zu große Programme (Bildschirmseite!) zerlegen in (weitgehend) unabhängige Einheiten: Unterprogramme

Java Methoden. Informatik 1 für Nebenfachstudierende Grundmodul. Kai-Steffen Hielscher Folienversion: 1. Februar 2017

Übungspaket 4 Funktionszeiger

Tag 4 Repetitorium Informatik (Java)

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015. Musterlösung

Übung zur Vorlesung EidP (WS 2018/19) Blatt 4

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Überladene Funktionen und Operatoren

Objektorientierte Programmierung (OOP) mit Matlab - Ein Crashkurs

Delegates. «Delegierter» Methoden Schablone Funktionszeiger. Dr. Beatrice Amrhein

8. Referenzen und Zeiger

Strukturierte Programmierung und Funktionen

C++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Prof. W. Henrich Seite 1

C++ - Einführung in die Programmiersprache Funktionen. Leibniz Universität IT Services Anja Aue

ISO-SiMMlarcl. als erste Programmiersprache. Von Prof. Dr. Joachim Goll Uwe Grüner Prof. Herbert Wiese 2., durchgesehene Auflage

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

Einstieg in die Informatik mit Java

Test-Klausuraufgaben Softwaretechnik Fachbereich BW, für WINFO

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Informatik II Übung 05. Benjamin Hepp 3 April 2017

Objektorientierte Programmierung mit C++ (WS 2016/2017)

Parameterübergabemechanismen für den Methodenaufruf

Dynamische Datentypen

Algorithmen & Programmierung. Rekursive Funktionen (1)

6. Unterprogramme 6-1

Funktionen in Matlab. Nutzerdefinierte Funktionen können in.m-datei gespeichert werden

Programmiertechnik Klassenvariablen & Instantiierung

Die Sprache C# Datentypen, Speicherverwaltung Grundelemente der Sprache. Dr. Beatrice Amrhein

Funktionen: Rückgabewert

Unterprogramme. AnPr. Wiederholungen im Code werden vermieden. Programme werden leichter lesbar. Die Entwicklung und der Test werden vereinfacht.

4.2. Übung. Einführung in die Programmierung (MA 8003)

Felder (1) Felder (Arrays) speichern viele Datenelemente des gleichen Typs. Auf einzelne Elemente kann über einen Index zugegriffen werden

Teil VI: Prozeduren Feld-Parameter & Typen. 1. Offene ARRAY-Parameter 2. Prozedurtypen und -variablen

Operatoren in C/C++ und Java:

Schwerpunkte. 10. Felder (Arrays) Grundprinzip von Arrays. Klassifikation von Typen in Programmiersprachen

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Übungsblatt 4 Musterlösung

Transkript:

1 MATLAB - Funktionen Funktionszeiger 1. Zeiger Zeiger (in der MATLAB-Notation @<zeigername>) sind Variablen, die als Inhalt (Wert) Adressen (z.b. von anderen Variablen oder von Funktionen) haben. Sie werden verwet, um den indirekten Zugriff auf Variablen oder Funktionen zu ermöglichen. Die Verwung von Zeigern kommt in den Sprachen C, C++ und weniger in C# eine besondere Bedeutung bei der Speicherverwaltung zu. Da die Zeigertechnik erhebliche Sicherheitsprobleme aufwirft, wird sie in modernen objektorientierten Sprachen wie C# oder Java zurückgedrängt. In MATLAB besteht im Zusammenhang mit parametrisierten Funktionsaufrufen die Notwigkeit, Zeiger auf Funktionen zu deklarieren und als Funktionsparameter zu verwen. Diese Funktionszeiger werden auch als handles bezeichnet. 2. Deklaration von Zeigern Die Deklaration von Zeigern erfolgt mit dem Operatorsymbol @, so stellt z.b. @fcn einen Zeiger auf die Funktion mit dem Funktionskopf function fcn (Parameterliste) dar. Ein Aufruf

2 >> fdemo (@fcn) ruft nun nicht die Funktion fdemo mit einem Wert auf, sondern mit einem Ausdruck, der von der Funktion syntaktisch und semantisch ausgewertet werden kann. 3. Wertetabelle der Sinusfunktion Wir wollen mit der Funktion feval die Wertetabelle der Sinusfunktion berechnen. Dazu müssen wir der Funktion feval einen Funktionszeiger als Parameter übergeben. Die Formatierung der Parameterübergabe wird durch die mögliche Überladung feval (<Funktionszeiger>, <Vektor>) 1 der Funktion feval erzwungen. Der erste Parameter ist ein Zeiger auf den auszuwerten Funktionsterm, der zweite Parameter der Wertebereich, auf dem diese Funktion ausgewertet werden soll. Wir konstruieren auf der Kommandoebene einen Vektor x, der den Wertebereich einer Wertetabelle der MATLAB Funktion sin(x) darstellt und rufen von der Kommandoebene mit >> x = (0:4) >> feval (@sin, x) die Funktion feval mit dem Verweis auf die Sinusfunktion auf. 2 3 Die Übergabe eines Funkti- 1 2 Die Metanotation <ausdruck> bedeutet, daß der Term ausdruck durch einen Term des terminalen Vokabulars der MATLAB-Grammatik zu ersetzen ist. Andere Funktionsaufrufe, wie z.b. der direkte Aufruf der Funktion sin(x) >> feval (sin(x), x) sind hier unzulässig und führen zur Fehlermeldung >> feval(sin(x),x)

3 onszeiger ist auch dann erforderlich, wenn eine selbstdefinierte Funktion einen Parameter übernimmt, der nachfolg als Parameter an eine Funktion weitergegeben werden soll, die an der betreffen Stelle einen Parameter vom Typ Zeiger erwartet. Soll z.b. die Funktion wtab eine Wertetabelle mit dem internen Aufruf der Funktion feval berechnen, dann muß auch der Funktionsparameter der Funktion wtab (implizit oder explizit) als vom Typ Zeiger deklariert werden. Listing 1 function wert = wtab(funk) x = (0:4) wert = feval (funk, x) Die Funktion wtab kann von der Kommandoebene aufgerufen werden. Der entspreche Funktionsaufruf zur Berechnung von Werten der Funktion sin(x) lautet >> wtab (@sin)??? Error using ==> feval Argument must contain a string or function_handle. 3 Alternativ ist auch der Funktionsaufruf >> feval ('sin') möglich. Bei diesem Funktionsaufruf erfolgt eine implizite Typkonvertierung von 'sin' vom Typ 'string' zu @sin, d.h. in den Typ 'Zeiger',

4 Die Ausgabe der Funktionswerte erfolgt dann auf der Kommandoebene. 4. Berechnung der Parabel f(x) = a x 2 + b x + c Funktionszeiger können von Funktionen an andere Funktionen weitergeben werden. In nachfolgem Beispiel soll die selbstdefinierte Funktion Main() die selbstdefinierte Funktion par() aufrufen. Die Funktion par() berechnet die Funktionswerte einer Parabel mit den Koeffizienten a, b und c auf dem durch den Vektor (hier) x = [0 1 2 3 4 5] definierten Wertebereich.. Der Funktionsaufruf y = par() ruft die parameterlose Funktion par() auf. Soll diese Berechnung mit der Funktion feval ausgeführt werden, muß die aufrufe Funktion den Zeiger @par übergeben, der entspreche Funktionsaufruf ist w = wtab (@par) Nachfolges Programm zeigt den hierarchischen Funktionsaufruf >> Main (wtab (feval(@par()))) mit dem Funktionszeiger z = @par.

5 Listing 2 function Main() % Variablen zurücksetzen % Konsole löschen clear all clc % Funktionszeiger deklarieren z = @par % Funktionsaufruf mit Zeiger w = wtab(z) function f = par(x) % Deklaration des Wertebereichs % Deklaration /Initialisierung der % Koeffizienten a = 1 b = 0 c = 1 % Rückgabe des Funktionswerts f = (a.*(x.*x) + b.*x + c); function wert = wtab(fhnd) x = (0:5) wert = feval (fhnd, x);

6 Die Funktion Main() ruft die Funktion wtab mit dem Funktionszeiger @par als Parameter auf. Die Funktion wtab übernimmt den Funktionszeiger @par als Wert des Parameters fhnd. fhnd wird nun in den Typ Zeiger (implizit) konvertiert und wertet den Funktionsterm, auf den der Zeiger @par weist, aus. Die Ausgabe erfolgt in der Funktion Main().