A1 2
A1 2
% Extract variables
x = data.Voltage;
y = data.Current;
% Calculate R-squared
r2 = calculate_r2(y, y_pred);
% Plot results
figure;
scatter(x, y, 'bo', 'DisplayName', 'Data points'); hold on;
xlabel('Voltage');
ylabel('Current');
title('Butler-Volmer Kinetic Equation Fit');
legend;
grid on;
hold off;
% Display results
fprintf("a0 = %.6f\n", a0);
fprintf("a1 = %.6f\n", a1);
fprintf("R² = %.6f\n", r2);
for i = 1:it
% Compute Jacobian matrix Z
Z = zeros(n, 2);
Z(:, 1) = d_func_a0(x, a1);
Z(:, 2) = d_func_a1(x, a0, a1);
% Compute A = Z^T * Z
A = Z' * Z;
% Compute b = Z^T * (y - f)
b = Z' * (y - f);
coeff = coeff_new;
a0 = coeff(1);
a1 = coeff(2);
end
end
% Function to calculate R²
function r2 = calculate_r2(y_true, y_pred)
ss_res = sum((y_true - y_pred).^2);
ss_tot = sum((y_true - mean(y_true)).^2);
r2 = 1 - (ss_res / ss_tot);
end
a0 = -0.000289
a1 = -10.884055
R² = 0.999463