Contents
- Ajuste RLC subamortiguado (Archivo: Ajuste_RLC_subam.m)
- Borro todas variables y graficos previos. Tambien habilito la funcion "pause"
- Genero 400 datos de prueba y los grafico
- Reescalo el problema: redefino (normalizo) la escala de tiempos, la func de ajuste ( I(t) ) y sus parametros (A, B y T)
- Continuo
- Ajuste No Lineal por Cuadrados Minimos donde: "y = f(x)"
- Grafico el intervalo de confianza
- Obtengo los parametros de ajuste y sus intervalos de confianza (Continuan rescalados!)
- Obtengo los valores ajustados de R, L, y C (ahora hay que des-reescalar!!!)
- Ahora incluyo los Intervalos de Confianza de L, R y C
- Resultado completo del ajuste (L_Min L_ajustado L_Max. Y lo mismo para R y C)
- Salida mas avanzada
Ajuste RLC subamortiguado (Archivo: Ajuste_RLC_subam.m)
% Se requiere tener ademas el archivo RLCsub.m en el directorio de trabajo. % Se reescalan las variables originales para mejorar la calidad del ajuste. % Se reescalan nuevamente la variables ajustadas para volver las variables % originales, y luego se obtienen los valores de R, L y C % Para mas informacion consultar: % a) La pagina web de la documentacion de Matlab: https://www.mathworks.com/help/matlab/ % b) El archivo Ajuste_RLC_subam.pdf adjunto (contiene las ecuaciones vistas en clase) % c) La carpeta Ajuste_RLC_subam-html adjunta % Cesar Moreno, % Curso de verano de Laboratorio 3, 2020, DF-FCEN-UBA y CONICET
Borro todas variables y graficos previos. Tambien habilito la funcion "pause"
clear all % Borro todas las variables peexistentes close all hidden % Hago lo mismo con los graficos previos, incluso con los ocultos pause on % Habilito la funcion "pause", por si la necesito durante la demostracion
Genero 400 datos de prueba y los grafico
global to Io t I % Quiero poder usar estas variables en todo el programa, % incluyendo subrutinas/funciones/modulos etc. to = linspace(0 , 7e-3 , 400)'; % [s] Vo = 10; % [V] Lo = 1; % [H] Co = 0.1e-6; % [F] Ro = 1000; % [Ohm] % Defino 3 variables auxiliares, y el periodo To porque es mas comodo que w % (o Do), pues a To puedo verlo facilmente del grafico de I(t). Bo = Ro/2/Lo ; Do = sqrt(1/(Lo*Co) - Bo^2) ; Ao = Vo/Do/Lo ; To = 2*pi/Do;
Reescalo el problema: redefino (normalizo) la escala de tiempos, la func de ajuste ( I(t) ) y sus parametros (A, B y T)
to = 1000 * to; Ao = 1000 * Ao; Bo = Bo / 1000; To = To * 1000;
Continuo
% Defino la corriente Io (ideal -- sin incerteza) Io = Ao * exp(-Bo * to) .* sin( (2*pi/To) .* to) ; % Ahora defino la corriente I (real -- con incertezas agregadas) In = awgn(Io,10,'measured'); % awgn => Add White Gaussian Noise I = In .* (1 + 0.03 .* random('unif',-1,1,size(Io)) ); % del Manual del Osc % Le agrego incertezas tambien a la lista de tiempos t = to .* (1 + 50e-6 .* random('norm',0,1,size(to)) ); % del Manual del Osc % Defino la envolvente ideal Eo = Ao * exp(-Bo * to); % Grafico los "datos" ideales, los que tienen ruido y la envolvente ideal figure(1) plot(to,Io,'g:',t,I,'+b--',to,[Eo -Eo],'g-','LineWidth',1.75) grid on xlabel('{\it{t}} (ms)') ylabel('{\it{I}} (mA)') title('Datos RLC subamortiguado') legend('Curva teorica','Datos experimentales', ... 'Envolvente teorica','Location','northeast') % disp('Colocar el cursor en la ventana de comandos y apretar cuaquier tecla') % pause

Ajuste No Lineal por Cuadrados Minimos donde: "y = f(x)"
y = I; x = t; fit_Type = fittype( 'RLCsub( x, A, B, T )' ); fit_Object_1 = fit( x, y, fit_Type, ... 'StartPoint', [2*Ao, 2*Bo, 0.75*To], ... 'MaxFunEvals',3000, 'MaxIter',2500, 'TolFun',1e-16, 'TolX',1e-16) % disp('Colocar el cursor en la ventana de comandos y apretar cuaquier tecla') % pause
fit_Object_1 = General model: fit_Object_1(x) = RLCsub( x, A, B, T ) Coefficients (with 95% confidence bounds): A = 3.206 (3.05, 3.362) B = 0.5185 (0.4829, 0.5542) T = 2.021 (2.005, 2.036)

