Relatorio1 Busca Unidimensional

17
Universidade Estadual de Campinas FACULDADE DE ENGENHARIA ELÉTRICA E COMPUTAÇÃO Otimização Não-Linear BUSCA LINEAR: MÉTODOS PARA BUSCA UNIDIMENSIONAL Autor: Tiago Agostinho de Almeida

Transcript of Relatorio1 Busca Unidimensional

Page 1: Relatorio1 Busca Unidimensional

Universidade Estadual de Campinas FACULDADE DE ENGENHARIA ELÉTRICA E COMPUTAÇÃO

Otimização Não-Linear

BUSCA LINEAR: MÉTODOS PARA

BUSCA UNIDIMENSIONAL

Autor: Tiago Agostinho de Almeida

Page 2: Relatorio1 Busca Unidimensional

INTRODUÇÃO Considere o seguinte problema irrestrito:

minimizar ƒ(x), x Є Rn

Muitos algoritmos de otimização irrestrita assumem a seguinte estrutura geral: Escolha ε > 0, xo e faça k = 0 while ε≥∇ ||)(|| kxf

1: Encontre dk Є Rn tal que 0)( <∇ kTk dxf2: Determine )(minarg: 0

kkk dxf αα α += >

3: Faça e k:= k + 1 kk

kk dxx α+=+ :1

end x* = xk

Notas

1. No passo 1 determina-se uma direção de descida. A condição garante que decresce na direção d

0)( <∇ kTk dxff k a partir de xk para 0>α

2. No passo 2 é realizada um busca linear para encontrar o tamanho do passo kα que minimiza na direção df k a partir de xk

3. No passo 3 um novo ponto é calculado. O critério de parada é (idealmente, )

ε<∇ ||)(|| kxf0||)(|| =∇ kxf

Exemplo No método do gradiente, se , então é tal que

e a busca linear assume a forma ε≥∇ ||)(|| kxf )(: kk xfd −∇=

0)( <∇ kk dxf T

))((minarg: 0

kkk xfxf

k∇−= > αα α

Existem vários métodos para encontrar o valor de , dois deles foram abordados e testados neste trabalho,

eles são: o Método da Falsa Posição e o Método da Seção Áurea. ))((minarg: 0

kkk xfxf

k∇−= > αα α

Page 3: Relatorio1 Busca Unidimensional

MÉTODO DA FALSA POSIÇÃO Dada uma função , o método da falsa posição procura encontrar um tamanho de passo

)(xfα tal que em uma determinada direção d. Em

primeiro lugar, devemos encontrar a direção d para “caminharmos” de tal forma que melhore o valor da função objetivo. Então, como sabemos que o gradiente da função indica a direção de máximo crescimento, se queremos minimizar devemos caminhar na direção contrária ao gradiente, sendo assim indica a direção de máximo decrescimento da função na direção d.

)(minarg: 0kk

k dxf αα α += >

)(xf)(: kk xfd −∇=

Partindo de um ponto inicial x0 damos um passo α na direção de tal forma que e encontraremos um novo ponto x

)(: kk xfd −∇=)(minarg: 0

kkk dxf αα α += >

1 := x0 + α d que melhorará o valor da função . )(xf

Analisando o gráfico da função formado pela variação de )(xf α obtemos:

A inclinação de em um determinado ponto )(xf α pode ser obtido pela seguinte relação:

ddxfa T).(:)( 0 αα +∇=

Page 4: Relatorio1 Busca Unidimensional

A esta inclinação chamamos de derivada direcional de em relação à )(xf α . Assim sendo, o método de Falsa Posição pode ser resumido nas seguintes etapas: Dado x0 e um critério de parada ε , fazer: 1. ; // direção de descida )(xfd −∇= 2. ;0=nα // passo inicial igual a zero 3. // derivada direcional inicial ddxfdd T

nn )( 0 α+∇=

4. 1.01 =+nα ; // dando um pequeno passo na direção d 5. ; // encontrando valor da derivada direcional para ddxfdd T

nn )( 1

01+

+ +∇= α 1α 6. Enquanto |ddn+1 | > ε faça:

7. 11

1 )(+

++

−−

=∆ nnnn

n

dddddd αα

α ; // calculando valor da variação de α

8. ααα ∆+=+ nn 1 ; // encontrando novo valor de α

9. ; // derivada direcional para ddxfdd Tn

n )( 101

++ +∇= α α n+1

10. Fim Se for uma função quadrática então existe um derivada direcional dd = 0 de tal forma que a convergência do método ocorrerá em apenas duas iterações.

)(xf

Alguns resultados podem ser visualizados na próxima seção.

Page 5: Relatorio1 Busca Unidimensional

RESULTADOS Nesta seção, analisamos duas funções e obtemos vários resultados interessantes. Para a implementação dos algoritmos, bem como para a interpretação gráfica foi utilizada a ferramenta MatLab 6.0, em um PC com processador Atlon 2.0Ghz e 256Mb de memória RAM. Função 1: 2

22

121 ),( xxxxf += O gráfico formado pela função 1 no intervalo [-1,1] é:

Como vemos, a função 1 é quadrática e portanto, independente do ponto x0 que partirmos o método convergirá em duas únicas iterações. Analisando a variação de em relação à )(xf α obtemos:

Page 6: Relatorio1 Busca Unidimensional

Graficamente, percebemos que para α = -1 =18, e que quando aumentamos o valor de

)(xfα o valor de vai decrescendo até )(xf α =0.5 onde =0, e que a partir daí,

conforme aumentamos )(xf

α , o valor de também aumenta. Portanto, baseado nesta análise, deduzimos que = 0.5.

)(xf)(minarg: 0

kkk dxf αα α += >

Utilizando o método de falsa posição obtemos os seguintes resultados.

Teste x0 ε α xn )( nxf Iterações

1 [1 1] 10e-1 0.500000 [0 0] 0 2 2 [1 1] 10e-3 0.500000 [0 0] 0 2 3 [1 1] 10e-6 0.500000 [0 0] 0 2 4 [-1 -1] 10e-3 0.500000 [0 0] 0 2 5 [-0.5 0.5] 10e-3 0.500000 [0 0] 0 2 6 [1 -0.5] 10e-3 0.500000 [0 0] 0 2

Como vemos, independente do ponto de partida x0 o método converge em duas iterações e, como prevíamos por meio da análise gráfica, o valor de

= 0.5. )(minarg: 0kk

k dxf αα α += >

Page 7: Relatorio1 Busca Unidimensional

Função 2: {Função de Rosenbrock) 21

221221 )1()(100),( xxxxxf −+−=

A Função 2 apresenta uma complexidade bem maior que a função 1 pois deixa de ser quadrática e isso faz com que a previsibilidade sobre ela seja menor. O gráfico formado pela função 2 no intervalo [-1 1] é:

Como vemos, a função 2 não é quadrática e, portanto, não podemos prever a quantidade de iterações bem como o valor de , no entanto, analisando o gráfico, percebemos que no ponto x=(1,1) o valor da função é igual a zero. Fica claro, calculando os pontos estacionários onde

)(minarg: 0kk

k dxf αα α += >

0*)( =∇ xf que o ponto x=(1,1) é mínimo da função, portanto, podemos prever que partindo de qualquer ponto x o método de falsa posição nos retornará um novo ponto xn+1 na direção do ponto x*=(1,1). Analisando a variação de em relação à )(xf α obtemos:

Page 8: Relatorio1 Busca Unidimensional

Como podemos ver, partindo de x=(0,0) para nenhum valor de α , = 0. O melhor valor de é aproximadamente igual à 0.777, quando

)(xf)(xf α é aproximadamente

igual à 0.090. Utilizando o método de falsa posição obtemos os seguintes resultados.

Teste x0 ε α xn )( nxf Iterações

1 [0 0] 10e-1 0.072968 [0.145936 0.000000] 0.774783 13 2 [0 0] 10e-3 0.080627 [0.161254 0.000000] 0.771110 16 3 [0 0] 10e-6 0.080631 [0.161262 0.000000] 0.771110 17 4 [-1 -1] 10e-3 0.001564 [0.257184 -0.374535] 19.971568 11 5 [-0.5 0.5] 10e-3 0.002376 [-0.611677 0.381195] 2.602467 6 6 [1 -0.5] 10e-3 0.001613 [0.032216 -0.016108] 0.966004 13 7 [1 1] 10e-3 0.010000 [1.000000 1.000000] 0.000000 1 8 [0.99 0.99] 10e-3 0.001013 [0.993991 0.987994] 0.000036 4 9 [0.99 0.99] 10e-9 0.001013 [0.993991 0.987994] 0.000036 5 10 [0.99 0.99] 10e-14 0.001013 [0.993991 0.987994] 0.000036 6

Page 9: Relatorio1 Busca Unidimensional

Como vemos, partindo do ponto x0 = (0,0) o valor de α tende à 0.900 tornando-se

ais claro conforme aumenta o critério de convergência, pois quando utilizamos m mosε =10e-1, α =0.072968 e )(xf =0.774783 e quando ε =10e-6, α =0.080631 e

= da função.

que para isso seja necessário men

tem um rendimento baixo e uma convergência lenta, pois os passos são muito urtos.

LGORITMO

)(xf 0.771110 melhorando o valo Analisando agora a função 2

122

1221 )1()(100),( xxxxxf −+−= notamos que quanto maior o valor de x

r

2 em relação à x1 maior será o resultado e que quanto mais próximos estiverem x1 e x2 melhor será o valor da função. Fica evidente na tabela acima que o método busca sempre que possível reduzir o valor de x2 omesmau tar x1, porém sempre minimizando o valor de )(xf . Partindo de pontos próximos do mínimo da função o método melhora o valor da função lentamente pois o tamanho do passo calculado é muito pequeno e portanto )(xf reduzirá muito pouco. Isso explica a razão de que o método do gradiente quando aplicado a funções não-quadráticas com certas características quando chega próximo ao mínimo da função c A

itmo para Busca Linear do Método da Falsa Posição programado em atLab 6.0 é:

e: Tiago Agostinho de Almeida RA: 025625

----------------

--------------------------------------------------------------------------

---------- sca Unidimensional

direcional

rdenadas x1 e x2 informadas

o no ponto x(k) cao

O algorM % Universidade Estadual de Campinas % Faculdade de Engenharia Eletrica e de Computacao% Nom% % ---------------------------------------------------------% METODO -> FALSA POSIÇÃO % % LEGENDA: % ---------------------------------------------------------------% BU() = Nome do Metodo = Bu% x1 = coordenada x do ponto x % x2 = coordenada y do ponto x % eps = epsilon, criterio de convergencia da derivada% alfa(k) = tamanho do passo na direcao informada % x(k) = vetor-coluna x formada pelas coo% G = gradiente da funcao no ponto x(k) % dd(k) = derivada direcional da funca% d = direcao que minimiza a fun% deltaalfa = alfa(k+1) - alfa(k) % F = valor da funcao no ponto x(k)

Page 10: Relatorio1 Busca Unidimensional

% -------------------------------------------------------------------------

nction [x,y,z] = BU();

pando tela e inicializando as variaveis ;

lc;

ncao

DADOS INICIAIS ***');

); Opcao numero: ');

ps = input('Informe criterio de parada (epsilon): ');

m as coordenas informadas

lfa1 = 0.01; % Tamanho do passo seguinte

do o valor do gradiente para a funcao escolhida

x0(1); 2*x0(2)];

