load('Workspace_dihedral_vs_energy_fitting.mat');
[y_fit,sol] = myfit(x,y,f_est);
Rsquared = my_Rsquared_coeff(y,y_fit);
plot(x,y, 'b .-',x, y_fit, 'r-', 'MarkerSize', 15)
title(['Model Fit : R² = ' num2str(Rsquared)], 'FontSize', 15)
xlabel('dihedral', 'FontSize', 14)
ylabel('energy²', 'FontSize', 14)
function [y_fit,sol] = myfit(x,y,f_est)
func = @(ks1,ks2,ks3,ks4,ks5,f,x) ks1 + (1/2)*(ks2*(1+cos(2*pi*f*x)) + (1/2)*ks3*(1-cos(2*pi*f*2*x)) + (1/2)*ks4*(1+cos(2*pi*f*3*x)) + (1/2)*ks5*(1-cos(2*pi*f*4*x)));
obj_fun = @(params) norm(func(params(1), params(2), params(3), params(4), params(5), params(6),x)-y);
sol = fminsearch(obj_fun, [mean(y),0,0,0,0,f_est]);
y_fit = func(a_sol, b_sol, c_sol, d_sol, e_sol, f_sol,x);
function Rsquared = my_Rsquared_coeff(data,data_fit)
sum_of_squares = sum((data-mean(data)).^2);
sum_of_squares_of_residuals = sum((data-data_fit).^2);
Rsquared = 1 - sum_of_squares_of_residuals/sum_of_squares;