81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
| % === Problem 3b: Effect of Sampling Period Ts on Estimation Accuracy ===
 | |
| 
 | |
| clear; close all;
 | |
| 
 | |
| % True parameters
 | |
| m = 0.75;
 | |
| L = 1.25;
 | |
| c = 0.15;
 | |
| g = 9.81;
 | |
| 
 | |
| mL2_true = m * L^2;
 | |
| mgL_true = m * g * L;
 | |
| theta_true = [mL2_true; c; mgL_true];
 | |
| 
 | |
| % Parameters of input
 | |
| A0 = 4;
 | |
| omega = 2;
 | |
| 
 | |
| % Time settings
 | |
| T_final = 20;
 | |
| dt = 1e-4;
 | |
| t_full = 0:dt:T_final;
 | |
| 
 | |
| % Simulate system with very fine resolution
 | |
| odefun = @(t, x) [
 | |
|     x(2);
 | |
|     (1/(m*L^2)) * (A0*sin(omega*t) - c*x(2) - m*g*L*x(1))
 | |
| ];
 | |
| x0 = [0; 0];
 | |
| [t_sim, x_sim] = ode45(odefun, t_full, x0);
 | |
| 
 | |
| % Sampling periods to test
 | |
| Ts_list = [0.01, 0.05, 0.1, 0.2, 0.5];
 | |
| n_cases = length(Ts_list);
 | |
| rel_errors_all = zeros(3, n_cases);
 | |
| 
 | |
| for i = 1:n_cases
 | |
|     Ts = Ts_list(i);
 | |
| 
 | |
|     % Resample at this Ts
 | |
|     t_sampled = t_sim(1):Ts:t_sim(end);
 | |
|     q = interp1(t_sim, x_sim(:,1), t_sampled);
 | |
|     u = A0 * sin(omega * t_sampled);
 | |
| 
 | |
|     N = length(t_sampled);
 | |
| 
 | |
|     % Compute dq and ddq with central differences
 | |
|     dq = zeros(N,1);
 | |
|     ddq = zeros(N,1);
 | |
|     for k = 2:N-1
 | |
|         dq(k) = (q(k+1) - q(k-1)) / (2*Ts);
 | |
|         ddq(k) = (q(k+1) - 2*q(k) + q(k-1)) / Ts^2;
 | |
|     end
 | |
| 
 | |
|     % LS Estimation
 | |
|     idx = 2:N-1;        % Truncate to valid range (2:N-1)
 | |
|     X = [ddq(idx), dq(idx), q(idx)'];
 | |
|     y = u(idx).';
 | |
|     theta_hat = (X' * X) \ (X' * y);
 | |
| 
 | |
|     rel_error = abs((theta_hat - theta_true) ./ theta_true) * 100;
 | |
|     rel_errors_all(:, i) = rel_error;
 | |
| 
 | |
|     % Print
 | |
|     fprintf('Ts = %.3f s → mL^2=%.4f (%.2f%%), c=%.4f (%.2f%%), mgL=%.4f (%.2f%%)\n', ...
 | |
|         Ts, theta_hat(1), rel_error(1), ...
 | |
|         theta_hat(2), rel_error(2), ...
 | |
|         theta_hat(3), rel_error(3));
 | |
| end
 | |
| 
 | |
| % === Plot ===
 | |
| figure('Name', 'Problem 3b - Effect of Sampling Period', 'Position', [100, 100, 1000, 600]);
 | |
| plot(Ts_list, rel_errors_all', '-o', 'LineWidth', 2, 'MarkerSize', 4);
 | |
| legend({'mL^2', 'c', 'mgL'}, 'Location', 'northwest');
 | |
| xlabel('Sampling Period Ts [sec]');
 | |
| ylabel('Relative Error [%]');
 | |
| title('Effect of Ts on Parameter Estimation');
 | |
| grid on;
 | |
| 
 | |
| saveas(gcf, 'output/Prob3b_SamplingPeriodEffect.png');
 |