summaryrefslogtreecommitdiff
path: root/Tutorial03-Curve_fitting/Scilab_code
diff options
context:
space:
mode:
Diffstat (limited to 'Tutorial03-Curve_fitting/Scilab_code')
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/README.md1
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce33
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce37
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/errorfun.sci4
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/errorfunweight.sci4
-rw-r--r--Tutorial03-Curve_fitting/Scilab_code/fit_function.sci6
6 files changed, 85 insertions, 0 deletions
diff --git a/Tutorial03-Curve_fitting/Scilab_code/README.md b/Tutorial03-Curve_fitting/Scilab_code/README.md
new file mode 100644
index 0000000..37230ff
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Scilab_code/README.md
@@ -0,0 +1 @@
+# Scilab code for curve fitting
diff --git a/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce b/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce
new file mode 100644
index 0000000..43e34db
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce
@@ -0,0 +1,33 @@
+//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);
+
+// initial parameters guess
+initial_condition = [1 ; 1];
+
+//Call least square function,
+//Output is function value (func_value_xopt) at optimal coefficients (x_optimal))
+[func_value_xopt,coeff_optimal] = leastsq(list(errorfun,time,measured_data),initial_condition)
+
+error = errorfun(coeff_optimal,time,measured_data)
+disp(error,'The error after least square approximation')
+
+
+// Plot of measured data and fitted data versus time
+fitted_data = fit_function(time, coeff_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/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce b/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce
new file mode 100644
index 0000000..866a070
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce
@@ -0,0 +1,37 @@
+//This function is for curve fitting using least-square
+
+clear
+clc
+
+//The function to be fitted
+exec fit_function.sci;
+//The error function
+exec errorfunweight.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 = [1 1 1 1 1 1 5 5 5 5 5 5 5]';
+
+
+// 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(errorfunweight,time,measured_data,weight_matrix),initial_condition)
+
+error = errorfunweight(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/Tutorial03-Curve_fitting/Scilab_code/errorfun.sci b/Tutorial03-Curve_fitting/Scilab_code/errorfun.sci
new file mode 100644
index 0000000..741ad63
--- /dev/null
+++ b/Tutorial03-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)
+ err = (fit_function(time, x) - measured_data )
+endfunction
diff --git a/Tutorial03-Curve_fitting/Scilab_code/errorfunweight.sci b/Tutorial03-Curve_fitting/Scilab_code/errorfunweight.sci
new file mode 100644
index 0000000..9326d91
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Scilab_code/errorfunweight.sci
@@ -0,0 +1,4 @@
+//A function to compute error between computed data and measured data
+function err = errorfunweight(x, time, measured_data, weight_matrix)
+ err = weight_matrix.*(fit_function(time, x) - measured_data )
+endfunction
diff --git a/Tutorial03-Curve_fitting/Scilab_code/fit_function.sci b/Tutorial03-Curve_fitting/Scilab_code/fit_function.sci
new file mode 100644
index 0000000..49240e8
--- /dev/null
+++ b/Tutorial03-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