% EXS 4.26 av Erik Dalsryd 2017-09-28
clear all, close all, clc
t = [1:8]';     % Tid i veckor
y = [0.03  0.09  0.19  0.4  0.51  0.55  0.6  0.61]';   % Antal gram

% Startgissningar
a = 0.61;
c = 0.5*log(a/0.19 - 1) - 0.5*log(a/0.51 - 1);
b = exp(3*c) * (a/0.19 - 1);
x = [a ; b ; c];   % Vektor med de sökta variablerna

dx = 1;   % Startvärde för felet för att komma in i while-loopen
while   max(abs(dx))  >  1e-9
    g = 1 + b*exp(-c*t);   % Nämnaren i F(t)
    f = a./g - y;   % f = F(t) - y
    dfdb = -a * exp(-c*t) ./ g.^2;   % dF/db
    dfdc = a*b*t.*exp(-c*t) ./ g.^2;   % dF/dc
    J     = [1./g  dfdb  dfdc];   % Jacobianen
    
    dx = J\f   % Uppskattat fel i a, b och c
    x   = x - dx;   % Uppdatera a, b och c
    a  = x(1);
    b  = x(2);
    c  = x(3);
end
minstaKvadratFelet = f' * f   % Minsta kvadratfelet
a, b, c