nonlin

nonlin berechnet die Parameter einer gegebenen (nichtlinearen) Funktion, so daß die Abweichung der Funktion zu gegebenen Datenpunkten minimiert wird.

pEnd = nonlin(fit, y, x, pStart)
pEnd = nonlin(fit, y, x, pStart, bPrint)

Returnwert

pEnd sind die Parameter der Funktion fit.

Parameter

fit

fit ist eine vom Benutzer bereitzustellende Funktion (siehe Beispiel).

y

y ist ein Spaltenvektor mit den y-Koordinaten der Daten.

x

x ist ein Spaltenvektor mit den x-Koordinaten der Daten.

pStart

pStart ist ein geschätzter Startvektor.

bPrint

Wenn bPrint FALSE (0) ist, werden keine Informationen im Kommandofenster ausgegeben.

Beispiel

def fit_exp(x, p)
{
    return p[1] + p[2] .* exp(p[3] .* x);
}
rmXY = [ ..
    1.2600,      0.4000;
    1.6000,      0.2800;
    1.6300,      0.2900;
    1.6500,      0.2300;
    1.6900,      0.2000;
    1.7000,      0.1850;
    1.7600,      0.1600;
    2.0000,      0.0750;
    2.2300,      0.0550;
    2.5000,      0.0400];
p_start = [0,0,0];
p_end = nonlin(fit_exp, rmXY[;2], rmXY[;1], p_start);
x = linspace(1.2, 2.6, 50);
y = fit_exp(x', p_end);
h = plot(x, y);
h = plot (rmXY[;1], rmXY[;2], h[2]);
XYShowMarker(h[3], TRUE);
XYShowLine(h[3], FALSE);
PageReplot(h[1]);

nonlin kann auch für xyz-Datensätze verwendet werden, hier ein Beispiel:

def fit_xyz_poly2(_x, p)
{
    x = _x[;1]
    y = _x[;2]
    return p[1] + ..
           p[2] .* x + ..
           p[3] .* y + ..
           p[4] .* x .* x + ..
           p[5] .* y .* y + ..
           p[6] .* x .* y;
}
def test2(hDataXYZ)
{
    rmXYZ = XYZGetData(hDataXYZ);
    p_start = zeros(1,6); [0.1, 1, 1, 1, 0.01, 1];
    p_end = nonlin(fit_xyz_poly2, rmXYZ[;3], rmXYZ[;1,2], p_start);
    Z = fit_xyz_poly2(rmXYZ[;1,2], p_end)
    plotmatrix(rmXYZ[;1], rmXYZ[;2], Z)
}
../../_images/fit.png

id-697354