function cost = lqr_cost(QR, A, B)
eigvals = eig(A - B * K);
cost = max(real(eigvals))^2;
lb = [0.1*ones(2,2), 0.1*ones(1,2)];
ub = [10*ones(2,2), 10*ones(1,2)];
particles = repmat(lb, num_particles, 1) + rand(num_particles, 5) .* (ub - lb);
velocities = zeros(num_particles, 5);
pbest_cost = inf(num_particles, 1);
for iter = 1:num_iterations
cost = lqr_cost(reshape(particles(i, :), 2, 3), A, B);
pbest(i, :) = particles(i, :);
r1 = rand(num_particles, 5);
r2 = rand(num_particles, 5);
velocities = w * velocities + c1 * r1 .* (pbest - particles) + c2 * r2 .* (gbest - particles);
particles = particles + velocities;
particles = max(particles, lb);
particles = min(particles, ub);
disp('Optimized Q and R matrices:');
disp(reshape(gbest, 2, 3));