Ajuste de curva
função de ajuste de curva
Informações iniciais:
Copie e cole o código abaixo em um m.file do MATLAB;
Dúvida sobre o uso da função: digite >> " help ajusteSolucao " irá aparecer informações sobre a função bem como entrada e saída;
preste atenção na importância do formado de dados: matriz de m linhas e n colunas em que as colunas estão associados aos parâmetros de interesse, sendo necessariamente a primeira coluna uma base de tempo;
Em função do modo que esteja ajustando é interesante que o chute inicial (linha 24 do código abaixo) seja ajustada para um valor mais próximo do resultado.
código operacional em MATLAB 2014a
function ajusteSolucao(DADOS, coluna)
%% função que apresenta um ajute de curva ao modelo de solução de segunda
% ordem do tipo:
% "180/pi*A*exp(-xsi*omega.*tempo).*cos(omega*sqrt(1-xsi.^2).*tempo+B)+C"
% o ajuste é feito com dados de ensaio
%%INPUT:
% DADOS: matriz de m linhas e n colunas em que as colunas estão associados
% aos parâmetros de interesse, sendo necessariamente a primeira coluna uma
% base de tempo.
% coluna: número inteiro que representa a coluna da matriz DADOS que possui
% o parâmetro cujo ajuste deve ser feito.
%%OUTPUT:
% PARAM: parâmetros A, xsi, omega, B e C do modelo ajustado.
% REDISUO: residuo advindo do ajuste de curvas
% plot dos gráficos do ensaio e do ajuste com legenda para pré julgamento
% da informação recebida
%% AUTOR
%Guilherme Soares e Silva
%primeira versão: 10/2017
%última versão : 09/2018
%%
parametro = DADOS(:,coluna);
tempo = DADOS(:,1)-DADOS(1,1);
X0 = [6 .01 2.603 0.0708 4.214];
% Y = @(vetor)solucaoSegOrdem(vetor, tempo);
[PARAM,RESIDUO] = lsqcurvefit(@solucaoSegOrdem,X0,tempo, parametro)
Y = solucaoSegOrdem(PARAM, tempo);
figure;
plot(tempo,Y,'k','linewidth',2); hold on;
plot(tempo,parametro,'k-o');
legend('ajuste de curva','dado de ensaio')
ylabel('parâmetro de interesse')
xlabel('[s]')
grid minor;
end
function Y = solucaoSegOrdem(vetor, tempo)
A = vetor(1);
xsi = vetor(2);
omega = vetor(3);
B = vetor(4);
C = vetor(5);
Y = 180/pi*A*exp(-xsi*omega.*tempo).*cos(omega*sqrt(1-xsi.^2).*tempo+B)+C;
end