summaryrefslogtreecommitdiff
path: root/Tutorial03-Curve_fitting
diff options
context:
space:
mode:
Diffstat (limited to 'Tutorial03-Curve_fitting')
-rw-r--r--Tutorial03-Curve_fitting/Data/README.md1
-rw-r--r--Tutorial03-Curve_fitting/Data/Tut3_Data.csv13
-rw-r--r--Tutorial03-Curve_fitting/Problems/README.md1
-rw-r--r--Tutorial03-Curve_fitting/Problems/Tut3.pdfbin0 -> 43895 bytes
-rw-r--r--Tutorial03-Curve_fitting/Problems/Tut3Problem.csv91
-rw-r--r--Tutorial03-Curve_fitting/README.md1
-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
12 files changed, 192 insertions, 0 deletions
diff --git a/Tutorial03-Curve_fitting/Data/README.md b/Tutorial03-Curve_fitting/Data/README.md
new file mode 100644
index 0000000..7b5f1bd
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Data/README.md
@@ -0,0 +1 @@
+# Data for curve fitting
diff --git a/Tutorial03-Curve_fitting/Data/Tut3_Data.csv b/Tutorial03-Curve_fitting/Data/Tut3_Data.csv
new file mode 100644
index 0000000..fdaefcc
--- /dev/null
+++ b/Tutorial03-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/Tutorial03-Curve_fitting/Problems/README.md b/Tutorial03-Curve_fitting/Problems/README.md
new file mode 100644
index 0000000..565101b
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Problems/README.md
@@ -0,0 +1 @@
+# Problems for curve fitting
diff --git a/Tutorial03-Curve_fitting/Problems/Tut3.pdf b/Tutorial03-Curve_fitting/Problems/Tut3.pdf
new file mode 100644
index 0000000..c65c9e2
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Problems/Tut3.pdf
Binary files differ
diff --git a/Tutorial03-Curve_fitting/Problems/Tut3Problem.csv b/Tutorial03-Curve_fitting/Problems/Tut3Problem.csv
new file mode 100644
index 0000000..6840862
--- /dev/null
+++ b/Tutorial03-Curve_fitting/Problems/Tut3Problem.csv
@@ -0,0 +1,91 @@
+1,1.6217170325525478
+1.1000000000000001,1.7361607926542162
+1.2,1.4886611048766012
+1.3,1.6095812042057687
+1.3999999999999999,1.3163168146419344
+1.5,1.330920700128845
+1.6000000000000001,1.110366283597638
+1.7000000000000002,0.81241353160410024
+1.8,0.753186814760053
+1.8999999999999999,0.69330057676696411
+2,0.49673930861054816
+2.1000000000000001,0.31269839670758381
+2.2000000000000002,0.20735326026520753
+2.2999999999999998,0.34251898976490369
+2.4000000000000004,0.017995492701055816
+2.5,0.15030667407027673
+2.6000000000000001,-0.10873060024156005
+2.7000000000000002,0.039912435622286677
+2.7999999999999998,-0.054524639195131827
+2.9000000000000004,-0.033821820189606222
+3,0.10912354497639255
+3.1000000000000001,0.050813981610711309
+3.2000000000000002,0.20889346610039716
+3.3000000000000003,0.35298948844971123
+3.4000000000000004,0.32474940318236023
+3.5,0.38239253826306385
+3.6000000000000001,0.32630838797473993
+3.7000000000000002,0.29718736751740976
+3.8000000000000003,0.19916162996035178
+3.9000000000000004,0.31696369945065445
+4,0.041190365415972992
+4.0999999999999996,0.11391228020475636
+4.2000000000000002,0.019485103395021075
+4.3000000000000007,-0.26342952196101571
+4.4000000000000004,-0.5092611472365397
+4.5,-0.41799215318123728
+4.5999999999999996,-0.73561485139026217
+4.7000000000000002,-0.92329619928696904
+4.8000000000000007,-0.90927651741448279
+4.9000000000000004,-1.1339614346763489
+5,-1.1517504631511968
+5.1000000000000005,-1.1402908029724872
+5.2000000000000002,-1.3521737597704713
+5.2999999999999998,-1.3520561465250629
+5.4000000000000004,-1.2713463645241503
+5.5,-1.1964088310952452
+5.6000000000000005,-1.2452944910422561
+5.7000000000000002,-1.169494079454507
+5.8000000000000007,-1.0070891198113012
+5.9000000000000004,-0.57833731612131689
+6,-0.37159339352530946
+6.1000000000000005,-0.13634550028140968
+6.2000000000000002,-0.18976896716746369
+6.3000000000000007,0.18023780009704649
+6.4000000000000004,0.48543592211567244
+6.5,0.6589373906769419
+6.6000000000000005,0.83333281190824393
+6.7000000000000002,0.96398998261249746
+6.8000000000000007,1.11701757929679
+6.9000000000000004,1.5186297452264101
+7,1.5889705955825626
+7.1000000000000005,1.6524294768055354
+7.2000000000000002,1.6839209146108967
+7.3000000000000007,1.6676039305248551
+7.4000000000000004,1.4677753919938958
+7.5,1.5943284226073355
+7.6000000000000005,1.3487063819931264
+7.7000000000000002,1.4916746989442995
+7.8000000000000007,1.3579050651588507
+7.9000000000000004,1.2201516339395857
+8,1.0354727508078239
+8.1000000000000014,0.87649138728423037
+8.1999999999999993,0.77387261855386325
+8.3000000000000007,0.4536800046194267
+8.4000000000000004,0.23974455070849177
+8.5,0.28174991982090863
+8.6000000000000014,0.17716212958380056
+8.6999999999999993,0.2300092768999859
+8.8000000000000007,-0.04592404352469065
+8.9000000000000004,0.021685712091274192
+9,0.11126106098973793
+9.0999999999999996,0.13994288990456027
+9.2000000000000011,-0.02788752686137759
+9.3000000000000007,0.0024405644345866159
+9.4000000000000004,0.03467349958429617
+9.5,0.062619838733266583
+9.5999999999999996,0.25690494810827541
+9.7000000000000011,0.17227340213228237
+9.8000000000000007,0.1249762313228136
+9.9000000000000004,0.22426593455377142
+10,0.22483299693724429
diff --git a/Tutorial03-Curve_fitting/README.md b/Tutorial03-Curve_fitting/README.md
new file mode 100644
index 0000000..0b8b421
--- /dev/null
+++ b/Tutorial03-Curve_fitting/README.md
@@ -0,0 +1 @@
+# Curve fitting
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