From 18976d3350c33a2dfe9c2da57de49c58aa036858 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Thu, 22 Oct 2015 20:23:35 +0200 Subject: [PATCH] add code files and mat files --- statistics/code/iv_curve.mat | Bin 0 -> 10787 bytes statistics/code/lin_regression.mat | Bin 0 -> 487 bytes statistics/code/lsq_error.m | 6 + statistics/code/lsq_gradient.m | 7 ++ statistics/code/lsq_gradient_sigmoid.m | 9 ++ statistics/code/lsq_sigmoid_error.m | 8 ++ statistics/code/membraneVoltage.mat | Bin 0 -> 1510 bytes statistics/code/plot_error_surface.m | 112 +++++++++++++++++++ statistics/code/sigmoidal_gradient_descent.m | 44 ++++++++ 9 files changed, 186 insertions(+) create mode 100644 statistics/code/iv_curve.mat create mode 100644 statistics/code/lin_regression.mat create mode 100644 statistics/code/lsq_error.m create mode 100644 statistics/code/lsq_gradient.m create mode 100644 statistics/code/lsq_gradient_sigmoid.m create mode 100644 statistics/code/lsq_sigmoid_error.m create mode 100644 statistics/code/membraneVoltage.mat create mode 100644 statistics/code/plot_error_surface.m create mode 100644 statistics/code/sigmoidal_gradient_descent.m diff --git a/statistics/code/iv_curve.mat b/statistics/code/iv_curve.mat new file mode 100644 index 0000000000000000000000000000000000000000..d551ec72143e511bcb6a657b1a1d7eb231f671d3 GIT binary patch literal 10787 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%0AG`v3ott74Gfd{k;ryn+{ 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 Y|0}Spo&OasjRu3v=z1#aRNegFUf literal 0 HcmV?d00001 diff --git a/statistics/code/lin_regression.mat b/statistics/code/lin_regression.mat new file mode 100644 index 0000000000000000000000000000000000000000..6a2162211ff903c5586fb5a36bee5375f29849eb GIT binary patch literal 487 zcmeZu4DoSvQZUssQ1EpO(M`+DN!3vZ$Vn_o%P-2cQgHY2i*PhE(NSSQtP%t#MGP1BTHV3i|O%;d)3^2gx>B|pfcLH(6oX5!t2|E~$sR%sd@396iPBp44hp9ANdB<@eB@L1i8LkwW>5|0<?`*2F$$DhINW{8z`)Go_8#P*b9f!Z33iac`?|l8KkGOCYWx~6Ew$Yz zz*-?>%8Q_9%L^K6T~p8JRqtf}?VVKLdZbfs$JaZ#bqTw!G>UIe7u#IfEmu)CBYP&e~u;Zb9k5>OPHDnKU{CM=#qb|PKnWED9K4B$0>fWc7FI>0Fx$gn< P+g!USK8EM7JbwcK2=l=y literal 0 HcmV?d00001 diff --git a/statistics/code/lsq_error.m b/statistics/code/lsq_error.m new file mode 100644 index 0000000..8fcaa30 --- /dev/null +++ b/statistics/code/lsq_error.m @@ -0,0 +1,6 @@ +function error = lsq_error(parameter, x, y) +% parameter(1) is the slope +% parameter(2) is the intercept + +f_x = x .* parameter(1) + parameter(2); +error = mean((f_x - y).^2); \ No newline at end of file diff --git a/statistics/code/lsq_gradient.m b/statistics/code/lsq_gradient.m new file mode 100644 index 0000000..6773c4e --- /dev/null +++ b/statistics/code/lsq_gradient.m @@ -0,0 +1,7 @@ +function gradient = lsq_gradient(parameter, x, y) +h = 1e-6; + +partial_m = (lsq_error([parameter(1)+h, parameter(2)],x,y) - lsq_error(parameter,x,y))/ h; +partial_n = (lsq_error([parameter(1), parameter(2)+h],x,y) - lsq_error(parameter,x,y))/ h; + +gradient = [partial_m, partial_n]; \ No newline at end of file diff --git a/statistics/code/lsq_gradient_sigmoid.m b/statistics/code/lsq_gradient_sigmoid.m new file mode 100644 index 0000000..05e9721 --- /dev/null +++ b/statistics/code/lsq_gradient_sigmoid.m @@ -0,0 +1,9 @@ +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 \ No newline at end of file diff --git a/statistics/code/lsq_sigmoid_error.m b/statistics/code/lsq_sigmoid_error.m new file mode 100644 index 0000000..5f05f21 --- /dev/null +++ b/statistics/code/lsq_sigmoid_error.m @@ -0,0 +1,8 @@ +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); \ No newline at end of file diff --git a/statistics/code/membraneVoltage.mat b/statistics/code/membraneVoltage.mat new file mode 100644 index 0000000000000000000000000000000000000000..26d9f4476a374b505a355ea17a714018f2a9b836 GIT binary patch literal 1510 zcmV_4ZaN@TXmub@V{{-fHXt!IIyE*rH8LPFFflYBARr(hARr(hARr(hARr(hARr(h zARr(hARr(hARr(hARr(hARr(B00000000000ZB~{0000`0{{ScoGpB zSKTz0ft3xB&M_V;t_{8hf{sz~McwUj$uFOLbHBTMes@A1kC*Ds<9RU(c>nRA<@tYh zW3}yHy77t`eOQIE{)@CBRB+jJVK7sv?v#&7)4Ur5Z+AbGt`C!cxXCap6$!Lky#t<0 zD?3$1v*%sXk41~SF1*BtQ5mjmOmIi+)4aiUp$E>C>J^q6Z)mJP$yRFxFg__u5et0r zAbC*LkmHZ?Nd8Xy7JqEx>;sSLg%Az-{XJuEWM*cSuR%(?o(5KD|{p zuX9L>>%f9P2x{AHNhT{nQB!8=o)&`ETPj!OGJ;p8ZYVqt5Ok@O_TFKFh}b_XZfgkm zwKc}|tpxAv(56h@AP79X(l``M@%{&;is0oGlBQYF#3_QNwyzu1DFl+4p-S7&1P@O~ zCcRO?vVAmt(u=~f-NTajDn-zV%az$-6w|lXMBmv@q1@7CT~$Jnc5g$w+)2)dmG!=!7P z=Co;AimGXvRn1}NJW0J(Qj@eMRrjg)m`(dXDqOeT|LJ`JtG+>+qh)I(^&RIQQCMGn zeR}mX*Lxw;BYoWO$F=Orre9YFdF~5x#v9Z##PcpZzIf&S#*bm%8^we6;&aPY-*|rv zPUFu0`G4Q3GY&cadV+eB$nC1_n>;l|-DzZQKYTehG(-KLc>3v5&)vLP_L+qeF_qYF z4mGT1^QUPO?6uB(9a?+D|M%_NMB1(BBm1kE#r*c?65+g zt2kk8(C->VCVQQ}*Kx45*_5LHP1pvWs05qL;fA^DXmK--8;{hjx5quq?a35ZmZR-Za;bWQ6hl@ 0.1 + gradient = lsq_gradient(position, x,y); + error = lsq_error(position, x, y); + plot3(position(1), position(2), error, 'o', 'color', 'red') + position = position - eps .* gradient; + pause(0.25) +end +disp('gradient descent done!') +disp(strcat('final position: ', num2str(position))) +disp(strcat('final error: ', num2str(error))) + + + diff --git a/statistics/code/sigmoidal_gradient_descent.m b/statistics/code/sigmoidal_gradient_descent.m new file mode 100644 index 0000000..9763f5a --- /dev/null +++ b/statistics/code/sigmoidal_gradient_descent.m @@ -0,0 +1,44 @@ + + +%% 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)