summaryrefslogtreecommitdiff
path: root/Tutorial3_Curve_fitting
diff options
context:
space:
mode:
Diffstat (limited to 'Tutorial3_Curve_fitting')
-rw-r--r--Tutorial3_Curve_fitting/Data/Tut3_Data.csv13
-rw-r--r--Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce38
-rw-r--r--Tutorial3_Curve_fitting/Scilab_code/errorfun.sci4
-rw-r--r--Tutorial3_Curve_fitting/Scilab_code/fit_function.sci6
4 files changed, 61 insertions, 0 deletions
diff --git a/Tutorial3_Curve_fitting/Data/Tut3_Data.csv b/Tutorial3_Curve_fitting/Data/Tut3_Data.csv
new file mode 100644
index 0000000..fdaefcc
--- /dev/null
+++ b/Tutorial3_Curve_fitting/Data/Tut3_Data.csv
@@ -0,0 +1,13 @@
+1,0.53916873238049445
+2,0.17798153799600328
+3,0.12207292040943035
+4,0.083177346548027525
+5,0.055253064762310761
+6,0.027227945666794384
+7,0.075642331036411825
+8,0.044912538844899041
+9,0.078845397608171469
+10,0.058759243199075772
+11,0.034198514001116481
+12,0.069646888441571811
+13,0.012750355494905292
diff --git a/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce b/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce
new file mode 100644
index 0000000..57ba922
--- /dev/null
+++ b/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce
@@ -0,0 +1,38 @@
+//This function is for curve fitting using least-square
+
+clear
+clc
+
+//The function to be fitted
+exec fit_function.sci;
+//The error function
+exec errorfun.sci;
+
+//Read measured data
+Data = csvRead('/home/chayan/Documents/scilab-tutorials/Tutorial3_Curve_fitting/Data/Tut3_Data.csv')
+//Time stamp
+time = Data(:,1);
+//Measured output
+measured_data = Data(:,2);
+
+// weights for data fitting
+weight_matrix = ones(length(time),1);
+//weight_matrix = [2 2 2 2 1 1 1 1 -3 -3 -3 1 1]';
+
+
+// minimize f(x) = sum_i weight_matrix(i)^2 (weight_matrix(tm(i),a,b) - measured_data(i))^2
+// initial parameters guess
+initial_condition = [1 ; 1];
+
+//f is the function value at optimal x (xopt)
+[func_value_xopt,x_optimal] = leastsq(list(errorfun,time,measured_data,weight_matrix),initial_condition)
+
+error = errorfun(x_optimal,time,measured_data,weight_matrix)
+disp(error,'The error after least square approximation')
+
+
+// a small graphic
+fitted_data = fit_function(time, x_optimal);
+plot2d(time, [measured_data,fitted_data], [-1,2])
+legend(["measure points", "fitted curve"],[-1,2],"ur");
+xtitle("a simple fit with leastsq","time","data")
diff --git a/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci b/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci
new file mode 100644
index 0000000..0b93304
--- /dev/null
+++ b/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci
@@ -0,0 +1,4 @@
+//A function to compute error between computed data and measured data
+function err = errorfun(x, time, measured_data, weight_matrix)
+ err = weight_matrix.*(fit_function(time, x) - measured_data )
+endfunction
diff --git a/Tutorial3_Curve_fitting/Scilab_code/fit_function.sci b/Tutorial3_Curve_fitting/Scilab_code/fit_function.sci
new file mode 100644
index 0000000..49240e8
--- /dev/null
+++ b/Tutorial3_Curve_fitting/Scilab_code/fit_function.sci
@@ -0,0 +1,6 @@
+//The function to be fitted in the measured data
+function y = fit_function(t, x)
+ a = x(1);
+ b = x(2);
+ y = a./(1+b.*t.*t)
+endfunction