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

Hilfsfunktion erstellen

 

Bianka_F
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 19:24     Titel: Hilfsfunktion erstellen
  Antworten mit Zitat      
Hallo Leute,
Ich habe follgendes Funktionsfiles mit der Struktur:
Code:

function [ f_opt, x_opt, iter, time ] = multiplikatoren( fname, hname, x0, mu0, t0, verfahren )
 


Ich will jetzt innerhalb des Funktion-Files eine Hilfsfunkiton definieren, die die beiden Funktionen fname und hname benutzt. Wie macht man das denn? Wenn ich schreibe:
Code:

help_funktion = fname + mu * hname + t0 * hname^2;
 

bekomme ich folgende Fehlermeldung:
Code:

>> multiplikatoren (@f_1, @h, x, mu, t, @bfgs) % Aufruf des Verfahrens
Undefined function 'mtimes' for input arguments of type 'function_handle'.

Error in multiplikatoren (line 16)
         help_funktion = fname + mu * hname + t0 * hname^2;
 
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 20:26     Titel:
  Antworten mit Zitat      
Also der Threadtitel erscheint mir etwas seltsam.

Kann es sein, dass Du eine Funktion, die Du via Handle (@) übergibst aufrufen willst !?
Schau Dir http://www.mathworks.de/help/techdoc/matlab_prog/f4-70115.html an, d.h. Deine Variable fname enthält dann keinen Wert, sondern eine Funktion.

Falls für fname sowohl ein Handle, wie auch ein Wert möglich sein soll, musst Du das eben intern passend behandeln.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bianka_F
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 21:50     Titel:
  Antworten mit Zitat      
Also ich will innerhalb eines Function-Files eine neue Funktion definieren mit dem Name help_funktion. Diese Funktion soll wie folgt definiert werden:
Code:

help_funktion= fname + mu * hname + t0 * hname^2;
 

wobei fname und hname jeweils Funktionen sind, die dem Funkction-File, in dem diese Hilfsfunktion benutzt werden soll, übergeben werden.
mu und t0 sind jeweil Konstanten, die dem Function-File übergeben werden.
Diese help_funktion soll einfach eine neue Funktion sein, die wiederum einen Parameter erwartet ( einen Vektor x).
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 22:05     Titel:
  Antworten mit Zitat      
Hallo,

Function-Handles werden exakt wie richtige Funktionen verwendet.
Genauso wie
Code:
keinen Sinn macht, sondern
die Funktionen einen Parameter erwarten:
Code:

so erwartet fname auch einen Parameter mit dem die Funktion
aufgerufen wird und dessen Rückgabe-Wert dann mit mu multipliziert
wird. Deine Funktions-Definition muß also wissen, dass sie mit x aufgerufen wird:
Code:
help_funktion= @(x)(fname(x) + mu * hname(x) + t0 * hname(x)^2);


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Bianka_F
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2012, 23:49     Titel:
  Antworten mit Zitat      
Vielen Dank für die Antwort. Es ergibt sich für mich jedoch ein weiteres Problem. Ich will die Funktion "help_funktion" so gestalten, dass man auch den Gradienten ausrechnen kann. Das heißt ich will die Funktion:

help_funktion(x) = fname (x)+ mu * hname(x) + t0 * hname(x)^2;

ableiten, wobei ich den Gradieten von fname und hname bereits in einem anderem Function-File berechnet habe. Gemäß der Summen und Kettenregel müsste ja die Ableitung so lauten:

grad help_funktion(x) = grad fname(x) + mu*grad hname(x) + 2 * t0 * grad hname(x)
(wobei grad für den Gradienten der jeweiligen Funktionen steht).
Dabei ergeben sich für mich 2 fundamentale Fragen:

1. Wie kann ich in dem Funktion-File die Funktion help_funktion so definieren, dass sie mir bei Bedarf nur den Gradieten aus Rückgabewert liefert
2. Wie muss der Code lauten, damit ich die in anderen Function-Files berechneten Gradieten ( von fname und hname), die auch von x abhängen, verwenden kann um den Gradienten von help_funktion zu berechnen
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.08.2012, 00:13     Titel:
  Antworten mit Zitat      
Bianka_F hat Folgendes geschrieben:

1. Wie kann ich in dem Funktion-File die Funktion help_funktion so definieren, dass sie mir bei Bedarf nur den Gradieten aus Rückgabewert liefert


In dem Du die Rückgaben Deiner Funktionen anpasst

Bianka_F hat Folgendes geschrieben:

2. Wie muss der Code lauten, damit ich die in anderen Function-Files berechneten Gradieten ( von fname und hname), die auch von x abhängen, verwenden kann um den Gradienten von help_funktion zu berechnen


Wir kennen Deinen Code nicht und die Berechnung des Gradienten musst entweder händisch selbst machen (also anhand Deiner Daten) oder Du nutzt die Symbolic Toolbox, legst dort die Funktion an, substituierst entsprechend die Variablen und erstellen den Gradienten bzw die Ableitung, der Gradient ist ja nichts anderes als die mehrdimensionale Ableitung.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bianka_F
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 25.05.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.09.2012, 22:31     Titel:
  Antworten mit Zitat      
Hallo, meine erste Frage lautete ja:
" Wie kann ich in dem Funktion-File die Funktion help_funktion so definieren, dass sie mir bei Bedarf nur den Gradieten aus Rückgabewert liefert "
darauf wurde folgendes geantwortet:
Zitat:

In dem Du die Rückgaben Deiner Funktionen anpasst


Wie kann ich das denn machen? Ich habe ja kein separates Functon-File für die help_funktion definiert. Dies ist nur eine lokale Funktion, die innerhalb eines anderen Function-Files existiert
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.