Baixe o app para aproveitar ainda mais
Prévia do material em texto
1TP5 Aplicacionais para Ciências e Engenharia Aplicacionais para Ciências e Engenharia Aula 5 2TP5 Aplicacionais para Ciências e Engenharia Sumário • Polinómios – Operações com polinómios – Aproximação polinomial – Interpolação polinomial 3TP5 Aplicacionais para Ciências e Engenharia Operações 4TP5 Aplicacionais para Ciências e Engenharia – Um polinómio (ou expressão polinomial) é uma soma algébrica de potências de uma dada variável, com o seguinte formato: onde são os coeficientes do polinómio e são as potências da variável ‒ O grau do polinómio corresponde ao valor do expoente ( ), com Nota: Este assunto não é novo para os alunos. Vamos mostrar algumas operações e outras facilidades utilizando o Matlab Definição 5TP5 Aplicacionais para Ciências e Engenharia – A representação de polinómios no Matlab é feita através de um vetor linha com os coeficientes do polinómio, ordenados de a – Caso não exista o monómio de uma dada potência deve ser colocado um 0 (zero) na correspondente posição no vetor – O número de elementos do vetor é igual a Exemplo: Representação de um polinómio >> px=[4 0 0 -3 2 33] px = 4 0 0 -3 2 33 6TP5 Aplicacionais para Ciências e Engenharia Adição/Subtração de polinómios – A adição e subtração de polinómios representados por vetores só é possível se esses vetores tiverem o mesmo número de coeficientes Exemplo: p1=[4 0 0 -3 2 33]; p2=[0 1 0 2 0 -13]; p1+p2 p1-p2 ans = 4 1 0 -1 2 20 ans = 4 -1 0 -5 2 46 7TP5 Aplicacionais para Ciências e Engenharia Multiplicação de polinómios – A multiplicação de polinómios é feita usando a função conv() Exemplo: p1=[1 1]; p2=[1 -1]; pmul=conv(p1,p2) pmul = 1 0 -1 8TP5 Aplicacionais para Ciências e Engenharia Divisão de polinómios – A divisão de polinómios pode ser feita usando a divisão Euclidiana, o método de Descartes e outros – No Matlab usamos a função deconv() Exemplo 1: (polinómio obtido no exemplo anterior) p=[1 0 -1]; p2=[1 -1]; p1=deconv(p,p2) p1 = 1 1 >> p1=[1 0 -1]; p2=[1 -1]; [p1 r]=deconv(p,p2) p1 = 1 1 r = 0 0 0 % resto da div. igual a 0 9TP5 Aplicacionais para Ciências e Engenharia Divisão de polinómios Exemplo 2: p=[2 7 4 9]; p1=[1 0 1]; [p2,r]=deconv(p,p1) p2 = 2 7 r = 0 0 2 2 % verificação >> p=conv(p1,p2)+r p = 2 7 4 9 10TP5 Aplicacionais para Ciências e Engenharia Outras operações Cálculo das raízes de um polinómio – função roots() – Um polinómio de grau tem raízes (valores de x para os quais o polinómio é igual a zero) – As raízes podem ser reais e/ou complexas p=[3 -2 -4]; r=roots(p) r = 1.5352 -0.8685 p=[1 0 0 0 -1]; r=roots(p) r = -1.0000 + 0.0000i 0.0000 + 1.0000i 0.0000 - 1.0000i 1.0000 + 0.0000i 11TP5 Aplicacionais para Ciências e Engenharia Outras operações Cálculo de um polinómio a partir das raízes – função poly() – É possível determinar um polinómio a partir das suas raízes p=poly([-1 2 1+i 1-i]) p = 1 -3 2 2 -4 % verificação r=roots(p) r = -1.0000 + 0.0000i 2.0000 + 0.0000i 1.0000 + 1.0000i 1.0000 - 1.0000i 12TP5 Aplicacionais para Ciências e Engenharia Outras operações Avaliação do valor de um polinómio num ponto ou conjunto de pontos – função polyval() x=linspace(-2,3); r=[-1 2]; % Raízes p=poly(r); % Polinómio fx=polyval(p,x) plot(r,0,'*r',x,fx,'k') grid on xlabel('x'),ylabel('f(x)') 13TP5 Aplicacionais para Ciências e Engenharia Outras operações Derivação de um polinómio – função polyder() px=[1 0 -2 5]; qx=polyder(px) qx = 3 0 -2 14TP5 Aplicacionais para Ciências e Engenharia Outras operações Integração de um polinómio – função polyint() O integral de um polinómio é um outro polinómio que derivado resulta no polinómio inicial px=[4 -3 0 1]; qx=polyint(px) % o polyint não apresenta a constante de integração qx = 1 -1 0 1 0 15TP5 Aplicacionais para Ciências e Engenharia Outras operações Uma das aplicações dos integrais é o cálculo de áreas debaixo de uma curva entre dois pontos e . Neste caso o integral diz-se definido, ao contrário do exemplo anterior em que o integral era indefinido. Considere o polinómio px=[-1 0 4]; x=linspace(-2,2); y=polyval(px,x); plot(x,y),grid xlabel('x') ylabel('-x^2+4') -2 -1 0 1 2 x 0 1 2 3 4 16TP5 Aplicacionais para Ciências e Engenharia Outras operações A área debaixo da curva da página anterior é calculada por: qx=polyint(px,4) % qx é o integral indefinido de px % 4 é a constante de integração (valor de px para x=0) Valores=polyval(qx,[-2 2]) % são os valores de q(x) calculados para x=-2 e x=2 Area=diff(polyval(qx,[-2 2])) % Area corresponde ao valor do integral % É igual à diferença –diff()- de qx para x=2 e x=-2 Valores = -1.3333 9.3333 Area = 10.6667 17TP5 Aplicacionais para Ciências e Engenharia Aproximação polinomial 18TP5 Aplicacionais para Ciências e Engenharia Aproximação polinomial – Os valores experimentais podem ser aproximados por uma expressão matemática de forma a melhor descrever o comportamento experimental – A aproximação através de um polinómio é muito frequente, sendo o ajuste dos coeficientes desse polinómio feito através do método dos mínimos quadrados – O método dos mínimos quadrados minimiza a soma dos quadrados dos erros, para uma aproximação polinomial de qualquer grau – A exemplificação deste método pode ser facilmente percebido através de uma aproximação linear (polinómio de grau 1) 19TP5 Aplicacionais para Ciências e Engenharia Aproximação linear – Da figura é fácil perceber que a soma dos quadrados dos erros depende da ordenada na origem e do declive da reta – Os valores de a e b são obtidos através de um sistema de equações em que a curva do erro apresenta um valor mínimo (valores para as quais a derivada é nula) x y e1 e2 e3 e4 – No gráfico são apresentados 4 pontos obtidos através de medições experimentais de uma dada grandeza que queremos aproximar por uma reta 20TP5 Aplicacionais para Ciências e Engenharia Aproximação linear A aproximação polinomial de curvas é uma matéria complexa que está fora do âmbito desta unidade curricular. Fica, no entanto, o exemplo de uma aproximação de 1º grau (reta) feita com cálculo matricial − Cada um dos pontos pode ser descrito, de uma forma geral, por: – e na forma matricial por: = ou 21TP5 Aplicacionais para Ciências e Engenharia Aproximação linear – Para encontrar os valores de e que minimizam o erro quadrático dado por: ou na forma matricial: calcula-se o valor mínimo do erro quando a sua derivada é nula, obtendo-se o seguinte sistema de equações: 22TP5 Aplicacionais para Ciências e Engenharia Aproximação linear Exemplo 1: Considerando que os valores medidos numa dada experiência foram: calcule os valores de e da reta que melhor aproxima os dados. Equação da reta: x =[ 1 2 3 4 5 6 7 8 9 10] y= [ 0.8 3.6 2.9 4.2 5.6 5.1 6.8 8.8 9.1 9.9] x=[1 2 3 4 5 6 7 8 9 10]; y=[0.8,3.6,2.9,4.2,5.6,5.1,6.8,8.8,9.1,9.9]; X=[x' ones(1,10)']; u=inv(X'*X)*X'*y' u = 0.9527 % a=0.9527 0.4400 % b=0.4400 23TP5 Aplicacionais para Ciências e Engenharia Aproximação polinomial no Matlab – A função polyfit() do Matlab permite fazer uma aproximação polinomial de qualquer grau Exemplo2: (mesmo do slide anterior) xdata=[1 2 3 4 5 6 7 8 9 10]; ydata=[0.8,3.6,2.9,4.2,5.6,5.1,6.8,8.8,9.1,9.9]; plot(xdata,ydata,'ob'),xlabel('x'),hold on x=0:10; y=x; plot(x,x,'--b'),xlim([0 10]) xlabel('xdata'),ylabel('ydata') legend('Dados','y=x',... 'Location','NW') A aproximação pela reta y=x será a melhor? Não! 0 2 4 6 8 10 xdata 0 2 4 6 8 10 Dados y=x 24TP5 Aplicacionais para Ciências e Engenharia Aproximação polinomial no Matlab Erro grande para x=2 → grande contribuição no erro quadrático médio (eqm) → erro não está minimizado (eqm=0.452) xdata=[1 2 3 4 5 6 7 8 9 10]; ydata=[0.8,3.6,2.9,4.2,5.6,5.1,6.8,8.8,9.1,9.9]; subplot(2,1,1) plot(xdata,ydata,'ob')xlabel('xdata'),hold on y=xdata; plot(xdata,y,'--b') legend('Dados','y=x',... 'Location','NW') erro=(ydata-y); subplot(2,1,2) bar(xdata,erro,0.5) xlim([0.5 10.5]) ylim([-2 2]) xlabel('xdata') legend('erro=ydata-y') 25TP5 Aplicacionais para Ciências e Engenharia Aproximação polinomial no Matlab xdata=[1 2 3 4 5 6 7 8 9 10]; ydata=[0.8,3.6,2.9,4.2,5.6,5.1,6.8,8.8,9.1,9.9]; subplot(2,1,1) plot(xdata,ydata,'ob') xlabel('xdata'),hold on % Aproximação linear p=polyfit(xdata,ydata,1) y=polyval(p,xdata); plot(xdata,y,'-r') legend('Dados’,’y=0.9527*x+0.4400','Location','NW') erro=(ydata-y); subplot(2,1,2) bar(xdata,erro,0.5) xlim([0.5 10.5]) ylim([-2 2]) xlabel('xdata') legend('erro=ydata-y') eq=sum((ydata-y).^2) eqm=eq/length(ydata) eqm=0.4012 26TP5 Aplicacionais para Ciências e Engenharia Basic fitting • O basic fitting é uma ferramenta (integrada na figura) que permite realizar o ajuste polinomial de curvas de maneira mais intuitiva • Para utilizar o basic fitting, primeiro faça o gráfico dos pontos • Na janela do gráfico selecione: Tools > Basic Fitting • Para ver as equações polinomiais de ajuste, faça: Show equations 27TP5 Aplicacionais para Ciências e Engenharia Basic fitting 28TP5 Aplicacionais para Ciências e Engenharia Basic fitting • O Matlab tem uma ferramenta dedicada a fitting de dados com várias funções pré-definidas ou definidas pelo utilizador – Extensas funcionalidades de condicionamento dos dados e análise dos resultados – Obriga à instalação da Curve Fitting Toolbox 29TP5 Aplicacionais para Ciências e Engenharia Interpolação 30TP5 Aplicacionais para Ciências e Engenharia Definição • Considerando que temos um conjunto de pontos definidos pelos valores de x e os correspondentes valores de y • Interpolação é um algoritmo que permite encontrar os valores estimados de yi para um dado conjunto de valores xi , localizados entre posições conhecidas dos pontos ao longo do eixo x 31TP5 Aplicacionais para Ciências e Engenharia Interpolação com polinómios • Na interpolação em que temos N pontos é possível criar um polinómio de grau N-1, que passa por todos os pontos, usando a função polyfit() e calcular valores noutros pontos com a função polyval(). -5 -4 -3 -2 -1 0 1 2 3 x -4 -3 -2 -1 0 1 2 3 4 5 Dados Interp. polinomial 32TP5 Aplicacionais para Ciências e Engenharia Interpolação com polinómios %Interpolação com polinómios xdata=[-4.6,-4,-3,-1.6,-1,-0.4,0.8,1.6,2.2,2.6]; ydata=[-3.2,-1,2.5,1.3,0,-1.3,-2.6,-1.1,1.5,4.3]; plot(xdata,ydata,'ob','MarkerSize',8) hold on p=polyfit(xdata,ydata,(length(xdata))-1); % Calcula os coeficientes do polinómio xdatanew=min(xdata):0.2:max(xdata); ydatanew=polyval(p,xdatanew); plot(xdatanew,ydatanew,'.-r','MarkerSize',10) grid on; legend('Dados','Interp. com polinómios',... 'Location','NW') xlabel('x');ylabel('y'); 33TP5 Aplicacionais para Ciências e Engenharia Interpolação com polinómios • O grande problema da interpolação com polinómios é ser altamente sensível à adição de novos dados Exemplo: – Adição de um ponto a azul (-2,2.3) na figura, muito próximo da curva a vermelho – A linha interpolada muda completamente – Esta situação é indesejável – Problema: Aproximação por polinómios de grau elevado – Não tem interesse prático -5 -4 -3 -2 -1 0 1 2 3 x -4 -3 -2 -1 0 1 2 3 4 5 Polinómio de grau 9 Polinómio de grau 10 34TP5 Aplicacionais para Ciências e Engenharia Interpolação polinomial %Interpolação com polinómios com mais um ponto xdata1=[-4.6,-4,-3,-1.6,-1,-0.4,0.8,1.6,2.2,2.6]; ydata1=[-3.2,-1,2.5,1.3,0,-1.3,-2.6,-1.1,1.5,4.3]; p1=polyfit(xdata1,ydata1,(length(xdata1))-1); % Cálcula os coeficientes do polinómio p1 xdata1new=min(xdata1):0.2:max(xdata1); ydata1new=polyval(p1,xdata1new); xdata2=[-4.6,-4,-3,-2,-1.6,-1,-0.4,0.8,1.6,2.2,2.6]; ydata2=[-3.2,-1,2.5,2.3,1.3,0,-1.3,-2.6,-1.1,1.5,4.3]; p2=polyfit(xdata2,ydata2,(length(xdata2))-1); % Cálcula os coeficientes do polinómio p2 xdata2new=min(xdata2):0.2:max(xdata2); ydata2new=polyval(p2,xdata2new);hold on plot(xdata1new,ydata1new,'.-r','MarkerSize',10) plot(xdata2new,ydata2new,'.-b','MarkerSize',10) plot(xdata1,ydata1,'ob','MarkerSize',8) plot(-2,2.3,'.b','MarkerSize',30);grid on legend('Polinómio de grau 9','Polinómio de grau 10',... 'Location','NW') xlabel('x'),ylabel('y'); 35TP5 Aplicacionais para Ciências e Engenharia Interpolação • Critérios para uma boa interpolação – Deve ser robusta à adição de novos pontos – Novos pontos devem modificar a curva de interpolação em intervalos adjacentes o mínimo possível (idealmente, não deve haver nenhuma mudança) 36TP5 Aplicacionais para Ciências e Engenharia Métodos de interpolação no MATLAB 37TP5 Aplicacionais para Ciências e Engenharia Interpolação no Matlab • O Matlab possui as seguintes funções de interpolação: interp1: Interpolação de dados numa dimensão ‒ interp2: Interpolação de dados em duas dimensões – interp3: Interpolação de dados em três dimensões – interpn: Interpolação de dados em 1-D, 2-D, 3-D e N-D Nota: Estas funções têm vários tipos de interpolação. Para a sua utilização deve ser consultado o help do Matlab 38TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação pelo método da vizinhança usando a função interp1() -5 -4 -3 -2 -1 0 1 2 3 x -4 -3 -2 -1 0 1 2 3 4 5 Dados Interpolação nearest com pontos adicionais • Neste método a interpolação toma um valor constante em torno de um dado ponto, num intervalo de metade da distância que separa esse ponto dos seus vizinhos – Apresenta descontinuidades – Método visualmente pouco apelativo – Sem grande interesse 39TP5 Aplicacionais para Ciências e Engenharia Método da vizinhança % Interpolação nearest com pontos adicionais xdata=[-4.6,-4,-3,-1.6,-1,-0.4,0.8,1.6,2.2,2.6]; ydata=[-3.2,-1,2.5,1.3,0,-1.3,-2.6,-1.1,1.5,4.3]; plot(xdata,ydata,'ob','MarkerSize',8),hold on xdatanew=min(xdata):0.2:max(xdata); ydatanew=interp1(xdata,ydata,xdatanew,'nearest'); plot(xdatanew,ydatanew,'.-r','MarkerSize',10) xlabel('x'),ylabel('y'),grid on; legend('Dados',... 'Interpolação nearest com pontos adicionais',... 'Location','NW') 40TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação linear, com pontos adicionais, usando a função interp1() -5 -4 -3 -2 -1 0 1 2 3 x -4 -3 -2 -1 0 1 2 3 4 5 Dados Interpolação linear com pontos adicionais 41TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação linear, com pontos adicionais, usando a função interp1() – Na interpolação linear (polinomial de 1º grau) com N pontos, os N-1 intervalos são interpolados por uma linha reta que une os pontos (xi, yi) e (xi+1, yi+1) – Visualmente melhor que o método anterior – A curva interpolada ainda não é suave – O Matlab usa esta interpolação por defeito e também na função plot() 42TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação linear, com pontos adicionais, usando a função interp1() % Interpolação linear com pontos adicionais xdata=[-4.6,-4,-3,-1.6,-1,-0.4,0.8,1.6,2.2,2.6]; ydata=[-3.2,-1,2.5,1.3,0,-1.3,-2.6,-1.1,1.5,4.3]; plot(xdata,ydata,'ob','MarkerSize',8),hold on xdatanew=min(xdata):0.2:max(xdata); ydatanew=interp1(xdata,ydata,xdatanew,'linear'); plot(xdatanew,ydatanew,'.-r','MarkerSize',10) xlabel('x'),ylabel('y'),grid on; legend('Dados',... 'Interpolação linear com pontos adicionais',... 'Location','NW') 43TP5 Aplicacionais para Ciências e Engenharia Interpolação cúbica segmentada spline • É utilizado, como curva de interpolação, um polinómio de terceiro grau para cada i-ésimo intervalo entre dois pontos de dados adjacentes – Produz uma curva de interpolação suave que é .. – Relativamente imune à adição de novos pontos • O Matlab usa quatro condições para determinar os coeficientes 44TP5 Aplicacionais para Ciências e Engenharia Interpolação cúbica segmentada spline • Algumas condições adicionais: – O valor do polinómio em cada conjunto de pontos deve serigual às ordenadas desses pontos – As derivadas de primeira ordem, para cada intervalo, devem ser contínuas à esquerda e à direita 45TP5 Aplicacionais para Ciências e Engenharia Interpolação cúbica segmentada spline – As quatro equações anteriores são suficientes para encontrar quatro coeficientes do polinómio a cada intervalo, exceto os mais à esquerda e à direita – Geralmente o método spline define as segundas derivadas nas extremidades como zero – O Matlab tem vários métodos de interpolação polinomial para além do “linear” e “spline” 46TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação spline, com pontos adicionais, usando a função interp1() -5 -4 -3 -2 -1 0 1 2 3 x -4 -3 -2 -1 0 1 2 3 4 5 Dados Interpolação spline com pontos adicionais 47TP5 Aplicacionais para Ciências e Engenharia A função interp1 • Interpolação spline, com pontos adicionais, usando a função interp1() % Interpolação spline com pontos adicionais xdata=[-4.6,-4,-3,-1.6,-1,-.4,0.8,1.6,2.2,2.6]; ydata=[-3.2,-1,2.5,1.3,0,-1.3,-2.6,- 1.1,1.5,4.3]; plot(xdata,ydata,'ob','MarkerSize',8),hold on xdatanew=min(xdata):0.2:max(xdata); ydatanew=interp1(xdata,ydata,xdatanew,'spline'); plot(xdatanew,ydatanew,'.-r','MarkerSize',10) xlabel('x'),ylabel('y'),grid on; legend('Dados',... 'Interpolação spline com pontos adicionais',... 'Location','NW')
Compartilhar