Você está na página 1de 18

Questo 1 Mtodo de Newton fminbnd (Solver do matlab) 1,4310 Sada de Resultados ---Mtodo de Newton para Otimizao--Estimativa inicial = 1.

5 O valor timo = 1.4310 No timo, o valor da funo = 5.2384e+000 Nmero de interaes = 7 valor da derivada segunda no ponto timo = 31.3333 >> fminbnd(@model_newton, 0.5, 2.5) ans = 1.4310 Newton 1,4310 7 Iteraes

Mtodo da Seco Dourada Seco Dourada fminbnd (Solver do matlab) 1,4310 1,4310 19 Iteraes Sada de Resultados - Matlab ---Mtodo da Seco Dourada--Extremo inferior = 0.5 Extremo superior = 2.5 Valor timo = 1.4310 Nmero de interaes = 19 >> fminbnd(@sec_dour_otim_model, 0.5, 2.5) ans = 1.4310

Mtodo da Interpolao Polinomial Quadrtica Interpolao Quadrtica fminbnd (Solver do matlab) No converge 1,4310 501 Iteraes Sada de Resultados - Matlab ---Mtodo da Interpolao Quadrtica Sucessiva--Estimativa Inicial = 1 Valor otimo = 9.7712 Nmero de interaes = 501

>> fminbnd(@interp_quadr_suces_model, 0.5, 2.5) ans = 1.4310

Questo 2 - A figura abaixo representa um trocador de calor em contra-corrente, onde uma corrente de processo com vazo W1 = 1000 kg / h e temperatura T1 = 200 C resfriada a T2 = 100 C por uma corrente fria a t2 = 60 C. Usando os mtodo citados no problema 1, calcular a vazo tima W2 do refrigerante (kg / h) bem como a rea de troca trmica tima A (m2). Considerar Cp = 1 kcal / kg C para as duas correntes e U = 500 kcal / h m2 C. Investimento do trocador de calor: 3200 (A / 50)0,48 $; Custo do refrigerante: 5 x 10-6 $ / kg; Custo de manuteno: 2 % do investimento / ano; Tempo de operao: 8640 h / ano; Critrio de desempenho: custo anual = 50 % custo Operacional + 10 % ao ano sobre o investimento.

Para determinar a vazo de refrigerante tima e a rea de troca trmica tima implementando os mtodos da Seco Dourada e interpolao Quadrtica no Matlab necessrio analisar o problema fisicamente, observando o fenmeno que est ocorrendo no trocador de calor, os custos de operao e o investimento que este trocador requer. Diante dos dados fornecidos podemos escrever a seguinte expresso, ( ) [ ]

Logo, a partir do critrio de desempenho e das equaes acima podemos escrever a funo a ser minimizada, [ ( ) ] [ ( ) ]

Precisamos agora expressar o fluxo de refrigerante e a rea de troca trmica em termos das temperaturas de entrada e sada do trocador de calor, para o fluido quente e o fluido de refrigerao. Considerando que no ocorrer mudana de fase podemos escrever a carga trmica como,

A carga trmica pode ser calcula uma vez que o fluxo de fluido quente conhecido, a temperatura de entrada e sada, e a capacidade calorfica do fluido quente.

Esta expresso pode ser escrita para o fluido refrigerante,

Nesta expresso so conhecidos apenas a capacidade calorfica e a temperatura de sada do fluido refrigerante. Deste modo, podemos escrever,

A carga trmica do trocador de calor pode, tambm, ser escrita como,

Onde,

dado por,

