# Untitled

By: a guest on May 2nd, 2012  |  syntax: MatLab  |  size: 2.65 KB  |  hits: 16  |  expires: Never
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
1. % Р—РЅР°С‡РµРЅРёСЏ РєРѕСЌС„С„РёС†РёРµРЅС‚РѕРІ
2. g = 0.2;    % РїРѕСЃС‚РѕСЏРЅРЅР°СЏ С€Р°РіР°
3. d = 0.001;   % С‚РѕС‡РЅРѕСЃС‚СЊ
4. l = 0.5;    % РєРѕСЌС„С„РёС†РёРµРЅС‚ РґСЂРѕР±Р»РµРЅРёСЏ С€Р°РіР°
5.
6. [x, y] = meshgrid(-20:0.1:20, -20:0.1:20);
7. %Z = c1*X.^2 + c2*Y.^2 + c12*X.*Y;
8. % func = sym('2*x1^2 + y1^2 + x1*y1')
9. % func =  sym('x1^2 + y1^2')
10. syms x1 y1
11.  func = sym('(1-x1)^2 + 100*(y1-x1^2)^2');
12. %func = sym('-2*x1^2 - y1^2 + x1*y1')
13. %func = sym('sin(((1/2)*x1^2)-((1/4)*y1^2) + 3)*cos(2*x1 + 1 - exp(y1))');
14.
15. func_hl = matlabFunction(func);
16.
17. derivateX = diff(func, x1);
18. derivateX = matlabFunction(derivateX);
19.
20. derivateY = diff(func, y1);
21. derivateY = matlabFunction(derivateY);
22.
23. z = func_hl(x,y);
24.
25.  % РќР°С‡Р°Р»СЊРЅР°СЏ С‚РѕС‡РєР°
26. sx1 = 4; sx2 = 3;
27. k = 1;  % РЎС‡РµС‚С‡РёРє С€Р°РіРѕРІ
28. kmax = 90; % РџСЂРµРґРµР»СЊРЅРѕРµ С‡РёСЃР»Рѕ С€Р°РіРѕРІ,
29.             % Р·Р°РґР°РµС‚СЃСЏ РґР»СЏ РїСЂРµРґРѕС‚РІСЂР°С‰РµРЅРёСЏ Р·Р°С†РёРєР»РёРІР°РЅРёСЏ
30.  % РњР°СЃСЃРёРІС‹ РґР»СЏ С…СЂР°РЅРµРЅРёСЏ РїСЂРѕРјРµР¶СѓС‚РѕС‡РЅС‹С… РєРѕРѕСЂРґРёРЅР°С‚
31. x1trace = [sx1]; x2trace = [sx2];
32. i = 2;
33.  % Р“СЂР°РґРёРµРЅС‚С‹
34.
35. hold on;
36. [C, h] = contour(x, y, z);
37. clabel(C, h);    % РћС‚РѕР±СЂР°Р¶РµРЅРёРµ РјРµС‚РѕРє РЅР° Р»РёРЅРёСЏС… СѓСЂРѕРІРЅСЏ
38. X = sx1; Y = sx2;
39.
40. while k < kmax
41.
42.     derX = derivateX(X, Y);
43.     derY = derivateY(X, Y);
44.
45.     X = X - g*derX;
46.     Y = Y - g*derY;
47.
48.     tX = X;
49.     tY = Y;
50.     z = func_hl(x,y);
51.     sz = func_hl(tX, tY);
52.
53.     if(sz < z)
54.     x1trace(i) = X;
55.     x2trace(i) = Y;
56.     i = i + 1
57.     plot(X, Y, '+');
58.     if sqrt(derX^2 + derY^2) <= d
59.         break;
60.          end
61.         k = k + 1
62.     else
63.         X = X + g*derX;
64.         Y = Y + g*derY;
65.         g = l*g;
66.     end
67. end
68.
69. plot(x1trace, x2trace, '-+');
70. % Р’С‹РІРѕРґ РЅР°С‡Р°Р»СЊРЅРѕР№ С‚РѕС‡РєРё РЅР° РіСЂР°С„РёРє
71. text(x1trace(1) + 0.2, x2trace(1) + 0.5, 'M0');
72. % Р’С‹РІРѕРґ СЂРµС€РµРЅРёСЏ РЅР° РіСЂР°С„РёРє
73. text(X + 2.5, Y, ...
74.     strvcat(['x1 = ' num2str(X)], ...
75.             ['x2 = ' num2str(Y)], ...
76.             ['k  = ' num2str(k)]));