Author: agata.sokolowska
(2009/10/10 23:09) Over 2 years ago
180
% hObject handle to obliczButton1 (see GCBO)
181
% eventdata reserved - to be defined in a future version of MATLAB
182
% handles structure with handles and user data (see GUIDATA)
183
%msgbox(handles.wyborMetody,'Komunikat','modal');
184
185
186
187
188
contents = get(hObject, 'String');
189
190
191
poczatekPrzedzialu = eval(get(handles.przedzialA,'String'));
192
koniecPrzedzialu = eval(get(handles.przedzialB,'String'));
193
krokIteracji = eval(get(handles.krok,'String'));
194
funkcjaWzor = inline(get(handles.funkcja,'String'));
195
pochFunkcji = inline(diff(get(handles.funkcja,'String')));
196
poch2Funkcji = inline(diff(diff(get(handles.funkcja,'String'))));
197
198
ilMin = 0;
199
if(poczatekPrzedzialu > koniecPrzedzialu)
200
pom = poczatekPrzedzialu;
201
poczatekPrzedzialu = koniecPrzedzialu;
202
koniecPrzedzialu = pom;
203
end
204
205
wybranaMetoda = 0;
206
lista = [];
207
wybor = get(handles.metoda,'String');
208
w = wybor{get(handles.metoda, 'Value')};
209
k = (sqrt(5) - 1) ./ 2;
210
switch w
211
case 'Metoda dychotomii'
212
wybranaMetoda = 1;
213
case 'Metoda złotego podziału'
214
wybranaMetoda = 2;
215
case 'Metoda Fibonacci'
216
wybranaMetoda = 3;
217
case 'Metoda quasi - Newtona'
218
wybranaMetoda = 4;
219
otherwise
220
221
222
223
for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)
224
if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))
225
ilMin = ilMin + 1;
226
227
228
229
poczX1 = 0;
230
poczX2 = 0;
231
switch wybranaMetoda
232
case 1
233
234
235
236
237
poczX1 = iMod - krokIteracji
238
poczX2 = iMod + krokIteracji
239
240
krokIteracjiDychotomii = 0.001;
241
dokladnosc = eval(get(handles.krok,'String'))%0.01;
242
243
while(poczX2 - poczX1 > dokladnosc)
244
xL = (poczX1 + poczX2)./ 2 - (krokIteracjiDychotomii ./ 2);
245
xP = (poczX1 + poczX2)./ 2 + (krokIteracjiDychotomii ./ 2);
246
247
if(funkcjaWzor(xL) >= funkcjaWzor(xP))
248
poczX1 = xL;
249
250
251
if(funkcjaWzor(xL) <= funkcjaWzor(xP))
252
poczX2 = xP;
253
254
255
x = (poczX1 + poczX2)./2
256
y = funkcjaWzor((poczX1 + poczX2)./2)
257
lista = [lista, cellstr(['*', 'Przedział xmin ymin '])];
258
lista = [lista, cellstr(['* (', num2str(poczX1), ' ', num2str(poczX2), ') ', num2str(x),' ', num2str(y) ])];
259
260
261
262
%msgbox('d','Komunikat','modal');
263
set(handles.listbox7, 'String', lista);
264
set(handles.listbox7, 'Value', 1.0);
265
266
case 2
267
268
269
270
271
272
poczX1 = iMod - krokIteracji;
273
poczX2 = iMod + krokIteracji;
274
275
krokIteracjiZlotegoPodzialu = 0.001;
276
dokladnosc = eval(get(handles.krok,'String'));%0.01;0.01;
277
278
279
xL = (poczX1 + poczX2)./ 2 - (krokIteracjiZlotegoPodzialu ./ 2);
280
xP = (poczX1 + poczX2)./ 2 + (krokIteracjiZlotegoPodzialu ./ 2);
281
282
if(funkcjaWzor(xL) < funkcjaWzor(xP))
283
poczX2 = xP;%%%
284
xP = xL;
285
xL = poczX2 - k .* (poczX2 - poczX1);
286
287
288
289
290
xL = xP;
291
xP = poczX1 + k .* (poczX2 - poczX1);
292
293
294
295
296
297
298
299
300
301
%msgbox('z','Komunikat','modal');
302
303
304
case 3
305
306
307
szukaneN = 0;
308
309
310
311
312
313
314
%krokIteracjiFib = 0.001;
315
dokladnosc = eval(get(handles.krok,'String'));%0.01
316
317
while (((poczX2 - poczX1) ./ (2 * dokladnosc)) >= CiagFib(szukaneN) )
318
szukaneN = szukaneN + 1;
319
320
321
xF1 = poczX2 - (CiagFib(szukaneN - 1) .* (poczX2 - poczX1 )) ./ CiagFib(szukaneN);
322
xF2 = poczX1 + (CiagFib(szukaneN - 1) .* (poczX2 - poczX1 )) ./ CiagFib(szukaneN);
323
324
while abs(xF2 - xF1) > dokladnosc
325
if funkcjaWzor(xF1) < funkcjaWzor(xF2)
326
poczX2 = xF2;
327
xF2 = xF1;
328
szukaneN = szukaneN - 1;
329
xF1 = poczX2 - (CiagFib(szukaneN -1 ) .* (poczX2 - poczX1)) ./ CiagFib(szukaneN);
330
331
332
if funkcjaWzor(xF1) >= funkcjaWzor(xF2)
333
poczX1 = xF1;
334
xF1 = xF2;
335
336
xF2 = poczX1 + (CiagFib(szukaneN - 1) .* (poczX2 - poczX1)) ./ CiagFib(szukaneN);
337
338
339
340
341
342
343
344
345
346
% msgbox('f','Komunikat','modal');
347
348
349
case 4
350
dokladnosc = eval(get(handles.krok,'String'));%0.0001
351
% epsilon = 0.001;
352
353
354
355
356
357
358
lambda = (poczX2 - poczX1) ./ 200;
359
xRes = poczX1;
360
361
while (pochFunkcji(xRes).*pochFunkcji(xRes) < dokladnosc)
362
d = (-1.0./poch2Funkcji(xRes)).*pochFunkcji(xRes);
363
xRes = xRes + lambda.*d;
364
365
xRes
366
funkcjaWzor(xRes)
367
368
369
370
371
372
373
374
375
376
% msgbox('n','Komunikat','modal');
377
% --- Executes on button press in RysujButton2.
378
function RysujButton2_Callback(hObject, eventdata, handles)
%msgbox(handles.wyborMetody,'Komunikat','modal');contents = get(hObject, 'String');koniecPrzedzialu = eval(get(handles.przedzialB,'String'));krokIteracji = eval(get(handles.krok,'String'));funkcjaWzor = inline(get(handles.funkcja,'String'));pochFunkcji = inline(diff(get(handles.funkcja,'String')));poch2Funkcji = inline(diff(diff(get(handles.funkcja,'String'))));ilMin = 0;if(poczatekPrzedzialu > koniecPrzedzialu)pom = poczatekPrzedzialu;poczatekPrzedzialu = koniecPrzedzialu;koniecPrzedzialu = pom;endwybranaMetoda = 0;lista = [];wybor = get(handles.metoda,'String');w = wybor{get(handles.metoda, 'Value')};k = (sqrt(5) - 1) ./ 2;switch wcase 'Metoda dychotomii'wybranaMetoda = 1;case 'Metoda złotego podziału'wybranaMetoda = 2;case 'Metoda Fibonacci'wybranaMetoda = 3;case 'Metoda quasi - Newtona'wybranaMetoda = 4;otherwisewybranaMetoda = 1;endfor iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))ilMin = ilMin + 1;endendpoczX1 = 0;poczX2 = 0;switch wybranaMetodacase 1for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))poczX1 = iMod - krokIteracjipoczX2 = iMod + krokIteracjikrokIteracjiDychotomii = 0.001;dokladnosc = eval(get(handles.krok,'String'))%0.01;while(poczX2 - poczX1 > dokladnosc)xL = (poczX1 + poczX2)./ 2 - (krokIteracjiDychotomii ./ 2);xP = (poczX1 + poczX2)./ 2 + (krokIteracjiDychotomii ./ 2);if(funkcjaWzor(xL) >= funkcjaWzor(xP))poczX1 = xL;endif(funkcjaWzor(xL) <= funkcjaWzor(xP))poczX2 = xP;endendx = (poczX1 + poczX2)./2y = funkcjaWzor((poczX1 + poczX2)./2)lista = [lista, cellstr(['*', 'Przedział xmin ymin '])];lista = [lista, cellstr(['* (', num2str(poczX1), ' ', num2str(poczX2), ') ', num2str(x),' ', num2str(y) ])];endend%msgbox('d','Komunikat','modal');set(handles.listbox7, 'String', lista);set(handles.listbox7, 'Value', 1.0);case 2for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))poczX1 = iMod - krokIteracji;poczX2 = iMod + krokIteracji;krokIteracjiZlotegoPodzialu = 0.001;dokladnosc = eval(get(handles.krok,'String'));%0.01;0.01;while(poczX2 - poczX1 > dokladnosc)xL = (poczX1 + poczX2)./ 2 - (krokIteracjiZlotegoPodzialu ./ 2);xP = (poczX1 + poczX2)./ 2 + (krokIteracjiZlotegoPodzialu ./ 2);if(funkcjaWzor(xL) < funkcjaWzor(xP))poczX2 = xP;%%%xP = xL;xL = poczX2 - k .* (poczX2 - poczX1);endif(funkcjaWzor(xL) >= funkcjaWzor(xP))poczX1 = xL;xL = xP;xP = poczX1 + k .* (poczX2 - poczX1);endendx = (poczX1 + poczX2)./2y = funkcjaWzor((poczX1 + poczX2)./2)lista = [lista, cellstr(['*', 'Przedział xmin ymin '])];lista = [lista, cellstr(['* (', num2str(poczX1), ' ', num2str(poczX2), ') ', num2str(x),' ', num2str(y) ])];endend%msgbox('z','Komunikat','modal');set(handles.listbox7, 'String', lista);set(handles.listbox7, 'Value', 1.0);case 3szukaneN = 0;for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))poczX1 = iMod - krokIteracji;poczX2 = iMod + krokIteracji;%krokIteracjiFib = 0.001;dokladnosc = eval(get(handles.krok,'String'));%0.01while (((poczX2 - poczX1) ./ (2 * dokladnosc)) >= CiagFib(szukaneN) )szukaneN = szukaneN + 1;endxF1 = poczX2 - (CiagFib(szukaneN - 1) .* (poczX2 - poczX1 )) ./ CiagFib(szukaneN);xF2 = poczX1 + (CiagFib(szukaneN - 1) .* (poczX2 - poczX1 )) ./ CiagFib(szukaneN);while abs(xF2 - xF1) > dokladnoscif funkcjaWzor(xF1) < funkcjaWzor(xF2)poczX2 = xF2;xF2 = xF1;szukaneN = szukaneN - 1;xF1 = poczX2 - (CiagFib(szukaneN -1 ) .* (poczX2 - poczX1)) ./ CiagFib(szukaneN);endif funkcjaWzor(xF1) >= funkcjaWzor(xF2)poczX1 = xF1;xF1 = xF2;szukaneN = szukaneN - 1;xF2 = poczX1 + (CiagFib(szukaneN - 1) .* (poczX2 - poczX1)) ./ CiagFib(szukaneN);endendx = (poczX1 + poczX2)./2y = funkcjaWzor((poczX1 + poczX2)./2)lista = [lista, cellstr(['*', 'Przedział xmin ymin '])];lista = [lista, cellstr(['* (', num2str(poczX1), ' ', num2str(poczX2), ') ', num2str(x),' ', num2str(y) ])];endend% msgbox('f','Komunikat','modal');set(handles.listbox7, 'String', lista);set(handles.listbox7, 'Value', 1.0);case 4dokladnosc = eval(get(handles.krok,'String'));%0.0001% epsilon = 0.001;for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))poczX1 = iMod - krokIteracji;poczX2 = iMod + krokIteracji;lambda = (poczX2 - poczX1) ./ 200;xRes = poczX1;while (pochFunkcji(xRes).*pochFunkcji(xRes) < dokladnosc)d = (-1.0./poch2Funkcji(xRes)).*pochFunkcji(xRes);xRes = xRes + lambda.*d;endxResfunkcjaWzor(xRes)lista = [lista, cellstr(['*', 'Przedział xmin ymin '])];lista = [lista, cellstr(['* (', num2str(poczX1), ' ', num2str(poczX2), ') ', num2str(x),' ', num2str(y) ])];endendendset(handles.listbox7, 'String', lista);set(handles.listbox7, 'Value', 1.0);% msgbox('n','Komunikat','modal');% msgbox('n','Komunikat','modal');