Baixe o app para aproveitar ainda mais
Prévia do material em texto
FERRAMENTAS MATEMÁTICAS APLICADAS AULA 6 Prof. Ricardo Alexandre Deckmann Zanardini 2 CONVERSA INICIAL Nesta aula, veremos o que é regressão linear o como podemos utilizar o Python para obtermos uma reta de regressão e o coeficiente de correlação. Em seguida, veremos como é possível resolver problemas relacionados à interpolação. Veremos também o que são séries de Fourier e como podemos aproximar funções por meio dessas séries E, para encerrarmos, abordaremos a formulação de problemas de programação linear e a resolução desses problemas de otimização por meio do Python. TEMA 1 – REGRESSÃO LINEAR Um importante tópico da disciplina se refere à regressão linear, que consiste em obtermos uma função linear que melhor se ajusta a um conjunto de pontos dados. Para que esse ajuste seja feito da melhor forma, o somatório dos erros quadráticos entre os pontos dados e a reta de regressão são minimizados. O uso da regressão linear é muito comum em problemas cujo objetivo é verificarmos se há crescimento ou decrescimento em um determinado fenômeno observado, determinarmos qual é a taxa de crescimento ou de decrescimento, fazermos estimativas ou previsões com base em um conjunto de informações e muito mais. No decorrer da aula, teremos diversos exemplos que ajudarão a compreendermos melhor o que é a regressão linear, como obtermos a reta de regressão e o coeficiente de correlação e onde podemos aplicar esses conhecimentos. Inicialmente, vamos falar um pouco a respeito da reta de regressão. Iremos utilizar a equação da reta na forma y = ax + b. Utilizando o Python, veremos como podemos obter o coeficiente angular da reta, representado por “a” e o coeficiente linear representado por “b”. Além da reta de regressão, um importante parâmetro que pode ser facilmente obtido é o coeficiente de correlação de Pearson. O coeficiente de correlação varia de -1 a 1 e indica qual é o nível de correlação entre os dados e também informa se essa correlação é positiva ou negativa, ou seja, se a reta de regressão é crescente ou decrescente. Quando o coeficiente está próximo de 1, temos uma correlação forte entre os dados, e a reta é crescente. Quando o coeficiente está próximo de -1, a correlação é forte e a reta é decrescente. Quanto mais próximo de 0 estiver o valor do coeficiente de correlação, mais 3 fraca é essa correlação. Caso o coeficiente de correlação seja igual a zero, não há correlação entre os dados. Para trabalharmos com regressão linear, precisamos de pares ordenados da forma (x, y) em que, para cada valor de x, temos um valor de y correspondente. A representação gráfica desses pares ordenados é chamada de diagrama de dispersão. A variável “x” é conhecida como variável independente e está associada ao eixo horizontal. A variável “y” está associada à variável “x” e por isso é chamada de variável dependente, ou seja, “y” é uma consequência de “x”. Para trabalharmos com regressão linear no Python, vamos utilizar a biblioteca “SciPy”. A regressão linear é obtida pela função “linregress()”, que fornece os valores de “a” e de “b” da reta, o coeficiente de correlação e também o valor “p” do teste de hipótese e o erro estimado. Quando tratamos de regressão linear, além da reta de regressão e do coeficiente de correlação, também podemos construir o diagrama de dispersão, que consiste na representação do conjunto de pontos da forma (x, y) associados às variáveis x e y. Para compreendermos bem esses conceitos e como podemos utilizar o Python, vamos acompanhar a resolução de um exemplo. Exemplo 1: Os valores das faturas de energia elétrica de uma residência, nos 4 primeiros meses do ano, são apresentados na tabela abaixo: Tabela 1 – Valores das faturas de energia elétrica de uma residência Mês (x) Janeiro Fevereiro Março Abril Valor (y) R$ 189,93 R$ 172,10 R$ 182,30 R$ 179,56 Fonte: Elaborado pelo autor. Obtenha a reta de regressão, o coeficiente de correlação, faça o diagrama de dispersão e verifique se nesse período ocorreu um aumento ou redução do consumo. Resolução: 4 Figura 1 – Diagrama de dispersão Fonte: Elaborado pelo professor. A reta de regressão corresponde a 0,91x+176,2. Como o coeficiente de x é positivo, a função é crescente. Logo, o consumo está aumentando com o passar do tempo. Exemplo 2: Encontre a reta que melhor se ajusta ao seguinte conjunto de pontos dados e o respectivo coeficiente de correlação. 5 Tabela 2 – Relação entre quantidade produzida e custo de produção em R$ Quantidade produzida (x) 80 90 100 110 120 130 Custo de produção em R$ (y) 1000 1050 1080 1110 1200 1250 Fonte: Elaborado pelo autor. Em seguida, faça uma previsão para o custo referente à produção de 140 unidades. Resolução: Figura 2 –Previsão para o custo referente à produção de 140 unidades Fonte: Elaborado pelo autor. A reta de regressão é y=4,94x+596, o coeficiente de correlação é igual a 0,98 e a previsão de custo para a produção de 140 unidades é R$ 1.288,00. Exemplo 3: Uma barraca de cachorro-quente tem as seguintes demandas de segunda a sexta-feira: 6 Tabela 3 – Demandas de uma barraca de cachorro-quente Dia 1 2 3 4 5 Demanda 180 192 206 220 254 Fonte: Elaborado pelo autor. a. Qual é a reta que melhor se ajusta aos pontos? b. Qual é a demanda prevista para o sábado? Resolução: Figura 3 – Demandas de uma barraca de cachorro-quente Fonte: Elaborado pelo autor. Além da regressão linear, um importante tema relacionado a um conjunto de dados é a interpolação. TEMA 2 – INTERPOLAÇÃO Sabemos que a regressão linear consiste em obter uma reta que melhor se aproxime de um conjunto de pontos dados. No caso da interpolação, o objetivo é a obtenção de uma função que passa por um conjunto de pontos dados. Há vários métodos destinados à interpolação. Em particular, utilizaremos as funções “interp1d()” e “lagrange()” da biblioteca “ScyPy”. É 7 importante ressaltar que há também outras formas de interpolação disponíveis nessa biblioteca. Veremos diversos exemplos relacionados à interpolação. Exemplo 1: Considere os pontos a seguir x 1 2 3 4 5 y 1 4 9 16 25 e a respectiva imagem associada Figura 4 – Imagem associada a uma correlação de pontos Fonte: Elaborado pelo autor. Por meio do Python, faça a respectiva interpolação. Resolução: 8 Figura 5 – Exemplo de interpolação realizada pelo Python (1) Fonte: Elaborado pelo autor. Exemplo 2: Obtenha o polinômio que interpola os pontos x 1 2 3 4 5 y 1 4 9 16 25 Resolução: 9 Figura 6 – Exemplo de interpolação realizada pelo Python (2) Fonte: Elaborado pelo autor. Note que a função original corresponde a y=x2 e a função interpoladora corresponde a y=x2-3,553X10-15. Como -3,553X10-15 é muito próximo de zero, podemos desprezar essa parcela e a função interpoladora corresponde então a y=x2. Exemplo 3: A tabela a seguir apresenta uma sequência de pontos associados a um experimento físico que está medindo a variação da temperatura em um ambiente de trabalho durante um dia de verão. O tempo está medido em horas e a temperatura em graus Celsius. Tabela 4 – Variação da temperatura em um ambiente de trabalho (1) Tempo 8 11 13 15 18 Temperatura 20 25 32 30 27 Fonte: Elaborado pelo autor. Qual é a função que interpola esses pontos? Resolução: 10 Figura 7 – Variação da temperatura em um ambiente de trabalho Fonte: Elaborado pelo autor. A função que interpola os pontos é f(x)=0,03738x4-1,97x3+37,65x2- 307,3x+924,2. Exemplo 4: A tabela a seguir apresenta uma sequência de pontos associados a um experimento físico que está medindo a variação da temperatura em um ambiente de trabalho durante um dia de verão. O tempoestá medido em horas e a temperatura em graus Celsius. Tabela 5 – Variação da temperatura em um ambiente de trabalho (2) Tempo 8 11 13 15 18 Temperatura 20 25 32 30 27 Represente os dados originais e a função que interpola esses pontos em um mesmo sistema de eixos coordenados. Resolução: 11 Figura 8 – Variação da temperatura em um ambiente de trabalho (2) Fonte: Elaborado pelo autor. O uso da interpolação é muito útil quando precisamos modelar problemas reais. No entanto, em diversas aplicações reais onde há uma repetição de padrões, ou seja, quando trabalhamos com funções periódicas, o uso das séries de Fourier é bastante adequado. Veremos a seguir um pouco do que se refere às séries de Fourier. TEMA 3 – SÉRIES DE FOURIER Quando falamos de séries de Fourier, temos uma série trigonométrica utilizada para a representação de funções periódicas. As séries de Fourier são muito úteis quando precisamos aproximar funções por meio de somatórios de seno e cosseno. A biblioteca “SymPy” tem rotinas que geram séries de Fourier com base em determinadas funções. O uso de séries de Fourier é muito útil no processamento digital de sinais e de imagens, pois as combinações de seno e cosseno se ajustam aos mais diversos tipos de funções periódicas. 12 Para exemplificarmos, iremos considerar a função y=x2, uma função bastante conhecida, no intervalo [-π, π] e iremos obter, por meio da função “fourier_series()”, séries de Fourier com diferentes números de termos. Quanto maior o número de termos, melhor a aproximação obtida. Faremos também os respectivos gráficos para facilitar a compreensão. Vamos considerar, inicialmente, uma aproximação com 2 termos da série. A quantidade de termos é definida pela função “truncate()”. O respectivo gráfico é obtido com base na seguinte sequência de comandos 13 Figura 9 – Exemplo de série de Fourier com dois termos Fonte: Elaborado pelo autor. Para uma série com 3 termos, temos 14 Figura 10 – Exemplo de série de Fourier com três termos Fonte: Elaborado pelo autor. Com 4 termos, a aproximação obtida é a seguinte: 15 Figura 11 – Exemplo de série de Fourier com quatro termos Fonte: Elaborado pelo autor. É fácil percebermos que as aproximações melhoram com o aumento de termos da série. A seguir, temos as 3 aproximações e a função original em um mesmo gráfico. 16 Figura 12 – Utilização das séries de Fourier com 3 aproximações e a função original em um mesmo gráfico Fonte: Elaborado pelo autor. Exemplo 1: Obtenha os 4 primeiros termos da série de Fourier que aproxima a função y=2x2+1 no intervalo [0, 1]. Resolução: 17 Figura 13 – 4 primeiros termos da série de Fourier que aproxima a função y=2x2+1 no intervalo [0, 1] Fonte: Elaborado pelo autor. TEMA 4 – FORMULAÇÃO DE PROBLEMAS DE PROGRAMAÇÃO LINEAR Uma importante área do conhecimento é a otimização, e a pesquisa operacional é uma ampla área da matemática com aplicações na engenharia que tem como principal objetivo utilizar métodos para a resolução de problemas de otimização. A origem da pesquisa operacional está diretamente relacionada à programação linear e ao método simplex proposto por George B. Dantzig na década de 40, na época da Segunda Guerra Mundial. Utilizamos a pesquisa operacional quando temos várias possibilidades e pretendemos escolher a melhor delas. A programação linear (PL), um caso particular da pesquisa operacional, está baseada na otimização associada a sistemas de equações e inequações lineares. A essência de um problema de programação linear é otimizarmos problemas em que temos uma função objetivo linear e restrições formadas por equações ou inequações também lineares. É uma aplicação matemática que preza pelo melhor aproveitamento possível de uma situação que pode ser formulada como um problema de PL, ou seja, uma situação em que temos variáveis relacionadas por uma função objetivo a ser minimizada ou maximizada sujeita a restrições. Podemos maximizar receita, lucro, demanda, satisfação ou minimizar custo, desperdício, dentre outros critérios possíveis. Para que possamos resolver problemas de PL, o primeiro passo é pensarmos na formulação do problema. Para que possamos formular 18 corretamente um problema de PL, precisamos basicamente identificar as variáveis do problema, a função objetivo e as restrições. As variáveis são as quantias que desejamos identificar e que podem maximizar ou minimizar a função objetivo. A função objetivo é uma expressão matemática que representa a meta do problema e as restrições são as limitações ou condições do problema. A forma geral da função objetivo é max z = c1x1 + c2x2 + ... + cnxn ou min z = c1x1 + c2x2 + ... + cnxn onde c1, c2, ..., cn são os coeficientes da função objetivo e x1, x2, ..., xn são as variáveis do problema. O termo “max” é utilizado quando o problema é de maximização, e o termo “min” quando o problema é de minimização. Em relação às restrições, podemos ter sinais de igualdade (=) ou de desigualdade (≤ ou ≥). A forma geral das restrições é a11x1 + a12x2 + ... + a1nxn = b1 a11x1 + a12x2 + ... + a1nxn ≤ b1 a11x1 + a12x2 + ... + a1nxn ≥ b1 Com base nas variáveis, da função objetivo e das restrições, podemos construir a formulação de um problema de programação linear. max z = c1x1 + c2x2 + ... + cnxn a11x1 + a12x2 + ... + a1nxn = b1 a11x1 + a12x2 + ... + a1nxn ≤ b1 . . . a11x1 + a12x2 + ... + a1nxn ≥ b1 em que aij, bi e cj são os coeficientes das equações ou inequações, da função objetivo e os termos independentes. 19 Para que possamos entender de fato o que é um problema de programação linear, sua importância em situações reais e como é possível formular um desses problemas, vamos acompanhar a resolução detalhada de um exemplo. Exemplo 1: Uma indústria de equipamentos de mergulho produz dois tipos de nadadeiras de borracha. Uma mais curta para uso em piscinas e outra mais longa para uso em águas abertas. As nadadeiras curtas utilizam 400 gramas de borracha por par e as nadadeiras longas 700 gramas de borracha para cada par. A indústria tem uma disponibilidade de 1 tonelada de borracha por mês. O lucro associado a cada par de nadadeiras curtas é de R$ 50,00 e o lucro para cada par de nadadeiras longas é de R$ 65,00. Devido a contratos com lojas de artigos esportivos, a produção mensal mínima de nadadeiras curtas é de 200 pares e a produção mínima de nadadeiras longas é de 100 pares. Sabendo que o objetivo da indústria é determinar a produção mensal de cada modelo de nadadeira de modo a maximizar o lucro mensal, formule o problema como um problema de programação linear. Resolução: O primeiro passo é identificarmos as variáveis do problema. Após a leitura do enunciado, é possível perceber que a indústria deseja maximizar o lucro e, para isso, pretende decidir quantas nadadeiras de cada modelo deverá produzir. Como essas quantias ainda não estão definidas, mas a indústria precisa dessas informações para programar sua produção, as variáveis são: x1 = quantidade de pares de nadadeiras curtas a serem produzidas x2 = quantidade de pares de nadadeiras longas a serem produzidas Já sabemos quais são as variáveis. Agora precisamos obter a função objetivo. Sabemos que o problema é de maximização. Sabemos também que o objetivo é maximizar o lucro. Como o lucro referente a cada par de nadadeira curta é igual a R$ 50,00, e o lucro referente a cada par de nadadeira longa é igual a R$ 65,00, para termos o lucro total, precisamos multiplicar o 50,00 pela quantidade de pares de nadadeiras curtas a serem produzidas, ou seja, 50 vezesx1 e somarmos com a multiplicação de 65 pela quantidade de pares de nadadeiras longas a serem produzidas, ou seja, 65 vezes x2. Denominando o lucro de L, a função objetivo é max L = 50x1 + 65x2 20 Precisamos também das restrições que são as condições ou limitações do problema. A primeira restrição é a quantidade de matéria-prima. Observe que cada par de nadadeiras curtas requer 400 g de borracha e que cada par de nadadeiras longas requer 700 g de borracha e que o total de borracha disponível corresponde a 1 tonelada. Transformando gramas em quilos e tonelada em quilos, temos a restrição 0,4x1 + 0,7x2 ≤ 1000 O termo “≤” é utilizado, pois a indústria tem no máximo 1000 kg de borracha à disposição. As outras duas restrições do problema se referem às quantidades mínimas de cada tipo de nadadeira a serem produzidas. Como a indústria precisa produzir no mínimo 200 pares de nadadeiras curtas, a restrição correspondente é x1 ≥ 200 e como a quantidade mínima de pares de nadadeiras longas a serem produzidos é de 100 unidades, a outra restrição é x2 ≥ 100 Logo, a formulação do problema é max L = 50x1 + 65x2 0,4x1 + 0,7x2 ≤ 1000 x1 ≥ 200 x2 ≥ 100 Veremos a seguir como é possível utilizarmos o Python para resolvermos o problema e sabermos quantas blusas e quantas camisetas precisam ser produzidas para que o lucro seja o maior possível. TEMA 5 – RESOLUÇÃO DE PROBLEMAS DE PROGRAMAÇÃO LINEAR Um problema de programação linear pode ser resolvido pelo método simples, que consiste em realizarmos operações de soma, subtração, multiplicação e divisão na função objetivo e nas restrições seguindo alguns critérios. A resolução manual pode ser feita, mas é trabalhosa e quanto maior o 21 número de variáveis e de restrições, maior é o tempo e o esforço para obtermos a solução. Por isso, existem alguns softwares destinados à resolução de problemas desse tipo. Também temos a possibilidade de utilizarmos a biblioteca “PuLP” do Python destinada à resolução de problemas de otimização. Veremos como é possível resolver problemas de PL por meio do Python. Para começarmos, vamos considerar o exemplo visto anteriormente. Exemplo 1: Uma indústria de equipamentos de mergulho produz dois tipos de nadadeiras de borracha. Uma mais curta para uso em piscinas e outra mais longa para uso em águas abertas. As nadadeiras curtas utilizam 400 gramas de borracha por par e as nadadeiras longas 700 gramas de borracha para cada par. A indústria tem uma disponibilidade de 1 tonelada de borracha por mês. O lucro associado a cada par de nadadeiras curtas é de R$ 50,00 e o lucro para cada par de nadadeiras longas é de R$ 65,00. Devido a contratos com lojas de artigos esportivos, a produção mensal mínima de nadadeiras curtas é de 200 pares e a produção mínima de nadadeiras longas é de 100 pares. Sabendo que o objetivo da indústria é determinar a produção mensal de cada modelo de nadadeira de modo a maximizar o lucro mensal, resolva o problema como um problema de programação linear. Resolução: Sabemos que a formulação do problema é: max L = 50x1 + 65x2 0,4x1 + 0,7x2 ≤ 1000 x1 ≥ 200 x2 ≥ 100 Com base nessa formulação, podemos resolver esse problema utilizando a biblioteca “PuLP”. O primeiro passo é instalar o pacote “pulp” executando os seguintes comandos: 22 Figura 14 – Instalação do pacote “pulp” Fonte: Elaborado pelo autor. Agora podemos resolver o problema. Para isso, os comando são #Variáveis: #Função Objetivo: #Restrições: #Apresentação da solução do problema 23 Figura 15 – Resolução de um problema utilizando-se da biblioteca “PuLP” Fonte: Elaborado pelo autor. A empresa terá um lucro máximo de R$ 122.750,00 se produzir 2325 pares de nadadeiras curtas e 100 pares de nadadeiras longas. Seguindo esses comandos, é possível resolvermos problemas de programação linear facilmente. FINALIZANDO Chegamos ao final desta aula, em que aprendemos a resolver problemas de regressão linear e de interpolação utilizando o Python. Também vimos o que são séries de Fourier e que é possível utilizarmos o Python para obtermos os termos de uma série. Aprendemos a formular um problema de programação linear e a resolver problemas de programação linear de um modo simples utilizando o Python. 24 REFERÊNCIAS CASTANHEIRA, N. P. Matemática aplicada. 3. ed. Curitiba: Ibpex, 2010. DEMANA, F. D. et al. Pré-cálculo. 2. ed. São Paulo: Pearson, 2013. FLEMING, D. M.; GONÇALVES, M. B. Cálculo A: função de uma variável. 2. ed. São Paulo: Pearson, 2007. PERKOVIC, L. Introdução à computação usando Python: um foco no desenvolvimento de aplicações. Rio de Janeiro: LTC. Conversa inicial FINALIZANDO REFERÊNCIAS
Compartilhar