Baixe o app para aproveitar ainda mais
Prévia do material em texto
Exercícios de revisão resolvidos 1. Um determinado tanque cilíndrico armazena um líquido que será usado em um processo. A altura do nível de líquido no tanque é denominada h, e h = 0 pode ser considerado o valor da altura do líquido quando o tanque está cheio. O tanque esvazia a uma vazão constante Q para suprir o processo. O conteúdo líquido é reposto por uma corrente de entrada a uma taxa de 2Qsen2(t). O balanço de massa (grandeza conservativa) considerando o líquido como tendo densidade constante é: Em que: h ≡ altura do nível do líquido (m); t ≡ tempo de operação (d); A ≡ área do fundo circular do tanque (m2); Q ≡ vazão de líquido (m3/d). No modelo matemático acima, sabemos que apenas h e t são variáveis e a área do fundo circular do tanque (A) e a vazão (Q) não variam. Portanto. o modelo pode ser reescrito. Retirando A do termo diferencial e levando-o para o lado direito da equação como denominador, temos: ⇒ ⇒ Sabendo que A = 200 m2 e Q = 40 m3/d, responda aos itens abaixo: a) Liste as partes funcionais do modelo matemático: variável dependente, variável independente, parâmetros e função forçante; b) Determine algebricamente o tempo que o processo levaria para atingir o estado estacionário; c) Use o método de diferenças finitas para determinar a profundidade do nível de líquido após 2 dias considerando a condição inicial de h como sendo h=0. Use valores de passo de 0,5 dias. d) Determine os erros relativos obtidos dos cálculos de altura do líquido do item anterior. Gabarito: a) Nesse exemplo, o modelo matemático consiste de uma equação diferencial obtida com base em um balanço de massa. Considerando a densidade constante, o modelo descreve apenas a variação de volume do líquido em função do tempo e das vazões de entrada e saída. A variação de volume do líquido foi convertida em variação de altura do líquido porque o volume é V = Ah. Sendo a área A constante, ela pode sair do termo diferencial e passar para o outro lado da igualdade como denominador. Com esse formato final, podemos indicar facilmente as partes funcionais do modelo: h ≡ variável dependente; t ≡ variável dependente; A ≡ parâmetro; Q ≡ função forçante. b) Como sabemos, no estado estacionário, não existem mais variações ocorrendo no processo. Assim, o termo diferencial pode ser cancelado e sair da equação. Dessa forma, a equação diferencial se transforma em uma equação algébrica e pode ser facilmente resolvida. Vejamos: Igualando o termo diferencial dh/dt = 0, levando o termo -Q/A para o lado esquerdo da equação, invertendo os lados da equação, cortando os termos similares e resolvendo para o tempo, temos: ⇒ ⇒ ⇒ ⇒ ⇒ Logo, o tempo para o processo atingir o estado estacionário é t = 45 dias. c) Nós poderíamos determinar facilmente o valor de h para t = 2 dias se dispuséssemos da solução exata dessa equação diferencial, entretanto, esta não está disponível. A presença de uma função oscilatória senoidal complica muito a solução por meio de um método matemático analítico, então, precisamos recorrer a um método computacional. O método das diferenças finitas (método de Euler) é proposto para a solução, para isso precisamos transformar o modelo matemático em um modelo ou problema numérico. Vejamos: Em primeiro lugar, vamos substituir o termo diferencial da equação por um termo de diferenças finitas: ⇒ Observe que apenas a variável dependente e independente ganham índices numéricos (i e i+1), pois Q e A são constantes, ou seja, não variam ao longo da simulação, portanto, não precisam de índices numéricos. Observe também que, nessa etapa, as variáveis dependentes e/ou independentes no lado direito da equação sempre ganham o índice numérico i, que corresponde ao valor no instante anterior do cálculo. Vamos substituir os valores de Q e A na equação e rearranjá-la, assim, temos: ⇒ Nesse exemplo, exigiu-se que os cálculos fossem feitos entre 0 e 2 dias, utilizando valor de passo igual a 0,5 dias, ou seja, vamos determinar valores de altura do líquido nos dias: t = [0 0,5 1,0 1,5 2,0]. A condição inicial de h também foi dada e é h(1) = 0. Vamos iniciar os cálculos e, para isso, vamos montar a expressão da primeira iteração: Em que h(2) é o valor da altura no segundo valor de tempo, ou seja, em 0,5 dia. Substituindo os valores, temos: Portanto, o valor negativo da altura do líquido ao final de 0,5 dia indica que o nível baixou 0,1 metro. Vamos à segunda iteração: Em que h(3) é o valor da altura no terceiro valor de tempo, ou seja, em 1,0 dia. Logo: Observe que o termo (ti+1 - ti ) também resultou em 0,5 na segunda iteração, pois esse termo corresponde exatamente ao valor do passo, logo poderíamos ter usado o valor 0,5 desde a primeira iteração. Vamos diretamente à terceira iteração: A terceira iteração corresponde ao valor de altura h(4) = -0,2999 m, abaixo da altura inicial. Para continuar, basta prosseguirmos os cálculos até o tempo t=2 dias: Assim, terminamos os cálculos e sabemos que, ao final de 2 dias, o nível do líquido estará em 0,3998 metros abaixo da altura inicial. Esse procedimento pode, obviamente, ser executado manualmente com o auxílio de uma calculadora científica, entretanto estamos mais interessados em executar estes cálculos usando o computador pois na maioria das aplicações, são necessários muitos cálculos. Para isso, precisamos de uma linguagem computacional. O GNU Octave pode ser usado com este objetivo. Abaixo temos um código escrito em Octave para a execução destes cálculos: Quadro 1 - Código escrito em GNU OCTAVE para executar os cálculos. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- %%% simulação numérica do exercício clear all %% limpa todas as variáveis antes de começar passo = 0.5; %% este é o valor do passo h(1) = 0; %% condição inicial da altura t = [0 0.5 1.0 1.5 2.0]; %% vetor tempo com os cinco valores (não usado aqui) for i=1:5 %% início do laço de repetição (for) para cinco valores h(i+1) = h(i) + ((80/200)*(sind(t(i)))^2 - (40/200))*passo; end %% fim do laço de repetição (for) disp(h); %% mostra os resultados na linha de comando Ao executar esse código no Octave, você vai observar que um valor h(6) = -0,4995 foi gerado. Esse valor corresponde ao valor de altura no tempo t = 2,5 dias, que não foi exigido na questão, por isso, podemos desprezá-lo. d) Os erros relativos são os desvios calculados entre os valores de altura de nível obtidos. Os cálculos resultaram em 5 (cinco) valores de h portanto teremos 4 (quatro)desvios. Vamos ao cálculo iterativo dos erros relativos percentuais: iteração 1: iteração 2: iteração 3: iteração 4: Observe os valores dos desvios obtidos diminuindo ao longo da simulação. Caso os erros calculados fossem usados em um critério de parada, o computador não tardaria em em encerrar os cálculos. Abaixo, temos um código escrito em Octave para a execução destes cálculos com critério de parada: Quadro 1 - Código escrito em Octave para os cálculos com critério de parada. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- 16- 17- %%% simulação numérica do exercício clear all %% limpa todas as variáveis antes de começar passo = 0.5; %% este é o valor do passo h(1) = 0; %% condição inicial da altura t = 0:0.5:50; %% vetor tempo com muitos valores (usado neste código) tol = 0.1; %% valor de tolerância admitido em percentual (%) for i=1:length(t) %% início do laço de repetição (for) para muitos valores h(i+1) = h(i) + ((80/200)*(sind(t(i)))^2 - (40/200))*passo; erro = (abs(( h(i+1) - h(i))/( h(i+1))))*100; %% calcula o erro percentual if erro < tol %% compara o erro com a tolerância break %% encerra os cálculos se for verdadeiro 18- 19- 20- 21- 22- else end end %% fim do laço de repetição (for) disp(h); %% mostra os resultados na linha de comando Nesse caso, o código precisou de algumas alterações, são elas: ● Na linha 6, o comando para gerar o vetor t mudou para produzir uma quantidade maior de valores de tempo (teste na linha de comando!), mas com o critério de parada o computador não precisará executar todos os cálculos; ● Na linha 7, o valor de tolerância (tol) precisou ser iniciado para usarmos o critério de parada; ● Na linha 9, o comando length(t) no laço for, retorna o número de elementos no vetor tempo, assim não precisamos contar os elementos; ● Na linha 13, o cálculo do erro foi inserido antes do critério de parada; ● O critério de parada foi inserido da linha 15 até 19. Na linha 15, o comando if erro<tol compara os valores e se for verdadeiro executa o comando break na linha 16. Se for falso, as linhas 16 e 17 não são executadas. As linhas 18 e 19 fecham o critério de parada com os comandos else, end. O código acima encerra os cálculos com 89 elementos para o vetor h. Como sabemos, o valor do passo é 0,5 dias, logo o tempo para atingir o estado estacionário foi de aproximadamente 44,5 dias, bem próximo do valor que encontramos no item b. 2. Um determinado objeto em queda livre possui sua aceleração representada pelo modelo matemático abaixo: Onde: v ≡ velocidade do objeto (m/s); t ≡ tempo (s); Cd ≡ coeficiente de arraste (kg/m); m ≡ massa do objeto (kg); Sabendo que Cd = 0,3 kg/m, g = 9,81 m/s 2 e m = 50 kg, responda os itens abaixo: a) Construa o modelo numérico de diferenças finitas do problema utilizando a série de Taylor truncada no segundo termo; b) Use o modelo numérico do item (a) para determinar a velocidade do objeto após 10 segundos de queda livre. Considere a velocidade inicial nula. Use valores de passo de 2 segundos. c) Construa outro modelo numérico de diferenças finitas do problema utilizando a série de Taylor truncada no terceiro termo. d) Use o modelo numérico do item (c) para determinar a velocidade do objeto após 10 segundos de queda livre. Considere a velocidade inicial nula. Use valores de passo de 2 segundos. e) Determine os erros relativos entre os resultados de velocidade obtidos no item (d) f) Escreva um código em GNU Octave para simular a queda livre do objeto no tempo dado usando o valor de passo dado nos itens anteriores. Solução: a) A série de Taylor consiste em uma série infinita de aproximação utilizada para criar modelos numéricos de diferenças finitas. A forma original da série de Taylor é: Observe que no segundo termo da série de Taylor usa-se a primeira derivada, no terceiro termo usa-se a segunda derivada e assim por diante. O objetivo da série de Taylor é aumentar a precisão da aproximação quanto mais termos se usa do lado direito da igualdade. A série de Taylor truncada no segundo termo ao lado direito da igualdade fica: Onde é o valor da função no tempo posterior, é o valor da função no tempo anterior, é o valor da primeira derivada da função no tempo anterior e h é o valor do passo. A série de Taylor pode ser adaptada ao problema do objeto em queda livre e ficar da seguinte forma: Substituindo o termo dv/dt pela equação do modelo matemático teremos: Assim temos o modelo numérico de diferenças finitas obtido a partir da série de Taylor truncada no segundo termo. Observe que do lado direito da igualdade, as variáveis dependentes e/ou independentes ganham o índice numérico do tempo anterior, e os outros valores constantes não ganham índices numéricos. b) Para determinarmos o valor da velocidade após 10 segundos, precisamos simular o modelo numérico começando da velocidade inicial, e assim vamos obtendo valores gradativos de velocidade em passos de 2 segundos até chegarmos a 10 segundos. Portanto o vetor tempo que será usado para a simulação será t = [0 2 4 6 8 10], ou seja, cinco iterações, já que o valor de velocidade inicial já foi fornecido. Vamos iniciar os cálculos e para isso vamos montar a expressão da primeira iteração: Observe que as constantes e o valor de passo já foram substituídos, pois não mudarão durante a simulação. Substituindo o valor de velocidade temos: Onde v(2) é o valor da velocidade no segundo intervalo de tempo. Logo calculadora científica mas se você quiser executar estes cálculos na linha de comando do Octave, use os seguintes comandos: Quadro 1 - Comandos para executar a primeira iteração no Octave. >> v(1) = 0; >> v(2) = v(1) + ((9.81 - (0.3/50)*(v(1))^2))*2 Para continuar executando no Octave, basta recuperar o último comando com a tecla direcional para cima (seta), substituir os índices da velocidade e teclar Enter novamente. Vamos para a segunda iteração, onde a expressão é: Onde v(3) é o valor da velocidade no terceiro intervalo de tempo. Substituindo temos: E assim sucessivamente: Assim descobrimos que aos 10 segundos o objeto terá uma velocidade de queda livre de 40,41 m/s. Mais três iterações e os valores de velocidade não mudarão mais indicando que o objeto atinge sua velocidade terminal em aproximadamente 14 segundos. c) A série de Taylor truncada no terceiro termo ao lado direito da igualdade tem o objetivo de forneceruma estimativa um pouco mais precisa e fica da seguinte forma: Observe que no terceiro termo a função deve ser derivada pela segunda vez. O denominador 2! significa fatorial de 2 e calcula-se da seguinte forma: ⇒ Obs: O fatorial 3! = 6, o fatorial 4! = 24, e assim por diante. O modelo numérico fica agora com um termo a mais que contém a segunda derivada do modelo matemático: Substituindo a primeira e a segunda derivada temos: Lembre-se que g sai da segunda derivada por se tratar de uma constante. d) Vamos determinar o valor da velocidade após 10 segundos utilizando o novo modelo numérico. Na primeira iteração, calculamos o segundo valor de velocidade pois o primeiro valor já foi dado e vale 0 (zero). A expressão fica: Substituindo o valor de v(1)=0, temos: Logo: Continuando os cáculos como no item anterior, ficamos com: Observe que o resultado obtido com o segundo modelo numérico está abaixo do obtido com o primeiro modelo numérico. Neste caso, o primeiro modelo superestimou o valor da velocidade já que o segundo modelo, que é mais preciso, obteve um valor 2,4% menor do que o primeiro. Neste problema esta diferença pode não ser muito significativa, mas em aplicações industriais, este percentual de diferença nas estimativas pode significar uma grande quantia monetária. e) Vamos determinar os erros relativos para os valores de velocidade obtidos no item anterior. Foram calculados 5 (cinco) valores, portanto teremos 4 (quatro) cálculos de erro relativo. Abaixo temos as expressões e os cálculos do respectivos erros: iteração 1: iteração 2: iteração 3: iteração 4: Os cálculos acima podem ser executados em uma calculadora científica mas se você quiser usar o Octave, basta digitar os comandos abaixo na linha de comando: Quadro 2 - Comando para o cáculo de erros relativos no Octave. >> erro(1) = (abs((v(2)-v(1))/(v(2))))*100 Para continuar executando no Octave, basta recuperar o último comando com a tecla direcional para cima (seta), substituir os índices da velocidade e do erro e teclar Enter novamente. Observe os valores dos desvios obtidos diminuindo ao longo da simulação. Caso os erros calculados fossem usados em um critério de parada, o computador não tardaria em encerrar os cálculos. f) O código em Octave para executar os cálculos do segundo modelo estão escritos abaixo: Quadro 3 - Código escrito em GNU Octave para executar os cálculos. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- %%% simulação numérica do exercicio clear all %% limpa todas as variáveis antes de começar passo = 2; %% este é o valor do passo v(1) = 0; %% condição inicial da altura t = [0 2 4 6 8 10]; %% vetor tempo com seis valores (não é usado no código) for i=1:6 %% início do laço de repetição (for) para seis valores v(i+1) = v(i) + (9.81 - (0.3/50)*(v(i))^2)*passo + (-2*(0.3/50)*(v(i)))*passo^2; end %% fim do laço de repetição (for) disp(v); %% mostra os resultados na linha de comando Abaixo temos um código escrito em Octave para a execução destes cálculos com critério de parada: Quadro 1 - Código escrito em Octave para os cálculos com critério de parada. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- 16- 17- 18- 19- 20- 21- 22- %%% simulação numérica do exercicio clear all %% limpa todas as variáveis antes de começar passo = 2; %% este é o valor do passo v(1) = 0; %% condição inicial da altura t = 0:2:100; %% vetor tempo com muitos valores (usado neste código) tol = 0.01; %% valor de tolerancia admitido em percentual (%) for i=1:length(t) %% início do laço de repetição (for) para muitos valores de t v(i+1) = v(i) + (9.81 - (0.3/50)*(v(i))^2)*passo + (-2*(0.3/50)*(v(i)))*passo^2; erro = (abs(( v(i+1) - v(i))/( v(i+1))))*100; %% calcula o erro percentual if erro < tol %% compara o erro com a tolerancia break %% encerra os calculos caso seja verdadeiro else end end %% fim do laço de repetição (for) disp(v); %% mostra os resultados na linha de comando 3. Resolva os itens A até D a partir da função abaixo: Determine: A. O zero (ou raiz) da função usando método da bisseção no intervalo entre 1 e 2; B. O zero (ou raiz) da função usando método de Newton-Raphson com valor inicial de 1; C. O valor ótimo da função usando o método de Newton-Raphson; D. Determine se o valor ótimo é de máximo ou mínimo. Gabarito: Em primeiro lugar precisamos entender que os zeros ou raízes das funções estão em x quando f(x)=0, e os ótimos (máximos e/ou mínimos) também estão em x mas neste caso é quando f’(x) = 0 (quando a derivada é zero). O valor de f(x) ótimo é obtido substituindo o valor de x ótimo na função original (antes de derivar). Embora usemos métodos diferentes, eles devem retornar o mesmo resultado. Vamos à solução: A. De acordo com o método temos que e . A primeira etapa é dividir o intervalo de valores dado: Agora temos dois intervalos candidatos a substituir o primeiro intervalo de e , são eles: , e , . Para saber qual será, precisamos fazer o teste para definirmos o novo intervalo. O teste consiste em substituir os valores dos dois intervalos nas funções e fazer as multiplicações: e . O novo intervalo será aquele que produz um valor negativo no teste. Vamos ao primeiro teste: O produto que é positivo, logo este não será o novo intervalo. Sabemos que o novo intervalo é o intervalo superior, mas vamos confirmar: O produto que é negativo, confirmando que este é o novo intervalo e que que o zero da função está entre e . Precisamos dividir o novo intervalo novamente e recomeçar o procedimento. Vamos repetir o procedimento. A vantagem para a solução manual é que já calculamos dois valores de intervalo: O produto que é negativo. Logo já sabemos que o novo intervalo é e e que o zero está entre estes dois valores. Nós devemos prosseguir até o zero positivo desta função que é 1,6667. O outrozero vale 0 (zero). Observe que o resultado é uma dízima periódica, ou seja, para parar os cálculos precisamos de um critério de parada ou prosseguiremos infinitamente. Para o critério, devemos calcular os erros entre os valores de xr. Vejamos: iteração 1: Com uma tolerância de, por exemplo 0,0001 %, os cálculos não tardariam em parar e nos dariam o resultado com uma precisão de quatro casas decimais. Observe que a vantagem do método é sua simplicidade, entretanto como desvantagem ele precisa de uma estimativa precisa de intervalo inicial. A escolha errada do intervalo leva a não convergência. B. Para usarmos o método de Newton precisamos da derivada da função: . Com a função original e a derivada usamos a fórmula abaixo: Vamos a primeira etapa, substituir o valor inicial na função e na derivada: Depois substituímos na fórmula: Ja podemos passar para a segunda etapa: Na fórmula do método para encontrarmos o novo valor temos: E assim por diante: Observe que uma vantagem é que convergência foi mais rápida a partir de um valor inicial qualquer. Uma desvantagem é que o método precisa obrigatoriamente da derivada da função. C. Para calcularmos o valor ótimo pelo método de Newton-Raphson precisamos da segunda derivada que é . Logo o valor da segunda derivada não irá mudar na fórmula ao longo das iterações pois não é função de x. A fórmula para determinar o ótimo é: A derivada a segunda deve ser diferente de zero, pois ela fica no denominador. Podemos iniciar o procedimento com o valor inicial 1: Já na primeira iteração o método encontra o valor ótimo. D. O valor ótimo encontrado é de máximo pois a segunda derivada da função produz um valor negativo (se fosse positivo seria de mínimo). 4. Dado o sistema de equações lineares abaixo: Determine os valores de x1, x2 e x3 utilizando o método iterativo de Gauss- Seidel. Gabarito: O método é simples. Em primeiro lugar isole as três variáveis das três equações e formule as equações abaixo: Depois atribua valores iniciais nulos a x2 e x3. Depois inicie os cálculos de x1, x2 e x3 a partir das equações acima, e simplesmente repita os cálculos com os novos valores de x1, x2 e x3 obtidos. Vejamos, fazendo x2 =0 e x3=0, vamos a primeira iteração: Vamos a segunda iteração: Vamos terceira iteração: Vamos a quarta iteração: Observe que, na quarta iteração, os valores já se aproximam da resposta que é x1=2, x2=-3 e x3=5. O quadro abaixo contém os comandos para o cálculo iterativo de Gauss-Seidel no Octave. Execute os comandos na ordem em que estão mostrados. Quadro 1 - Comandos para executar o método de Gauss-Seidel no Octave. >> x2 = 0 >> x3 = 0 >> x1 = (4.5 + 2*x2 + 1.5*x3)/3 >> x2 = (-21 -2*x1 + 2*x3)/5 >> x3 = (32 - 1.5*x1 + 3*x2)/4 1. Depois da primeira execução das linhas de comando acima, recupere os três últimos comandos com a tecla direcional para cima do teclado (seta), um de cada vez, teclando enter após cada vez, ou seja, recupere primeiro a equação de x1 e tecle enter, depois a equação de x2 e tecle enter e depois a equação de x3 e tecle enter. Repita este procedimento e observe que os valores vão se aproximando de x1=2, x2=-3 e x3=5. 5. Dado o sistema de equações não lineares abaixo: Determine os valores de x e y utilizando o método de Newton-Raphson para sistemas não lineares. Use valores iniciais x=1 e y=2. Gabarito: Em primeiro lugar, vamos definir funções adaptadas para o método: A partir destas funções, vamos construir a matriz Jacobiana, onde cada elemento é a derivada de uma função em relação a apenas uma variável, ou seja, a outra variável fica se comportando como uma constante. A matriz Jacobiana, neste caso terá duas linhas e duas colunas, pois se trata de um sistema de duas equações não lineares com duas incógnitas (para três equações/incógnitas, seria uma matriz 3 x 3 e assim por diante). Vamos por partes: Vamos determinar o primeiro elemento, ou melhor, o elemento da primeira linha e primeira coluna da matriz Jacobiana: Observe que J(1,1) corresponde a derivada da primeira função f1 em relação a primeira variável x, por isso y foi tratada como constante (para facilitar, imagine uma constante no lugar da variável y antes de derivar). Vamos determinar o elemento da primeira linha e segunda coluna da matriz Jacobiana: Observe que agora, no elemento J(1,2), é x que é tratada como constante. Vamos determinar agora o elemento da segunda linha e primeira coluna da matriz Jacobiana: Neste elemento, a segunda função foi derivada em relação a x e y foi tratada como constante. Vamos determinar o elemento da segunda linha e segunda coluna da matriz Jacobiana: Neste elemento, a segunda função foi derivada em relação a y e x foi tratada como constante. Com a matriz Jacobiana e as funções já podemos iniciar as iterações. Vamos iniciar com os valores iniciais x=1 e y=2. Em primeiro lugar podemos calcular os valores das funções f1 e f2. Em uma segunda etapa, usamos estes valores iniciais para calcular cada elemento da matriz Jacobiana na primeira iteração: Ainda na segunda etapa, precisamos determinar o determinante da matriz Jacobiana: Na terceira e última etapa da primeira iteração, usamos todos este valores no cálculo dos novos valores de x e y. Vamos para segunda iteração, usando os novos valores obtidos x=1,8214 e y=7,7143.Vamos a terceira iteração: Observe que na terceira iteração, o método já se aproxima da solução que é x=2 e y=4. Os cálculos deste método são um tanto quanto exaustivos, sendo um exemplo notório da necessidade dos computadores. Os comandos para executar os cálculos em Octave estão no quadro abaixo. Execute os comandos na ordem em que aparecem. Quadro 1 - Comandos para executar o método para sistemas não lineares. >> x = 1; >> y = 2; >> f1 = x^2 + x*y - 12 >> f2 = y + 2*x*y^2 - 68 >> J = [2*x + y , x; 2*y^2 , 1+4*x*y] >> x = x - (f1*J(2,2) - f2*J(1,2))/(det(J)) >> y = y - (f2*J(1,1) - f1*J(2,1))/(det(J)) Observe que, na linha de comando para calcular a matriz J, as derivadas já estão diretamente inseridas na matriz, onde as vírgulas (,) separam as colunas em uma mesma linha e o ponto-vírgula (;) separa as duas linhas. Depois da primeira execução das linhas de comando acima, recupere os cinco últimos comandos com a tecla direcional para cima do teclado (seta), um de cada vez, teclando enter após cada vez, ou seja, recupere primeiro a equação de f1 e tecle enter, depois a equação de f2 e tecle enter, depois a equação de J e tecle enter, depois a equação de x e tecle enter e depois a equação de y e tecle enter. Repita este procedimento e observe que os valores vão se aproximando de x=2 e y=4. Abaixo, temos um código escrito em Octave para a execução desses cálculos em um código: Quadro 2 - Código escrito em Octave para os cálculos. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- 13- 14- 15- 16- 17- 18- %%% método de Newton-Raphson para o sistema não linear do exercício clear all %% limpa todas as variáveis antes de começar x = 1; %% este é o valor de x inicial y = 2; %% este é o valor de y inicial for i=1:10 %% início do laço de repetição (for) para 10 iterações f1 = x^2 + x*y - 12; f2 = y + 2*x*y^2 - 68; J = [2*x + y , x; 2*y^2 , 1+4*x*y]; %% cria a matriz Jacobiana 2x2 x = x - (f1*J(2,2) - f2*J(1,2))/(det(J)); y = y - (f2*J(1,1) - f1*J(2,1))/(det(J)); end %% fim do laço de repetição (for) x %% valores de x e y após 10 iterações y Observe que o laço for repete a execução das linhas 8 até 14 por 10 (dez) vezes, evitando o esforço que seria exaustivo manualmente. Experimente, como atividade complementar, inserir um critério de parada neste código e evitar esforço computacional desnecessário, lembre-se de indexar a variável que você escolher para calcular o erro. Com este desafio terminamos nosso estudo dirigido. 6. Os dados abaixo foram obtidos em um experimento de laboratório. Tabela 1 - Dados experimentais da atividade. x (variável independente) y (variável dependente) 0 0 1 6 2 12 3 30 4 40 5 65 6 92 7 100 8 150 9 189 10 240 Utilize o método da regressão linear para responder o itens abaixo: a) Faça o ajuste dos dados utilizando uma função linear (ou polinomial de 1a ordem) do tipo y = ax + b b) Faça o ajuste dos dados utilizando uma função polinomial de 2a ordem do tipo y = ax2 + bx + c. c) Calcule o coeficiente de correlação para os dois ajustes e responda qual foi o melhor ajuste. d) Crie o gráfico dos dados com a função de melhor ajuste no GNU Octave. Gabarito: a) Os cálculos para os coeficientes do modelo linear estão na Tabela 2. Tabela 2 - Tabela para resolver o item a. x y x2 x∙y 0 0 0 0 1 6 1 6 2 12 4 24 3 30 9 90 4 40 16 160 5 65 25 325 6 92 36 552 7 100 49 700 8 150 64 1200 9 189 81 1701 10 240 100 2400 55 924 385 7158 Para determinarmos o valor de a e b, temos as seguintes equações: Substituindo os valores para cálculo de a e resolvendo temos: Calculando as médias de x e y e substituindo os valores para cálculo de b e resolvendo temos: Logo o modelo linear que se ajusta aos dados é: y = 23,07 x - 31,35 b) Os cálculos para os coeficientes do modelo polinomial de segunda ordem estão na Tabela 3: x y x2 x3 x4 x∙y x2∙y 0 0 0 0 0 0 0 1 6 1 1 1 6 6 2 12 4 8 16 24 48 3 30 9 27 81 90 270 4 40 16 64 256 160 640 5 65 25 125 625 325 1625 6 92 36 216 1296 552 3312 7 100 49 343 2401 700 4900 8 150 64 512 4096 1200 9600 9 189 81 729 6561 1701 15309 10 240 100 1000 10000 2400 24000 55 924 385 3025 25333 7158 59710 Com os dados da última linha da tabela devemos usar as equações abaixo para determinarmos os coeficientes a, b e c. Substituindo os valores da última linha da tabela temos o sistema de três equações lineares abaixo: Utilizando qualquer um do métodos de solução de sistemas de equações lineares aprendidos na quarta unidade de aprendizado (UA4), encontramos facilmente os valores de a = 2,3193, b = -0,1207 e c = 3,4266. Logo o modelo de segunda ordem que melhor ajusta os dados é: y = 2,3193∙x2 - 0,1207∙x + 3,4266 c) Substituindo os valores para cálculo de r do item a e resolvendo temos: Para o cálculo de r do item b utilizaremos o valor médio de y ( 84) e os coeficientes a = 2,3193, b = -0,1207 e c = 3,4266 calculados para criar a tabela abaixo: x y 0 0 7056 11,7416 1 6 6084 0,1405 2 12 5184 0,2138 3 30 2916 36,7454 4 40 1936 0,0028 5 65 361 17,5930 6 92 64 33,6725 7 100 256 263,3285 8 150 4356 0,8032 9 189 11025 1,4487 10 240 24336 34,2272 55 924 63574 399,9171 A partir dos dados acima calculamos o coeficiente de determinação pela fórmula abaixo: O coeficiente de correlação é a raiz quadrada do coeficiente de determinação, então: Portanto o ajuste dos dados com a função polinomial de segunda ordem foi melhor pois apresentou um valor mais próximo de 1 (um). No Quadro 1 temos os comandos em Octave para executar todos os cálculos acima. Quadro 1 - Código escrito em Octave para todos os cálculos. 1- 2- 3- 4- 5- 6- 7- 8- 9- 10- 11- 12- clear all %% limpa todas as variaveis x = [0 1 2 3 4 5 6 7 8 9 10] y = [0 6 12 30 40 65 92 100 150 189 240] n = 11 %% Item A - calculos para ajuste da funcao de primeira ordem a1 = (n*sum(x.*y) - sum(x)*sum(y)) / (n*sum(x.^2) - (sum(x))^2) b1 = mean(y) - a1*mean(x) %% ItemB calculos para ajuste da funcao de segunda ordem %% criando a matriz de coeficientes A 13- 14- 15- 16- 17- 18- 19- 20- 21- 22- 23- 24- 25- 26- 27- 28- 29- 30- 31- 32- 33- 34- 35- 36- 37- 38- 39- 40- 41- 42- 43- 44- A = [ ]; A(1,1) = n A(1,2) = sum(x) A(1,3) = sum(x.^2) A(2,1) = sum(x) A(2,2) = sum(x.^2) A(2,3) = sum(x.^3) A(3,1) = sum(x.^2) A(3,2) = sum(x.^3) A(3,3) = sum(x.^4) %% criando a matriz coluna B B = [sum(y); sum(x.*y); sum(x.^2.*y)] %% resolvendo o sistema com o Octave e determinando os coeficientes C = A\B; a2 = C(3) b2 = C(2) c2 = C(1) %% Item C - calculo dos coeficientes de correlacao dos itens A (ra) e B (rb) ra = (n*sum(x.*y) - sum(x)*sum(y)) / (sqrt((n*sum(x.^2) - (sum(x))^2))*sqrt((n*sum(y.^2) - (sum(y))^2))) desvios1 = (y - mean(y)).^2; desvios2 = (y - (a2*x.^2 + b2*x + c2)).^2; rb =sqrt((sum(desvios1) - sum(desvios2 ))/(sum(desvios1 ))) d) Os comandos em GNU Octave para criar o gráfico contendo os dados e a curva de ajuste estão no Quadro 2: Quadro 2 - Comandos no Octave para criar o gráfico a partir da linha de comando >> ya = a2*x.^2 + b2*x + c2; >> figure(1), plot(x, y, ' * '); hold on; plot(x, ya); Antes de usar os comandos acima certifique-se de que as variáveis x, y e os coeficiente a2, b2 e c2 estão no ambiente de trabalho. Inserindo os comandos acima nas linhas 43 e 44 do código (sem os sinais “>>”), estes serão executados logo após os cáculos.
Compartilhar