Changeset 2

User picture

Author: agata.sokolowska

(2009/10/10 23:09) Over 2 years ago


  

Affected files

Updated Zadanie 1/zad1.m Download diff

12
180
% hObject    handle to obliczButton1 (see GCBO)
180
% hObject    handle to obliczButton1 (see GCBO)
181
% eventdata  reserved - to be defined in a future version of MATLAB
181
% eventdata  reserved - to be defined in a future version of MATLAB
182
% handles    structure with handles and user data (see GUIDATA)
182
% handles    structure with handles and user data (see GUIDATA)
183
%msgbox(handles.wyborMetody,'Komunikat','modal');
183
%msgbox(handles.wyborMetody,'Komunikat','modal'); 
184
184
185
185
186
187
188
contents = get(hObject, 'String'); 
189
190
191
poczatekPrzedzialu = eval(get(handles.przedzialA,'String'));
186
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
187
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
                 wybranaMetoda = 1;   
221
        end
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
             end   
227
        end        
228
        
229
        poczX1 = 0;
230
        poczX2 = 0;
231
        switch wybranaMetoda
232
             case 1
233
                  for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)
234
    
235
                      if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))
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
                            end 
250
                            
251
                            if(funkcjaWzor(xL) <= funkcjaWzor(xP))
252
                               poczX2 = xP;
253
                            end
254
                        end
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
                      end
261
                  end
262
                  %msgbox('d','Komunikat','modal');
263
                  set(handles.listbox7, 'String', lista);
264
                  set(handles.listbox7, 'Value', 1.0);
265
                  
266
             case 2
267
                 
268
                 for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)
269
    
270
                      if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))
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
                        while(poczX2 - poczX1 > dokladnosc)   
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
                                 end 
287
                                 
288
                                 if(funkcjaWzor(xL) >= funkcjaWzor(xP))
289
                                    poczX1 = xL;
290
                                    xL = xP;
291
                                    xP = poczX1 + k .* (poczX2 - poczX1);
292
                                 end    
293
                        end
294
                        x = (poczX1 + poczX2)./2
295
                        y = funkcjaWzor((poczX1 + poczX2)./2)
296
                        
297
                          lista = [lista, cellstr(['*', 'Przedział             xmin       ymin   '])];
298
                        lista = [lista, cellstr(['* (', num2str(poczX1), '  ', num2str(poczX2), ')  ', num2str(x),'  ', num2str(y) ])];
299
                      end
300
                 end       
301
                     %msgbox('z','Komunikat','modal');
302
               set(handles.listbox7, 'String', lista);
303
                  set(handles.listbox7, 'Value', 1.0);      
304
             case 3
305
306
                 
307
szukaneN = 0;
308
 for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)
309
      
310
     if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))
311
                        
312
                        poczX1 = iMod - krokIteracji;
313
                        poczX2 = iMod + krokIteracji;
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
                        end
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
                                end
331
     
332
                                 if funkcjaWzor(xF1) >= funkcjaWzor(xF2)
333
                                    poczX1 = xF1;
334
                                    xF1 = xF2;
335
                                    szukaneN = szukaneN - 1;
336
                                    xF2 = poczX1 + (CiagFib(szukaneN - 1) .* (poczX2 - poczX1)) ./ CiagFib(szukaneN);    
337
                                 end                    
338
                        end                
339
                        x = (poczX1 + poczX2)./2
340
                        y = funkcjaWzor((poczX1 + poczX2)./2)
341
                        
342
                          lista = [lista, cellstr(['*', 'Przedział             xmin       ymin   '])];
343
                        lista = [lista, cellstr(['* (', num2str(poczX1), '  ', num2str(poczX2), ')  ', num2str(x),'  ', num2str(y) ])];
344
     end
345
 end
346
                % msgbox('f','Komunikat','modal');
347
              set(handles.listbox7, 'String', lista);
348
                  set(handles.listbox7, 'Value', 1.0);        
349
            case 4 
350
                dokladnosc = eval(get(handles.krok,'String'));%0.0001
351
    % epsilon = 0.001;
352
            for iMod = poczatekPrzedzialu : krokIteracji : koniecPrzedzialu %(koniecPrzedzialu / krokIteracji)
353
    
354
                if(funkcjaWzor(iMod - krokIteracji) > funkcjaWzor(iMod)) && (funkcjaWzor(iMod + krokIteracji) > funkcjaWzor(iMod))
355
                        
356
                    poczX1 = iMod - krokIteracji;
357
                    poczX2 = iMod + krokIteracji;
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
                    end
365
                       xRes
366
                       funkcjaWzor(xRes)
367
       lista = [lista, cellstr(['*', 'Przedział             xmin       ymin   '])];
368
       lista = [lista, cellstr(['* (', num2str(poczX1), '  ', num2str(poczX2), ')  ', num2str(x),'  ', num2str(y) ])];                  
369
     
370
                end
371
            end
372
        end
373
        
374
        set(handles.listbox7, 'String', lista);
375
                  set(handles.listbox7, 'Value', 1.0);
376
      % msgbox('n','Komunikat','modal');
188
      % msgbox('n','Komunikat','modal');
377
% --- Executes on button press in RysujButton2.
189
% --- Executes on button press in RysujButton2.
378
function RysujButton2_Callback(hObject, eventdata, handles)
190
function RysujButton2_Callback(hObject, eventdata, handles)