data = readtable('Parameter_estimation.xlsx');
model_function = @(params, x) (1 - (1 - params(1)) * x * params(2)) .^ (1 / (1 - params(1)));
objective_function = @(params, x, P) sum((model_function(params, x) - P).^2);
initial_guess = [1.5, 100];
options = optimoptions('fmincon', 'Display', 'off', 'MaxFunctionEvaluations', 10000);
for start = 1:500:(length(x_data) - group_size + 1)
x_group = x_data(start:start + group_size - 1);
P_group = P_data(start:start + group_size - 1);
local_objective = @(params) objective_function(params, x_group, P_group);
[params, fval, exitflag] = fmincon(local_objective, initial_guess, [], [], [], [], lb, ub, [], options);
results = [results; start, params];
fprintf('Group starting at %d: q = %.4f, m = %.4f, Error = %.4f\n', start, params(1), params(2), fval);
fprintf('Fit did not converge for group starting at %d\n', start);
fprintf('\nSummary of results:\n');
for i = 1:size(results, 1)
fprintf('Group starting at %d: q = %.4f, m = %.4f\n', results(i, 1), results(i, 2), results(i, 3));