diff options
author | Chayan Bhawal | 2018-10-01 03:21:11 +0530 |
---|---|---|
committer | Chayan Bhawal | 2018-10-01 03:21:11 +0530 |
commit | d70da5e732149071f715e080407aa5c74e3da44a (patch) | |
tree | ab5273a19f600fde8406eb7ad8431196dd8b39ff /Tutorial3_Curve_fitting/Scilab_code | |
parent | 20c792454b7757064cb5ced103357bfed42d9b1a (diff) | |
download | scilab-tutorials-d70da5e732149071f715e080407aa5c74e3da44a.tar.gz scilab-tutorials-d70da5e732149071f715e080407aa5c74e3da44a.tar.bz2 scilab-tutorials-d70da5e732149071f715e080407aa5c74e3da44a.zip |
Problems_updated
Diffstat (limited to 'Tutorial3_Curve_fitting/Scilab_code')
4 files changed, 49 insertions, 13 deletions
diff --git a/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce b/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce index 57ba922..43e34db 100644 --- a/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce +++ b/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting.sce @@ -15,24 +15,19 @@ 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) +//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(x_optimal,time,measured_data,weight_matrix) +error = errorfun(coeff_optimal,time,measured_data) disp(error,'The error after least square approximation') -// a small graphic -fitted_data = fit_function(time, x_optimal); +// 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/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce b/Tutorial3_Curve_fitting/Scilab_code/Tutorial3_curve_fitting_weighted.sce new file mode 100644 index 0000000..866a070 --- /dev/null +++ b/Tutorial3_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/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci b/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci index 0b93304..741ad63 100644 --- a/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci +++ b/Tutorial3_Curve_fitting/Scilab_code/errorfun.sci @@ -1,4 +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 ) +function err = errorfun(x, time, measured_data) + err = (fit_function(time, x) - measured_data ) endfunction diff --git a/Tutorial3_Curve_fitting/Scilab_code/errorfunweight.sci b/Tutorial3_Curve_fitting/Scilab_code/errorfunweight.sci new file mode 100644 index 0000000..9326d91 --- /dev/null +++ b/Tutorial3_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 |