Grafico el intervalo de confianza
Nivel_de_Confianza = 0.99; Interv_Conf = predint(fit_Object_1,x,Nivel_de_Confianza,'observation','on'); interv_conf = confint(fit_Object_1,Nivel_de_Confianza) figure(3) plot(to,Io,'.g-',x,y,'b+--','LineWidth',1.75) hold on plot(fit_Object_1,'k-') hold on plot(x,Interv_Conf,'m--','LineWidth',1.5), xlim([0 7]) xlabel('{\it{t}} (ms)') ylabel('{\it{I}} (mA)') title(['Ajuste RLC Subamortiguado con Intervalo de Conf. del ' ... num2str(Nivel_de_Confianza*100) '%']) legend('Curva teorica','Datos Exp.', 'Ajuste', 'Int. de Conf.') % text('hola','Location','southwest') grid on hold off % disp('Colocar el cursor en la ventana de comandos y apretar cuaquier tecla') % pause
interv_conf = 3.0002 0.4717 2.0001 3.4117 0.5654 2.0413


Obtengo los parametros de ajuste y sus intervalos de confianza (Continuan rescalados!)
% Resultado general Resultado_general = fit_Object_1 % Extraigo los 3 parametros de ajuste juntos, en forma de lista Parametros = coeffvalues(fit_Object_1); % Lista de valores de A, B y T % Extraigo cada parametro por separado A = fit_Object_1.A; % Valor ajustado de A (el re-escalado previamente) B = fit_Object_1.B; % Valor ajustado de B (el re-escalado previamente) T = fit_Object_1.T; % Valor ajustado de T (el re-escalado previamente) % Tambien puedo preguntar por la funcion de ajuste Funcion_de_Ajuste = formula(fit_Object_1) % Extraigo los intervalos de confianza de A, B y T, en forma de tabla Int_Conf_Param = confint(fit_Object_1) % Int. de Conf. de A, B y T % Extraigo los valores Min y Max de A, B y T por separado A_Min = Int_Conf_Param(1,1); A_Max = Int_Conf_Param(2,1); B_Min = Int_Conf_Param(1,2); B_Max = Int_Conf_Param(2,2); T_Min = Int_Conf_Param(1,3); T_Max = Int_Conf_Param(2,3);
Resultado_general = General model: Resultado_general(x) = RLCsub( x, A, B, T ) Coefficients (with 95% confidence bounds): A = 3.206 (3.05, 3.362) B = 0.5185 (0.4829, 0.5542) T = 2.021 (2.005, 2.036) Funcion_de_Ajuste = RLCsub( x, A, B, T ) Int_Conf_Param = 3.0497 0.4829 2.0051 3.3623 0.5542 2.0363
Obtengo los valores ajustados de R, L, y C (ahora hay que des-reescalar!!!)
% Des-reecalo A_orig = A / 1000; T_orig = T / 1000; B_orig = B * 1000; w_orig = 2*pi/T_orig; L_ajustado = Vo/A_orig/w_orig; R_ajustado = 2 * L_ajustado * B_orig; C_ajustado = 1/(L_ajustado * ( (w_orig)^2 + (B_orig)^2) ); % Ajuste_LRC = [num2str(L_ajustado), ' ', num2str(R_ajustado) ' ', ... % num2str(C_ajustado)]
Ahora incluyo los Intervalos de Confianza de L, R y C
Primero des-reescalo los valores A_Min, A_Max, y los de B, T y w Min y Max
A_Min_orig = Int_Conf_Param(1,1) / 1000;
A_Max_orig = Int_Conf_Param(2,1) / 1000;
B_Min_orig = Int_Conf_Param(1,2) * 1000;
B_Max_orig = Int_Conf_Param(2,2) * 1000;
T_Min_orig = Int_Conf_Param(1,3) / 1000;
T_Max_orig = Int_Conf_Param(2,3) / 1000;
w_Min_orig = 2*pi/T_Max_orig;
w_Max_orig = 2*pi/T_Min_orig;
% Ahora calculo los valores de L_Min, L_Max y lo analogo para R y C
L_Min = Vo/A_Max_orig/w_Max_orig;
L_Max = Vo/A_Min_orig/w_Min_orig;
R_Min = 2 * L_Min * B_Min_orig;
R_Max = 2 * L_Max * B_Max_orig;
C_Min = 1/(L_Max * ( (w_Max_orig)^2 + (B_Max_orig)^2) );
C_Max = 1/(L_Min * ( (w_Min_orig)^2 + (B_Min_orig)^2) );
Resultado completo del ajuste (L_Min L_ajustado L_Max. Y lo mismo para R y C)
Son 3 listas que contienen L_Min L L_Max R_Min R R_Max C_Min C C_Max
L_ajus_completo = [L_Min L_ajustado L_Max] R_ajus_completo = [R_Min R_ajustado R_Max] C_ajus_completo = [C_Min C_ajustado C_Max] pause off return
L_ajus_completo = 0.9491 1.0031 1.0627 R_ajus_completo = 1.0e+03 * 0.9167 1.0403 1.1778 C_ajus_completo = 1.0e-06 * 0.0929 0.1003 0.1080
Salida mas avanzada
% Contiene detalles del proceso del ajuste [fit_Object_2,gof,output] = fit( x, y, fit_Type, ... 'StartPoint', [2*Ao, 5*Bo, 0.75*1.5], ... 'MaxFunEvals',3000, 'MaxIter',2500, 'TolFun',1e-14, 'TolX',1e-14)