( Sendo e .

Deste modo, escreveu-se as expresses da rea de troca trmica e do fluxo de refrigerante em termos de uma nica varivel, a temperatura de entrada do fluido refrigerante. E esta ser a varivel a ser otimizada para, consequentemente, otimizar o custo de operao, minimizando o custo total deste trocador de calor. Com estas expresses e os dados fornecidos, pode-se ento otimizar este problema utilizando mtodos numricos no Matlab.

Mtodo da Seco Dourada Programa Principal


clear all; clc; global A W2 disp('--- Mtodo da Seco Dourada ---') xlow = input ('Extremo inferior = '); xupp = input ('Extremo superior = '); [otimo iter] = sec_dour_otim(@sec_dour_otim_model, xlow, xupp); fprintf('\n Valor timo da temperatura = %10.4f \n', otimo) fprintf ('\n Valor timo da rea = %10.4f \n', A) fprintf ('\n Valor timo da vazo do fluido refrigerante = %10.4f \n', W2)

fprintf('\n Nmero de interaes = %3i\n', iter)

Modelo Mtodo da Seco Dourada


function [xotimo it] = sec_dour_otim(func, low, upp) it = 0; tal = (sqrt(5) - 1)/2; d = tal*(upp - low); x1 = upp - d; x2 = low + d; f1 = func(x1); f2 = func(x2); while it <= 500 it = it +1; if f2 > f1 upp = x2; x2 = x1; f2 = f1; d = tal*(upp-low); x1 = upp - d; f1 = func(x1); else low = x1; x1 = x2; f1 = f2; d = tal*(upp-low); x2 = low + d; f2 = func(x2); end if abs(f1-f2) <= 1e-8 xotimo = x2; % ou xotimo = x1 return end end xotimo = x2; % ou xotimo = x1 disp('Nmero mximo de iteraes');

Parmetros
function fobj = sec_dour_otim_model(x) global A W2 T1 = 200; T2 = 100; t2 = 60; W1 = 1000; Cp = 1; U = 500; t1 = x; modulo_Q = abs(W1*Cp*(T2-T1));

deltaA = T1 - t1; deltaB = T2 - t2; MLDT = (deltaA - deltaB)/log(deltaA/deltaB); A = modulo_Q/(U*MLDT); W2 = modulo_Q/ (Cp*(t1-t2)); parte_1 = W2*5e-6*8640 + (0.02*3200*(A/50)^0.48); parte_2 = 3200*(A/50)^0.48; fobj = 0.5*parte_1 + 0.1*parte_2;

Sada de Resultados
--- Mtodo da Seco Dourada --Extremo inferior = 60 Extremo superior = 200 Valor timo da temperatura = 133.3957 Valor timo da rea = 3.8331 Valor timo da vazo do fluido refrigerante = 1362.4781 Nmero de interaes = 22 >> fminbnd(@sec_dour_otim_model, 60, 200) ans = 133.3949

Mtodo da Interpolao Quadrtica Programa Principal


clear all; clc; global A W2 disp('---Mtodo da Interpolao Quadrtica Sucessiva---') x0 = input('Estimativa inicial = '); [otimo iter] = interp_quad_suces_mikarla(@interp_quad_suces_model, x0); fprintf ('\n Valor timo da temperatura = %10.4f \n', otimo) fprintf ('\n Valor timo da rea = %10.4f \n', A) fprintf ('\n Valor timo da vazo de fluido refrigerante = %10.4f \n', W2) fprintf ('\n Nmero de iteraes =%10.4f \n', iter)

Modelo Mtodo da Interpolao Quadrtica


function [xotimo it] = interp_quad_suces_mikarla(func, x0)

it = 0; f0 = func(x0); delta = 1; x1 = x0 + delta; f1 = func(x1); if f0 > f1 x2 = x1 + 2*delta; f2 = else x2 = x0 - delta; f2 = func(x2); end while it <= 500 it = it + 1; if it > 1 f0 = func(x0); f1 = func(x1); f2 = func(x2); end f = [f0 f1 f2]; x = [x0 x1 x2]; [menorf, menorx] = min (f); [~, maiorx] = max(f); aux1 = (x1^2 - x2^2)* f0 + (x2^2 - x0^2)*f1 + (x0^2-x1^2)*f2; aux2 = (x1-x2)*f0 + (x2-x0)*f1 + (x0-x1)*f2; xaster = 0.5*aux1/aux2; faster = func(xaster); if abs(faster-menorf) <= 1e-8 xotimo = xaster; return end x0 = x(menorx); x1 = xaster; x2 = x(maiorx); func(x2);

xotimo = xaster; end

Parmetros
function f = interp_quad_suces_model(x) global A W2 T1 = 200; T2 = 100; t2 = 60; W1 = 1000; Cp = 1; U = 500; t1 = x; modulo_Q = abs(W1*Cp*(T2-T1));

deltaA = T1 - t1; deltaB = T2 - t2; MLDT = (deltaA - deltaB)/log(deltaA/deltaB); A = modulo_Q/(U*MLDT); W2 = modulo_Q/ (Cp*(t1-t2)); parte_1 = W2*5e-6*8640 + (0.02*3200*(A/50)^0.48); parte_2 = 3200*(A/50)^0.48; f = 0.5*parte_1 + 0.1*parte_2;

Sada de Resultados ---Mtodo da Interpolao Quadrtica Sucessiva--Estimativa inicial = 100 Valor timo da temperatura = 133.3946 Valor timo da rea = 3.8331 Valor timo da vazo de fluido refrigerante = 1362.4990 Nmero de iteraes = 16.0000 >> fminbnd(@interp_quad_suces_model, 60, 200) ans = 133.3949

Questo 4 - Em uma planta qumica, o custo da tubulao, incluindo o comprimento e o bombeamento, significativamente relevante. Considere o projeto de uma tubulao de comprimento L (ft) que dever transportar determinado fluido a uma vazo Q (gpm). Se o valor timo do D (in) obtido pela minimizao do custo anual, que pode ser dada pela equao abaixo, calcular esse valor para L = 1000 ft e Q = 20 gpm. O dimetro timo deve estar entre 0.25 e 6 in. Resolver o problema usando os Mtodos da Bisseco e da Seco Dourada e comparar o desempenho desses.
f 0.45L 0.245LD1.5 325(hp)0.5 61.6(hp)0.925 102 onde hp 4.4 x108 LQ3 LQ2.68 1.92 x10 9 4.68 D5 D

Substituindo o valor de L e Q na funo dada obtemos,

0,352 5,889272056 x10 3 hp D5 D 4.68


f 450 245 D1.5 325 (hp) 0.5 61 .6(hp) 0.925 102

Estas sero as equaes utilizadas em cada mtodo. Mtodo da Seco Dourada Programa Principal
clear all; clc; disp('---Mtodo da Seco Dourada---') xlow = input('Extremo inferior = '); xupp = input('Extremo superior = '); [otimo iter] = sec_dour_otim_josi(@sec_dour_otim_model, xlow, xupp); fprintf('\n Valor timo do dimetro interno = %10.4f \n', otimo) fprintf('\n Nmero de iteraes =%10.4f \n', iter)

Modelo Mtodo da Seco Dourada


function [xotimo it] = sec_dour_otim_josi(func, low, upp) it = 0; tal = (sqrt(5) - 1)/2; d = tal*(upp - low); x1 = upp - d; x2 = low + d;

f1 = func(x1); f2 = func(x2); while it <= 500 it = it +1; if f2 > f1 upp = x2; x2 = x1; f2 = f1; d = tal*(upp-low); x1 = upp - d; f1 = func(x1); else low = x1; x1 = x2; f1 = f2; d = tal*(upp-low); x2 = low + d; f2 = func(x2); end if abs(f1-f2) <= 1e-8 xotimo = x2; % ou xotimo = x1 return end end xotimo = x2; % ou xotimo = x1 disp('Nmero mximo de iteraes');

Parmetros
function f = sec_dour_otim_model(x) D = x; hp = (0.352/D^5)+((5.889272056e-03)/D^4.68); f = 450 + 245*D^15 + 325*(hp^0.5)+61.6*(hp^0.925)+102;

Sada de Resultados ---Mtodo da Seco Dourada--Extremo inferior = 0.25 Extremo superior = 6 Valor timo do dimetro interno = 0.9035 Nmero de iteraes = 27.0000 >> fminbnd(@sec_dour_otim_model, 0.25, 6) ans = 0.9035

Mtodo da Bisseo Programa Principal Modelo Mtodo da Seco Dourada Parmetros Sada de Resultados

Questo 5 - Usando os mtodo citados na Questo 1, resolver o Problema 5.12 do livro do Himmelblau: O custo total anual de operao de uma bom dada pela seguinte expresso:

Encontre o tamanho do motor que minimiza o custo total anual. Para determinar o intervalo provvel de conter o valor timo buscado plotou-se um grfico de x versus f(x), fazendo o vetor x variar num comprimento em que pudesse ser notada claramente, o ponto de mnimo desta funo. O grfico plotado segue abaixo.

Grfico geral

Destaque para a regio onde se encontra o mnimo

Figura XX. Grficos ilustrando os intervalos que contm o mnimo da funo.

Da anlise do grfico observa-se que o mnimo da funo est no intervalo de 20 a 100. Este foi o intervalo, mnimo e mximo, utilizado nos mtodos numricos para obteno do valor mnimo da funo, ou menor custo anual. Intervalo da funo que contm o mnimo : 20 < x < 100 Mtodo de Newton A funo que representa o custo com o equipamento mencionado ,

Clculo da primeira derivada da funo,

Clculo da segunda derivada da funo,

Utilizando estas equaes no Mtodo de Newton implementado no Matlab obteve-se os seguintes arquivos .m. Programa Princical
clear all; clc; disp('---Mtodo de Newton para Otimizao---') x0 = input('Estimativa inicial = '); [otimo fval iter] = josiane_newton(@model_newton, x0); fprintf('\n o valor timo = %10.4f \n', otimo) fprintf('\n No timo, o valor da funo = %10.4e \n', fval) fprintf('\n Nmero de interaes = %3i\n', iter)

Modelo Newton Raphson


function [xotimo fobj it] = josiane_newton(func, xini) xold = xini; it = 0; while it <= 100 % nmero mximo de uso da frmula de Newton it = it + 1; [f df df2] = func(xold); xnew = xold - df/df2; if abs(xnew-xold) <= 1e-8 [fobj df df2] = func(xnew); xotimo = xnew; break end xold = xnew; end

Parmetros
function [f df df2] = model_newton (x) f = 500 + 0.9*x + (0.03/x)*150000;

df = 0.9 - (4500/x^2); df2 = 9000/x^3; end

Sada de Resultados Janela de comando principal ---Mtodo de Newton para Otimizao--Estimativa inicial = 50 O valor timo = 70.7107 No timo, o valor da funo = 6.2728e+002 Nmero de interaes = 6 Valor da derivada segunda no ponto timo = 0.0255 >> fminbnd(@model_newton, 20, 100) ans = 70.7107

Mtodo da Seco Dourada Programa Princical


clear all; clc; disp('---Mtodo da Seco Dourada---') xlow = input('Extremo inferior = '); xupp = input('Extremo superior = '); [otimo iter] = sec_dour_otim_josi(@sec_dour_otim_model, xlow, xupp); fprintf('\n Valor timo da potncia do motor da bomba = %10.4f \n', otimo) fprintf('Nmero de iteraes = %10.4f \n', iter)

Modelo Seco Dourada


function [xotimo it] = sec_dour_otim_josi(func, low, upp) it = 0; tal = (sqrt(5) - 1)/2; d = tal*(upp - low); x1 = upp - d; x2 = low + d; f1 = func(x1); f2 = func(x2); while it <= 500 it = it +1; if f2 > f1

upp = x2; x2 = x1; f2 = f1; d = tal*(upp-low); x1 = upp - d; f1 = func(x1); else low = x1; x1 = x2; f1 = f2; d = tal*(upp-low); x2 = low + d; f2 = func(x2); end if abs(f1-f2) <= 1e-8 xotimo = x2; % ou xotimo = x1 return end end xotimo = x2; % ou xotimo = x1

Parmetros
function f = sec_dour_otim_model(x)

y = x;

f = 500 + 0.9*y + (4500/y);

Sada de Resultados Janela de comando principal ---Mtodo da Seco Dourada--Extremo inferior = 20 Extremo superior = 100 Valor timo da potncia do motor da bomba = 70.7114 Nmero de iteraes = 21.0000 >> fminbnd(@sec_dour_otim_model, 20, 100) ans = 70.7107

Mtodo da Interpolao Quadrtica Programa Princical


clear all; clc;

disp('--Mtodo da Interpolao Quadrtica Sucessiva--') x0 = input('Estimativa inicial = '); [otimo iter] = interp_quad_suces_monica(@interp_quad_suces_model, x0); fprintf('\n Valor timo = %10.4f \n', otimo) fprintf('\n Nmero de interaes = %10.4f\n', iter)

Modelo Interpolao Quadrtica


function [xotimo it] = interp_quad_suces_monica(func, x0) it = 0; f0 = func(x0); delta = 1; x1 = x0 + delta; f1 = func(x1); if f0 > f1 x2 = x0 + 2*delta; f2 = func(x2); else x2 = x0 - delta; f2 = func(x2); end while it <= 500 it = it +1; if it > 1 f0 = func(x0); f1 = func(x1); f2 = func(x2); end f = [f0 f1 f2]; x = [x0 x1 x2]; [menorf, menorx] = min(f); [~, maiorx] = max(f); aux1 = (x1^2 - x2^2)*f0 + (x2^2-x0^2)*f1 + (x0^2-x1^2)*f2; aux2 = (x1-x2)*f0 + (x2-x0)*f1 + (x0 - x1)*f2; xaster = 0.5*aux1/aux2; faster = func(xaster);

if abs(faster - menorf) <= 1e-8 xotimo = xaster; return end x0 = x(menorx); x1 = xaster; x2 = x(maiorx); end disp('---Nmero mximo de iteraes alnaado---') xotimo = xaster;

Parmetros
function f = interp_quad_suces_model(x) f = 500 + 0.9*x + (4500/x);

Sada de Resultados Janela de comando principal --Mtodo da Interpolao Quadrtica Sucessiva-Estimativa inicial = 60 Valor timo = 70.7104 Nmero de interaes = 9.0000 >> fminbnd(@interp_quad_suces_model, 20, 100) ans = 70.7107

Questo 6 Refazer as questes de 1 a 5, para cada mtodo mencionado no item 1, utilizando a funo fminbnd. A funo fminbnd encontra um nico mnimo de uma funo dentro de um intervalo fixo. x = fminbnd(fun,x1, x2) retorna um valor de x que minimiza a funo no intervalo x1< x <x2. Utilizou-se fminbnd digitando-a na janela de comando principal do Matlab aps simular o mtodo (newton, seco dourada ou interpolao quadrtica). A sintaxe desta funo , fminbnd (Nome do Modelo Usado, Intervalo Inferior, Intervalo Superior) fminbnd(@model_newton, 0.5, 2.5) Onde, 0.5 e 2.5 representam os intervalos para a funo em questo. Esta funo utilizada aps o programa j ter sido simulado e j apresentar resultados.
Podemos dizer que o objetivo da funo fminbnd confirmar a existncia e o valor do valor timo ou valor mnimo obtido atravs dos mtodos utilizados para a determinao destes. Este solver do Matlab utiliza apenas o modelo do proleba, isto , o equacionamento fsico que caracteriza e quantifica o problema em questo. Para sua resoluo esse solver faz a juno de alguns mtodos numricos, inicialmente utiliza o Golden Section e em seguida Interpolao Quadrtica Polinomial Sucessiva, isto faz com que a utilizao do solver fornea um resultado mais preciso e exato. Em cada item anterior na Sada de Dados apresentou-se os valores timos obtidos pelo mtodo e pelo solver do Matlab, fminbnd.