2013-02-18 20 views
5

Mam funkcję optymalizacji, powiedzmy funkcji, w programie Matlab. Ta funkcja zależy od zmiennych (powiedzmy x), nad którymi chcę zoptymalizować i jednego parametru (np. Q), który nie musi być zoptymalizowany. Stąd funkcja Function (x, Q). Innymi słowy, mam tablicę wartości dla Q i chcę znaleźć optymalne wartości x dla każdego Q. Nie mogę jednak znaleźć sposobu na przekazanie tych wartości Q podczas używania funkcji handle @Function w funkcji optymalizacji.Przekazywanie dodatkowych argumentów przez uchwyt funkcji w Matlab

Moje pytanie brzmi: jak przekazywać te wartości Q podczas używania funkcji w funkcjach optymalizacyjnych, na przykład fmincon (funkcja @, x0, A, b)?

+1

Does 'fmincon (@ funkcji, x0, Q, A , b) 'praca? –

+0

@DennisJaheruddin Nie, to nie działa. Niestety. – Tomas

Odpowiedz

4

Spróbuj użyć anonimowego funkcję:

x = cell(1, numel(Q)); 
for qi = 1:numel(Q) 
    x{qi} = fmincon(@(x) Function(x, Q(qi)), A, b); 
end 
+1

Dzięki, działało jak czar! – Tomas

4

Jak opisano w dokumentacji MATLAB, nie są w rzeczywistości 3 rozwiązania dla tego problemu:

  1. anonimowych Funkcje
    który jest opisany w Shai's answer tego postu.
  2. Funkcje zagnieżdżone:
    w tym podejściu funkcja zewnętrzna przyjmuje wszystkie argumenty, a funkcja wewnętrzna przyjmuje tylko te parametry, które mają na nich miejsce.
    jest to przykład wzięty z dokumentacji MATLAB: function [x,fval] = runnested(a,b,c,x0) [x,fval] = fminunc(@nestedfun,x0); % Nested function that computes the objective function function y = nestedfun(x) y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)x(2) +... (-c + cx(2)^2)*x(2)^2; end end
  3. zmienne globalne
    w tym podejściu należy zdefiniować parametry, które są potrzebne w funkcji celu jak global w obszarze roboczym, i używać ich w funkcji celu z ich deklarowania jako globalny.
    Oto przykład ponownie z dokumentacji MATLAB:
    • Definiowanie funkcji celu: function y = globalfun(x) global a b c y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)x(2) + ... (-c + cx(2)^2)*x(2)^2; end
    • optymalizacja: global a b c; a = 4; b = 2.1; c = 4; % Assign parameter values x0 = [0.5,0.5]; [x,fval] = fminunc(@globalfun,x0)
Powiązane problemy