G = [-400*x0(1)*(x0(2)-(x0(1)^2)) - 2*(1-x0(1)); 200*(x0(2)-(x0(1)^2))]; nd

irecional

x para alfa = 0.01 1 = x0 + alfa1*d;

nte para o novo x

x1(1); 2*x1(2)];

G = [-400*x1(1)*(x1(2)-(x1(1)^2)) - 2*(1-x1(1)); 200*(x1(2)-(x1(1)^2))];

% Inicio fu % Limclearc % Fornecendo o ponto inicial e a fufprintf('\n'); fprintf('\n***fprintf('\n'); fprintf('\nEscolha uma das funcoes abaixo:'); fprintf('\n[1] - f1 = x1^2 + x2^2 ......................'); fprintf('\n[2] - f2 = 100*(x2-x1^2)^2 + (1-x1)^2 .......'op = input('\nfprintf('\n'); x1 = input('Informe a coordenada inicial para x1: '); x2 = input('Informe a coordenada inicial para x2: '); e % Dados iniciais x0 = [x1; x2]; % Montando o vetor x coalfa0 = 0; % Tamanho do passo inicial a % Calculanswitch op case {1} G = [2* case {2} e d = -G; %Direcao d % Derivada Ddd0 = G'*d; % Calculando novox % Grandieswitch op case {1} G = [2* case {2}

Page 11: Relatorio1 Busca Unidimensional

end

irecional para o alfa1 d1 = G'*d;

ont = 1; % Contador de iteracoes

r o tamanho do passo (alfa1)

1000 % Solucionando o problema do loop infinito eak

Calculando deltaalfa = alfa2 - alfa1

vo tamanho do passo

do o Gradiente para o novo x

x1(1); 2*x1(2)];

= [-400*x1(1)*(x1(2)-(x1(1)^2)) - 2*(1-x1(1)); 200*(x1(2)-(x1(1)^2))]; end

derivada direcional anterior direcional

contador de iteracoes nt = cont + 1;

nd

Funcao

1)^2 + x1(2)^2;

