move regression code from statistics to regression folder
This commit is contained in:
parent
e74993c2cf
commit
cc2515f22b
@ -1,9 +0,0 @@
|
|||||||
function gradient = lsq_gradient_sigmoid(parameter, x, y)
|
|
||||||
h = 1e-6;
|
|
||||||
|
|
||||||
gradient = zeros(size(parameter));
|
|
||||||
for i = 1:length(parameter)
|
|
||||||
parameter_h = parameter;
|
|
||||||
parameter_h(i) = parameter_h(i) + h;
|
|
||||||
gradient(i) = (lsq_sigmoid_error(parameter_h, x, y) - lsq_sigmoid_error(parameter, x, y)) / h;
|
|
||||||
end
|
|
@ -1,8 +0,0 @@
|
|||||||
function error = lsq_sigmoid_error(parameter, x, y)
|
|
||||||
% p(1) the amplitude
|
|
||||||
% p(2) the slope
|
|
||||||
% p(3) the x-shift
|
|
||||||
% p(4) the y-shift
|
|
||||||
|
|
||||||
y_est = parameter(1)./(1+ exp(-parameter(2) .* (x - parameter(3)))) + parameter(4);
|
|
||||||
error = mean((y_est - y).^2);
|
|
@ -1,44 +0,0 @@
|
|||||||
|
|
||||||
|
|
||||||
%% fit the sigmoid
|
|
||||||
|
|
||||||
clear
|
|
||||||
close all
|
|
||||||
|
|
||||||
load('iv_curve.mat')
|
|
||||||
|
|
||||||
figure()
|
|
||||||
plot(voltage, current, 'o')
|
|
||||||
xlabel('voltate [mV]')
|
|
||||||
ylabel('current [pA]')
|
|
||||||
|
|
||||||
% amplitude, slope, x-shift, y-shift
|
|
||||||
%parameter = [10 0.25 -50, 2.5];
|
|
||||||
parameter = [20 0.5 -50, 2.5];
|
|
||||||
|
|
||||||
eps = 0.1;
|
|
||||||
% do the descent
|
|
||||||
gradient = [];
|
|
||||||
steps = 0;
|
|
||||||
error = [];
|
|
||||||
|
|
||||||
while isempty(gradient) || norm(gradient) > 0.01
|
|
||||||
steps = steps + 1;
|
|
||||||
gradient = lsq_gradient_sigmoid(parameter, voltage, current);
|
|
||||||
error(steps) = lsq_sigmoid_error(parameter, voltage, current);
|
|
||||||
parameter = parameter - eps .* gradient;
|
|
||||||
end
|
|
||||||
plot(1:steps, error)
|
|
||||||
|
|
||||||
disp('gradient descent done!')
|
|
||||||
disp(strcat('final position: ', num2str(parameter)))
|
|
||||||
disp(strcat('final error: ', num2str(error(end))))
|
|
||||||
|
|
||||||
%% use fminsearch
|
|
||||||
parameter = [10 0.5 -50, 2.5];
|
|
||||||
|
|
||||||
objective_function = @(p)lsq_sigmoid_error(p, voltage, current);
|
|
||||||
param = fminunc(objective_function, parameter);
|
|
||||||
disp(param)
|
|
||||||
param1 = fminsearch(objective_function, parameter);
|
|
||||||
disp(param1)
|
|
Reference in New Issue
Block a user