function estimate_parameters
initial_guess = [1000, 0.1, 0.1];
initial_conditions = [T0_initial, T1_initial];
objective = @(params) model_error(params, tspan, initial_conditions, T0_ss, T1_ss);
options = optimoptions('lsqnonlin', 'Display', 'iter', 'TolFun', 1e-6, 'TolX', 1e-6);
[estimated_params, resnorm] = lsqnonlin(objective, initial_guess, [], [], options);
fprintf('Estimated Parameters:\n');
fprintf('s = %.4f\n', estimated_params(1));
fprintf('d = %.4f\n', estimated_params(2));
fprintf('gamma = %.4f\n', estimated_params(3));
function error = model_error(params, tspan, initial_conditions, T0_ss, T1_ss)
[~, T] = ode45(@(t, y) odesystem(t, y, s, d, gamma), tspan, initial_conditions);
T0_error = T(end, 1) - T0_ss;
T1_error = T(end, 2) - T1_ss;
error = [T0_error; T1_error];
function dydt = odesystem(t, y, s, d, gamma)
dT0dt = s - d * T0 - gamma * T0;
dT1dt = 2 * d * T0 + d * T1 - gamma * T1;