2016-07-21 15 views
1

ein Integral ist Wie kann man mit MATLAB die Funktion lsqcurvefit integer type für einen der Parameter erzwingen? Der betreffende spezielle Parameter ist ein Index für einen Vektor, so dass nur ganzzahlige Werte sinnvoll sind; Die Anpassungsroutine könnte jedoch während der Iteration beliebige reale Werte für den Parameter versuchen.erzwingt, dass ein Parameter in der nichtlinearen Anpassung in MATLAB

+0

[Integer-Programmierung] (https://en.wikipedia.org/wiki/Integer_programming) ein wichtiges Teilgebiet der numerischen ist optimierungs und es ist * hart *: In diesem Artikel finden Matlab an [gemischte integer-lineare Programme] (http://www.mathworks.com/discovery/integer-programming.html), aber 'lsqcurvefit' ist allgemeiner als lineare Programme. –

+0

Sie könnten versuchen, 'lsqcurvefit' auszuführen und in Ihrer Zielfunktion nur die" Integer "-Elemente des Vektors" umrunden "- die Minimierungsroutine versucht natürlich Gleitkommazahlen, kann aber bemerken, dass Änderungen <0,5 keinen Unterschied machen die objektive Funktion, die je nach Problem in einem lokalen Minimum landen oder tatsächlich eine gute Lösung finden kann. –

+0

Wenn Sie sich nicht in einem Feld befinden, in dem ganzzahlige Programmierung eine gebräuchliche Technik ist, würde ich versuchen, das Problem neu zu formulieren, um die Integer-Abhängigkeit zu vermeiden. Vielleicht, wenn es nicht Billionen von Indizes gibt, können Sie den Ganzzahl-Index festhalten und den 'lsqcurvefit' für * jede * ganze Zahl (Brute-Force-Suche über alle Indizes) ausführen und den Index mit dem minimalen Fehler auswählen? –

Antwort

0

User001,

Der lsqcurvefit Parameter (Fun (eine Funktion), X0 reeller Vektor/Matrix Anfangspunkt, xdata reeller Vektor/Matrix-Eingangsdaten, YDATA reeller Vektor/Array-Antwortdaten von Modell Ub reellen Vektor/array oberen auf Variablen gebunden an Variablen, lb reeller Vektor/Array gebunden niedriger)

ich keine Indexwerte nur Arrays oder Vektoren und eine Funktion

Vielleicht Ihre MatLab Version ist anders als meine gesehen haben? Probe unter:

X0 = [100,-1]; fun = @(x,xdata)x(1)*exp(x(2)*xdata); 

lb = [0,-2]; 
ub = [3/4,-1]; 

xdata = ... 
    [0.9 1.5 13.8 19.8 24.1 28.2 35.2 60.3 74.6 81.3]; 
ydata = ... 
    [455.2 428.6 124.1 67.3 43.2 28.1 13.1 -0.4 -1.3 -1.5]; 
+0

Wir haben das gleiche Setup. Grundsätzlich möchte ich, dass einer meiner "x" -Werte obligatorisch integral ist, weil die objektive Funktion eine diskrete Faltung über eine Domäne enthält, die durch eine Teilmenge eines Vektors dargestellt wird, dessen Grenzen sich jedoch nur in ganzzahliger Richtung verschieben können Beträge. Vielen Dank. – user001

+0

Sorry, nichtlinear war explizit in Ihrer Frage. Diese Toolbox kann etwas haben http://www.mathworks.com/help/releases/R2016a/pdf_doc/stats/index.html Ich weiß nicht, ob Sie Zugriff darauf haben oder nicht. – atembedded