Vous êtes sur la page 1sur 23

Ever Santoro / Wagner de Freitas Ciarelli

Otimizao No Linear - Profa. Dra.


Edma Cssia Baptista
Bauru
2014
Lista de Figuras
2.1 Algoritmo Busca Dicotmica . . . . . . . . . . . . . . . . . . . . . . . . 1
3.1 Segmento ureo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
4.1 Algoritmo Fibonacci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
5.1 Mtodo da Bisseco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
6.1 Mtodo de Newton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Lista de Tabelas
Sumrio
1 Buscas Unidimensionais 1
1.1 Acesso Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2 Busca Dicotmica 1
2.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
2.2 Implementao MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
3 Segmento ureo 1
3.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
3.2 Implementao MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
4 Fibonacci 1
4.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
4.2 Implementao MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
5 Mtodo da Bisseco 1
5.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
5.2 Implementao MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
6 Mtodo de Newton 1
6.1 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
6.2 Implementao MatLab . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
7 Falsa Posio 1
7.1 Acesso Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
8 Ajuste Cbico 1
8.1 Acesso Inicial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
9 Consideraes Finais 2
Captulo 1
Buscas Unidimensionais
1.1 Acesso Inicial
Captulo 2
Busca Dicotmica
2.1 Algoritmo
Figura 2.1: Algoritmo Busca Dicotmica
Captulo 2. Busca Dicotmica 2
2.2 Implementao MatLab
1 clear all;
2 clc;
3
4 % Define x como variavel simbolica
5 syms x
6 k=1;
7
8 % Solicita ao usuario a funcao do problema em funcao de x
9 f = input(Digite a f(x): );
10
11 % Solicita ao usuario as informacoes para rodar o metodo
12 E = input(Digite o valor de Epsilon: );
13 l = input(Digite a precisao de parada l: );
14 a(k) = input(Digite o ponto esquerdo do intervalo em analise: )
;
15 b(k) = input(Digite o ponto direito do intervalo em analise: );
16
17 % Algoritmo e executado ate que o intervalo seja menor que o l
18 while (abs(b(k)-a(k)) >= l)
19
20 lambda(k) = (a(k)+b(k))/2 - E;
21 mi(k) = (a(k)+b(k))/2 + E;
22
23 flambda(k) = subs(f,x,lambda(k));
24 fmi(k) = subs(f,x,mi(k));
25
26 if (flambda(k) <= fmi(k))
27 a(k+1) = a(k);
28 b(k+1) = mi(k);
29 else
30 a(k+1) = lambda(k);
31 b(k+1) = b(k);
32 end
33 k=k+1;
34 end
35
36 fprintf(O intervalo mais proximo da solucao e [%f,%f].\n,a(k),b
(k))
37 fprintf(O ponto de minimo e %f.,(a(k)+b(k))/2)
Captulo 3
Segmento ureo
3.1 Algoritmo
Captulo 3. Segmento ureo 2
Figura 3.1: Segmento ureo
3 3.2. Implementao MatLab
3.2 Implementao MatLab
38 clear all;
39 clc;
40
41 % Define x como variavel simbolica
42 syms x
43 k=1;
44
45 % Define o valor de alfa que e o numero aureo
46 alfa =(5^(1/2) -1)/2
47
48 % Solicita ao usuario a funcao do problema em funcao de x
49 f = input(Digite a f(x): );
50
51 % Solicita ao usuario as informacoes para rodar o metodo
52 l = input(Digite a precisao de parada l: );
53 a(k) = input(Digite o ponto esquerdo do intervalo em analise: )
;
54 b(k) = input(Digite o ponto direito do intervalo em analise: );
55
56
57 % Faz o primeiro calculo de lambda e mi e tambem flambda e
milambda
58 lambda(k) = a(k)+ (1-alfa)*(b(k)-a(k));
59 mi(k) = a(k)+ alfa*(b(k)-a(k));
60
61 flambda(k) = subs(f,x,lambda(k));
62 fmi(k) = subs(f,x,mi(k));
63
64
65 % Algoritmo e executado ate que o intervalo seja menor que o l
66 while (abs(b(k)-a(k)) >= l)
67
68 if (flambda(k) <= fmi(k))
69 a(k+1) = a(k);
70 b(k+1) = mi(k);
71 mi(k+1) = lambda(k);
72 fmi(k+1) = flambda(k);
73 lambda(k+1) = a(k+1)+ (1-alfa)*(b(k+1)-a(k+1));
74 flambda(k+1) = subs(f,x,lambda(k+1));
75
76 else
77 a(k+1) = lambda(k);
78 b(k+1) = b(k);
79 lambda(k+1) = mi(k);
80 flambda(k+1)=fmi(k);
81 mi(k+1) = a(k+1)+ alfa*(b(k+1)-a(k+1));
82 fmi(k+1) = subs(f,x,mi(k+1));
Captulo 3. Segmento ureo 4
83
84 end
85 k=k+1;
86 end
87
88 fprintf(O intervalo mais proximo da solucao e [%f,%f].\n,a(k),b
(k))
89 fprintf(O ponto de minimo e %f.,(a(k)+b(k))/2)
Captulo 4
Fibonacci
4.1 Algoritmo
Figura 4.1: Algoritmo Fibonacci
Captulo 4. Fibonacci 2
4.2 Implementao MatLab
90 clear all;
91 clc;
92
93
94 % Define x como variavel simbolica
95 syms x
96 k=1;
97
98 % Solicita ao usuario a funcao do problema em funcao de x
99 f = input(Digite a f(x): );
100
101 % Solicita ao usuario as informacoes para rodar o metodo
102 l = input(Digite a precisao de parada l: );
103 a(k) = input(Digite o ponto esquerdo do intervalo em analise: )
;
104 b(k) = input(Digite o ponto direito do intervalo em analise: );
105
106 % Gera a sequencia de Fibonacci ate o indice necessario
107 F(1)=1;
108 F(2)=2;
109 j=2;
110 while (F(j) <=((b(k)-a(k))/l))
111 j=j+1;
112 F(j)=F(j-1)+F(j-2)
113 end
114
115 n=j
116
117 % Faz o primeiro calculo de lambda e mi e tambem flambda e
milambda
118 lambda(k) = a(k)+(F(n-2)/F(n))*(b(k)-a(k));
119 mi(k) = a(k)+(F(n-1)/F(n))*(b(k)-a(k));
120
121 flambda(k) = subs(f,x,lambda(k));
122 fmi(k) = subs(f,x,mi(k));
123
124
125 % Algoritmo e executado ate que o intervalo seja menor que o l
126 while (k < n-1)
127
128 if (flambda(k) <= fmi(k))
129 a(k+1) = a(k);
130 b(k+1) = mi(k);
131 mi(k+1) = lambda(k);
132 fmi(k+1) = flambda(k);
133 lambda(k+1) = a(k+1)+(F(n-k-2)/F(n-k))*(b(k+1)-a(k+1));
134 flambda(k+1) = subs(f,x,lambda(k+1));
3 4.2. Implementao MatLab
135
136 else
137 a(k+1) = lambda(k);
138 b(k+1) = b(k);
139 lambda(k+1) = mi(k);
140 flambda(k+1)=fmi(k);
141 mi(k+1) = a(k+1)+(F(n-k-1)/F(n-k))*(b(k+1)-a(k+1));
142 fmi(k+1) = subs(f,x,mi(k+1));
143
144 end
145
146 k=k+1;
147 end
148
149
150 if (flambda(k) <= fmi(k))
151 a(k+1) = a(k);
152 b(k+1) = mi(k);
153 else
154 a(k+1) = lambda(k);
155 b(k+1) = b(k);
156 end
157
158 k=k+1;
159
160
161 fprintf(O intervalo mais proximo da solucao e [%f,%f].\n,a(k),b
(k))
162 fprintf(O ponto de minimo e %f.,(a(k)+b(k))/2)
Captulo 5
Mtodo da Bisseco
5.1 Algoritmo
Figura 5.1: Mtodo da Bisseco
Captulo 5. Mtodo da Bisseco 2
5.2 Implementao MatLab
163 clear all;
164 clc;
165
166 % Define x como variavel simbolica
167 syms x
168 k=1;
169
170 % Solicita ao usuario a funcao do problema em funcao de x
171 f = input(Digite a f(x): );
172
173
174 sprintf(A derivada da funcao digitada e :)
175 df = diff(f,x)
176
177 % Solicita ao usuario as informacoes para rodar o metodo
178 l = input(Digite a precisao de parada l: );
179 a(k) = input(Digite o ponto esquerdo do intervalo em analise: )
;
180 b(k) = input(Digite o ponto direito do intervalo em analise: );
181
182
183
184 while (abs(b(k)-a(k))>l)
185
186 % Encontrando o ponto medio PM
187 PM(k) = (a(k)+b(k))/2;
188 dfPM(k) = subs(df ,x,PM(k));
189
190 if dfPM(k)>0
191 a(k+1) = a(k);
192 b(k+1) = PM(k);
193
194 else
195 if dfPM(k)<0
196 a(k+1) = PM(k);
197 b(k+1) = b(k);
198
199 else
200 fprintf(O ponto de minimo e %f.,PM(k))
201 break
202 end
203 end
204 k=k+1;
205
206 end
207
208 fprintf(O intervalo mais proximo da solucao e [%f,%f].\n,a(k),b
3 5.2. Implementao MatLab
(k))
209 fprintf(O ponto de minimo e %f.,(a(k)+b(k))/2)
Captulo 6
Mtodo de Newton
6.1 Algoritmo
Figura 6.1: Mtodo de Newton
Captulo 6. Mtodo de Newton 2
6.2 Implementao MatLab
212 clear all;
213 clc;
214
215 % Define x como variavel simbolica
216 syms x
217 k=1;
218
219 % Solicita ao usuario a funcao do problema em funcao de x
220 f = input(Digite a f(x): );
221
222
223 sprintf(A derivada da funcao digitada e :)
224 df = diff(f,x)
225 sprintf(A derivada segunda da funcao digitada e :)
226 ddf = diff(df ,x)
227
228 % Solicita ao usuario as informacoes para rodar o metodo
229 l = input(Digite a precisao de parada l: );
230 a = input(Digite o ponto esquerdo do intervalo em analise: );
231 b = input(Digite o ponto direito do intervalo em analise: );
232 y(k) = input(Defina o ponto inicial para iniciar a convergencia:
);
233
234
235
236 dfa = subs(df ,x,a);
237 dfb = subs(df ,x,b);
238
239 if dfa*dfb >=0
240 sprintf(O intervalo digitado nao tem condicoes validas: df(a
)df(b) >=0)
241 else
242 dfx(k) = subs(df ,x,y(k));
243
244 while (abs(dfx(k))>l | k>100)
245
246 ddfx(k) = subs(ddf ,x,y(k));
247 y(k+1)= y(k) -(dfx(k)/ddfx(k));
248
249 k=k+1;
250 dfx(k) = subs(df ,x,y(k));
251
252 end
253
254 end
255
256 if k==100
3 6.2. Implementao MatLab
257 sprintf(O metodo nao convergiu apos 100 iteracoes )
258 else
259 fprintf(O ponto de minimo e %f.,y(k))
260 end
Captulo 7
Falsa Posio
7.1 Acesso Inicial
Captulo 8
Ajuste Cbico
8.1 Acesso Inicial
Captulo 9
Consideraes Finais
possvel a implementao do mtodo simplex em diversas linguagens possuindo
grande quantidade de exemplos e APIs que facilitam os clculos da funo, atravs
deste trabalho fica aberta a oportunidade de melhoria do sistema e criao de um Solver
que pode ser utilizado em sala de aula.

Vous aimerez peut-être aussi