F = 100*(x1(2)-x1(1)^2)^2 + (1-x1(1))^2; nd

resultados

ESULTADO FINAL ***');

1(1),x1(2)); da Funcao f(x1,x2): %f \n', F);

rintf(1,' \n');

% Derivada dd c % Loop para encontrawhile abs(dd1) > eps if cont >= br end deltaalfa = (dd1*(alfa1-alfa0))/(dd0-dd1); % alfa0 = alfa1; % Atribuindo alfa1 em alfa0 alfa1 = alfa1 + deltaalfa; % Calculando no x1 = x0 + alfa1*d; % Calculando novo x % Calculan switch op case {1} G = [2* case {2} G dd0 = dd1; % Atribuindo derivada direcional nova em dd1 = G'*d; % Calculando nova derivada % Incrementando coe % Valor daswitch op case {1} F = x1( case {2} e % Exibindo os fprintf(1,' \n'); fprintf(1,'*** Rfprintf(1,' \n'); fprintf(1,'%d iteracoes \n',cont); fprintf(1,'Tamanho do passo (alfa1) = %f \n',alfa1); fprintf(1,'Ponto final X(x1,x2) = X(%f,%f) \n',xfprintf(1,'Valorfp

Page 12: Relatorio1 Busca Unidimensional

MÉTODO DA SEÇÃO ÁUREA

O Método da Seção Áurea utiliza um esquema de redução do intervalo de incerteza

baseado na razão áurea. A Razão Áurea ( 618.02

≅=r 51±− ) era considerada na

m inAntigüidade como a mais estética para os lados de um retângulo. Dados u tervalo de incerteza I =[a,b], um critério de convergênciaε e uma função do tipo )(αf , o método da Seção Áurea realiza a redução do intervalo I a uma taxa de redução igual a razão áurea (r) até que o critério de convergência seja satisfeito. Do

intervalo rest =[a’,b’] o valor de ante I’ α é obtido pela relação 2

'' ab +=α .

Quando utilizamos um critério de convergência pequeno, como 610− por exemplo, provavelmente o valor de α obtido pelo método de Seção Áurea será ual (ou próximo)

o valor obtido pelo método de Falsa Posição.

ESULTADOS

igd R

a Seção Áurea foi testado para as duas funções utilizadas para o Método a Falsa Posição:

2 – Função 2 : {Função de Rosenbrock)

Os resultados obtidos para a Função 1 utilizando o Intervalo I foram:

O Método dd

22

2121 ),( xxxxf += 1 – Função 1 :

21

221221 )1()(100),( xxxxxf −+−=

Teste x0 I ε α xn )( nxf Iterações

1 [1 1] [0 1] 10e-1 0.500000 [0.000000 0.000000] 0 1 2 [1 1] [0 1] 10e-3 0.497488 [0.005025 0.005025] 0.000051 11 3 [1 1] [0 1] 10e-6 0.500000 [0.000000 0.000000] 0 25 4 [-1 -1] [0 1] 10e-6 0.500000 [0.000000 0.000000] 0 25 5 [-0.5 0.5] [0 1] 10e-6 0.500000 [0.000000 0.000000] 0 25 6 [1 -0.5] [0 1] 10e-6 0.500000 [0.000000 0.000000] 0 25

Page 13: Relatorio1 Busca Unidimensional

No teste nº 1, utilizamos um critério de convergência relativamente grande e por causa disso o intervalo nem chegou a ser reduzido, e, como sabemos que o método utiliza a

metade do intervalo como α (2

'' ab +=α ), o resultado por mero acaso deu que α =0.5, que

corresponde ao em apenas uma iteração, porém é válido ressaltar que este resultado só foi obtido por mero acaso, pois foi coincidência

)(minarg: 0kk

k dxf αα α += >

α estar localizado exatamente na metade do intervalo inicial.

No teste nº 2 aumentamos o valor de ε e notamos que o valor de α chegou próximo do valor obtido pelo método da falsa posição. “Apertando” um pouco mais o critério de convergência, como no teste nº 3 o método da Seção Áurea obteve o mesmo valor do α obtido pela Falsa Posição. Como a análise gráfica foi realizada antes da implementação, podemos perceber que o método retornou o valor esperado e teve um comportamento adequado.

Os testes seguintes provam que partindo de um mesmo ponto inicial e utilizando um critério de convergência adequado, o Método de Seção Áurea encontra um

igual ao encontrado pelo Método de Falsa Posição. )(minarg: 0kk

k dxf αα α += >

Fica claro que para funções quadráticas o Método da Falsa Posição converge mais rápido que o Método da Seção Áurea, pois o número de iterações utilizadas por esta é bem maior que as duas iterações necessárias para a convergência pelo cálculo da derivada direcional.

Os resultados obtidos pela Função 2 utilizando o Intervalo I foram:

Teste x0 I ε α xn )( nxf Iterações

1 [0 0] [0 1] 10e-1 0.500000 [1.000000 0.000000] 100.00000 1 2 [0 0] [0 1] 10e-3 0.081080 [0.162159 0.000000] 0.771123 11 3 [0 0] [0 1] 10e-6 0.080628 [0.161257 0.000000] 0.771110 25 4 [-1 -1] [0 1] 10e-6 0.001562 [0.256214 -0.375018] 19.971652 25 5 [-0.5 0.5] [0 1] 10e-6 0.002377 [-0.611733 0.381135] 2.602469 25 6 [1 -0.5] [0 1] 10e-6 0.001613 [0.032226 -0.016113] 0.966004 25 7 [1 1] [0 1] 10e-6 0.000005 [1.000000 1.000000] 0.000000 25 8 [0.99 0.99] [0 1] 10e-3 0.004065 [1.006019 0.981951] 0.090778 11 9 [0.99 0.99] [0 1] 10e-6 0.001012 [0.993988 0.987996] 0.000036 25 10 [0.99 0.99] [0 1] 10e-9 0.001013 [0.993991 0.987994] 0.000036 40

Como havíamos analisado graficamente, sabemos que partindo do ponto x = [0 0] é aproximadamente igual à 0.09 e é aproximadamente

igual à 0.77. No teste nº 1 o resultado obtido foi bastante insatisfatório pois o valor de )(minarg: 0

kkk dxf αα α += > )(xf

ε utilizado foi muito inadequado, isso fica claro analisando-se os dois testes subseqüentes em que reduzimos ε e conseguimos obter resultados muito próximos daqueles que prevíamos e que obtivemos pelo método da falsa posição.

Page 14: Relatorio1 Busca Unidimensional

Observamos no teste nº 7 que quando partimos do ponto x* = [1 1] o resultado obtido foi satisfatório, porém o número de iterações utilizadas (i = 25) foi muito além do número utilizado pelo método da Falsa Posição (i = 1). Isso mostra que quando estamos próximo do ponto ótimo o método da Seção Áurea tem um desempenho menor que o método da Falsa Posição se utilizarmos o mesmo critério de convergência. Isso fica claro nos 3 últimos testes, no qual partimos de um ponto próximo do ótimo e aumentamos o valor de ε gradativamente. Como podemos ver, os dois métodos apresentaram resultados satisfatórios e muito coincidentes com os quais estamos esperando. ALGORITMO

O algoritmo para Busca Linear do Método da Seção Áurea programado em MatLab 6.0 é: % Universidade Estadual de Campinas % Faculdade de Engenharia Eletrica e de Computacao % Nome: Tiago Agostinho de Almeida RA: 025625 % % ------------------------------------------------------------------------------- % METODO -> BUSCA UNIDIMENSIONAL - SECAO AUREA %-------------------------------------------------------------------------------- % LEGENDA: % ------------------------------------------------------------------------------- % SAurea() = Nome do Metodo = Secao Aurea % r = razao aurea =~ 0,618 % x1, x2 = ponto inicial x (x1,x2) % I1 = ponto inicial do intervalo I % I2 = ponto final do intervalo I % eps = epsilon, criterio de convergencia da derivada direcional % alfa = razao aurea dada por x1 + (1-r)*(x2-x1) % beta = razao aurea dada por x1 + r*(x2-x1) % xna = valor do novo x para um deslocamento alfa % xnb = valor do novo x para um deslocamento beta % y1 = valor da funcao para xna % y2 = valor da funcao para xnb % F = valor da funcao final obtida pelo metodo % -------------------------------------------------------------------------

Page 15: Relatorio1 Busca Unidimensional

% Inicio function result = SAurea(); % Limpando tela e inicializando as variaveis clear; clc; % Fornecendo o ponto inicial e a funcao fprintf('\n'); fprintf('\n*** DADOS INICIAIS ***'); fprintf('\n'); fprintf('\nEscolha uma das funcoes abaixo:'); fprintf('\n[1] - f1 = x1^2 + x2^2 ......................'); fprintf('\n[2] - f2 = 100*(x2-x1^2)^2 + (1-x1)^2 .......'); op = input('\nOpcao numero: '); fprintf('\n'); x1 = input('Informe o ponto x1: '); x2 = input('Informe o ponto x2: '); I1 = input('Informe o ponto inicial do intervalo (a): '); I2 = input('Informe o ponto final do intervalo (b): '); eps = input('Informe criterio de parada (epsilon): '); % Dados iniciais x = [x1;x2]; r = (sqrt(5)-1)/2; I = [I1; I2]; % Montando o vetor x com as coordenas informadas alfa = I1 + (1-r)*(I2-I1); beta = I1 + r*(I2-I1); % Calculando o valor da funcao y1 para alfa e y2 para beta switch op case {1} G1 = [2*x(1);2*x(2)]; %Valor do gradiente no ponto x d1 = -G1; %Direcao de descida xna = x + alfa*d1; %Valor do novo x para deslocamento alfa xnb = x + beta*d1; %Valor do novo x para deslocamento beta y1 = xna(1)^2 + xna(2)^2; %Valor da funcao para x com deslocamento alfa y2 = xnb(1)^2 + xnb(2)^2; %Valor da funcao para x com deslocamento beta case {2} G2 = [-400*x(1)*(x(2)-(x(1)^2)) - 2*(1-x(1)); 200*(x(2)-(x(1)^2))]; %Valor do gradiente no ponto x d2 = -G2; %Direcao de descida xna = x + alfa*d2; %Valor do novo x para deslocamento alfa xnb = x + beta*d2; %Valor do novo x para deslocamento beta y1 = 100*(xna(2)-xna(1)^2)^2 + (1-xna(1))^2; y2 = 100*(xnb(2)-xnb(1)^2)^2 + (1-xnb(1))^2; end

Page 16: Relatorio1 Busca Unidimensional

cont = 1; % Contador de iteracoes % Loop para encontrar o tamanho do passo (alfa) while (I2-I1) > eps if cont >= 1000 % Solucionando o problema do loop infinito break end if y1>y2 I1 = alfa; alfa = beta; y1 = y2; beta = I1 + r*(I2-I1); switch op case {1} xnb = x + beta*d1; y2 = xnb(1)^2 + xnb(2)^2; case {2} xnb = x + beta*d2; y2 = 100*(xnb(2)-xnb(1)^2)^2 + (1-xnb(1))^2; end else I2 = beta; beta = alfa; y2 = y1; alfa = I1 + (1-r)*(I2-I1); switch op case {1} xna = x + alfa*d1; y1 = xna(1)^2 + xna(2)^2; case {2} xna = x + alfa*d2; y1 = 100*(xna(2)-xna(1)^2)^2 + (1-xna(1))^2; end end % Incrementando contador de iteracoes cont = cont + 1; end alfa = (I2+I1)/2; % Valor da Funcao switch op case {1} xna = x + alfa*d1; F = xna(1)^2 + xna(2)^2;

Page 17: Relatorio1 Busca Unidimensional

case {2} xna = x + alfa*d2; F = 100*(xna(2)-xna(1)^2)^2 + (1-xna(1))^2; end % Exibindo os resultados fprintf(1,' \n'); fprintf(1,'*** RESULTADO FINAL ***'); fprintf(1,' \n'); fprintf(1,'%d iteracoes \n',cont); fprintf(1,'Tamanho do passo (alfa1) = %f \n',alfa); fprintf(1,'Ponto Final X(x1,x2) = X(%f,%f) \n',xna(1),xna(2)); fprintf(1,'Intervalo Final I(I1,I2) = I(%f,%f) \n',I1,I2); fprintf(1,'Valor da Funcao f(x1,x2): %f \n', F); fprintf(1,' \n');