summaryrefslogtreecommitdiff
path: root/Tutorial3_Curve_fitting/Scilab_code
diff options
context:
space:
mode:
authorChayan Bhawal2018-09-28 11:07:55 +0530
committerChayan Bhawal2018-09-28 11:07:55 +0530
commit20c792454b7757064cb5ced103357bfed42d9b1a (patch)
tree827e0b685bd8c06fcf4d131b56763af5738d3407 /Tutorial3_Curve_fitting/Scilab_code
parentf91b28ce516ae287fbaac390cde07c7f7a9aca97 (diff)
downloadscilab-tutorials-20c792454b7757064cb5ced103357bfed42d9b1a.tar.gz
scilab-tutorials-20c792454b7757064cb5ced103357bfed42d9b1a.tar.bz2
scilab-tutorials-20c792454b7757064cb5ced103357bfed42d9b1a.zip
Tutorial3_data_fit
Diffstat (limited to 'Tutorial3_Curve_fitting/Scilab_code')
-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
3 files changed, 48 insertions, 0 deletions
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