Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Matlab Сформировать p-мерную матрицу A n-го порядка https://www.cyberforum.ru/ matlab/ thread1879677.html
Есть задание: Сформировать p-мерную матрицу A n-го порядка и q-мерную матрицу B n-го порядка. Получить матрицу AT, транспонированную относительно соответственно подстановке . Matlab R2009b ...
Matlab Численное дифференцирование
Вычислить первую и вторую производную от таблично заданной функции yi=f(xi) i=0,1,2,3,4 в точке x=X В моем варианте X=2.0 x= yi=
Matlab Нужно численное решение уравнения теплопроводности
Так сложилось, что с математикой и Матлабом я не в ладах, а налаживать с ними отношения - нет времени, поэтому прошу помощи у вас :help: Задание звучит так "Численно решить кинетические равнения...
Matlab Нахождение коэффициента А3 ряда тейлора А3 = исходные данные запрограммировать средствами матлаб нахождение А3 https://www.cyberforum.ru/ matlab/ thread1879487.html
Matlab Размытие по Гауссу https://www.cyberforum.ru/ matlab/ thread1879390.html
Пожалуйста помогите решить задачу:) Нужно сделать размытие по Гауссу в матлаб) для чб изображения у меня получилось, как сделать цветное?%-)
Matlab Как поменять формат вывода числа в командную строку?
Как поменять формат вывода числа в командную строку без использования fprintf? diary Lab1_diary.txt %Save the text file in the command window disp ('Part 1'); %Display...
Решение системы дифференциальных уравнений Matlab
Возможно ли такое решить в Matlab: \begin{cases} & \text{ } \ddot{y}=-y+x-\dot{y}+\dot{x} \\ & \text{ } \ddot{x}=y-x+\dot{y}-\dot{x}\end{cases}
Matlab Помогите разобраться с функцией mvnrnd Здравствуйте. Нужна помощь с функцией mvnrnd. В описании сказано, что MU это математическое ожидание, то есть среднее. Это значит, если строить распределение, то его центр будет в координатах... https://www.cyberforum.ru/ matlab/ thread1878440.html
Matlab Оптимизация через мультипликатор Лагранжа https://www.cyberforum.ru/ matlab/ thread1878365.html
Доброго времени суток! Понадобилось найтим максимальное значение функции двух переменных и мультипликатора Лагранжа (указана в коде). Для чего беру три производные и получаю уравнения, однако как...
Matlab Арбитражное уравнение Помогите решить арбитражное уравнение. Необходимо решить уравнение r*p=d(t)+ṗ. Функция должна возвращать значение (−p˙) как функцию от p и (−t). В условие задано, что при t>=20... https://www.cyberforum.ru/ matlab/ thread1878189.html
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 40
24.12.2016, 11:25  [ТС] 0

Поиск максимума в массиве методом касательных и методом Ньютона-Рафсона

24.12.2016, 11:25. Просмотров 1253. Ответов 3
Метки (Все метки)

Ответ

Добрый день. Нужно реализовать в программе matlab поиск максимума методом касательных и Ньютона-Рафсона.
Метод касательных:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
%clc;
%clear;
 
x  = 1:length(Z1_var4_max(:,1));
 
u  = zeros(1,100);
 
%f = zeros(1,length(x));
% ОПРЕДЕЛЕНИЕ МИНИМИЗИРУЕМОЙ ФУНКЦИИ 
%alfha = 0.01;
%f = alfha*(x/100-75).^2 + 50;
f = -(Z1_var4_max(:,2)) + 2 ;
 
u(1) = x(1);                                % начальная точка  
deriv = f(1+1)-f(1);
g = deriv*x + f(1);                         % построена касательная
 
u(2)  = (min(g)-f(1))/deriv;                % следующая точка
deriv = f(u(2))-f(u(2)-1);
g1    = deriv*x + f(u(2)) - deriv*u(2);     % построена касательная
h1    = max(g,g1);                          % построение ломаной
minimum = min(h1);                          % минимум ломаной
ind  = find( h1 == minimum );               % поиск индекса
u(3)  = ind(1);                             % следующая точка
 
deriv_L = f(u(3))-f(u(3)-1);                % левая
deriv_R = f(u(3)+1)-f(u(3));                % провая
deriv = min(deriv_L,deriv_R);               % выбрали минимальную производную
g2    = deriv*x + f(u(3)) - deriv*u(3);     % построена касательная
h2    = max(h1,g2);                         % построение ломаной
minimum = min(h2);                          % минимум ломаной
ind  = find( h2 == minimum );               % поиск индекса    
u(4)  = ind(1);
 
deriv_L = f(u(4))-f(u(4)-1);                % левая
deriv_R = f(u(4)+1)-f(u(4));                % провая
% if( (deriv_R >= 0) && (deriv_L <= 0) )      % следующая точка
%     disp ( '_К_О_Н_Е_Ц_'  );
%     disp ( u(4) );
%     flag = 0;
% else
%     flag = 1;
% end
 
u_ = u(4);
h_ = h2;
flag = 1;
i = 0;
n = 0;
while(i <= 100)                               % далее цикл
    disp ( i );
    disp ( u_ );
%   
    deriv = min(deriv_L,deriv_R);
    g_    = deriv*x + f(u_) - deriv*u_;       % построена касательная
    h__   = max(h_,g_);                       % построение ломаной
    minimum = min(h__);
    ind  = find( h__ == minimum );
    u__  = ind(1);
 
     deriv_L = f(u__)-f(u__-1);                % левая
     deriv_R = f(u__+1)-f(u__);                % провая
     
     if( u_ == u__ )
         n = n+1;
     end
     
     u_ = u__;
     h_ = h__;
     
%      deriv = min(deriv_L,deriv_R);
%      g__   = deriv*x + f(u__) - deriv*u__;      % построена касательная
%      h___   = max(h__,g_);                       % построение ломаной
%      minimum = min(h___);
%      ind  = find( h___ == minimum );
%      u___  = ind(1);
% 
%      deriv_L = f(u___)-f(u___-1);                % левая
%      deriv_R = f(u___+1)-f(u___);                % провая
          
    i = i+1;
    
    if( ( (deriv_L <=0) && (deriv_R >= 0)) || n >= 10 )
        i = 101;
        disp ( '_THE_END_'  );
        disp ( u__ );
        
    end
        
end
 
    %plot( [1:length(Z1_var4_max(:,1))], f, [1:length(Z1_var4_max(:,1))], g, [1:length(Z1_var4_max(:,1))], g1, [1:length(Z1_var4_max(:,1))], g2, [1:length(Z1_var4_max(:,1))], h__ );
    %plot( x, f, x, g_, x, h__ ); 
    %plot( [1:length(Z1_var4_max(:,1))], g1 );
    %axis ([ 0 10000 -60 110 ]);
    %grid on;
    
    xx = [1:length(Z1_var4_max(:,1))];
    plot( xx, f(xx), xx, g1(xx), xx, g2(xx), xx, g_(xx) );
    
    %disp(f(u__)  );
    
    % ВЫВОД РЕЗУЛЬТАТОВ
    disp( ' x значение' );
    disp( Z1_var4_max(u__,1)  ); 
    disp( ' y значение' );
    disp( Z1_var4_max(u__,2)  );
Мне кажется, что тут слишком много всего, нужно этот код упростить до максимума. Помогите пожалуйста. А про метод Ньютона-Рафсона даже не знаю.

Вернуться к обсуждению:
Поиск максимума в массиве методом касательных и методом Ньютона-Рафсона
0
Вложения
Тип файла: rar zadanie.rar (6.10 Мб, 3 просмотров)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2016, 11:25
Готовые ответы и решения:

Решить f(x)=sinx-x*(e^x)+3 методом Ньютона-рафсона
Как решить f(x)=sinx-x*(e^x)+3 методом Ньютона-рафсона на Матлаб пожалуста помогите P.S пример...

Решение уравнения методом Ньютона (касательных)
решить уравнение методом Ньютона на матлаб:ln(x)+(x+1)^3

Решение нелинейного уравнения методом Ньютона (касательных)
Здравствуйте! Прошу вашей помощи в решении нелинейного уравнения методом Ньютона. Уравнение:...

Решение нелинейного уравнения методом Ньютона (касательных)
Решить пожалуйста уравнение 8e^(-8t) * sin(8t+0,9)=1, методом касательных . Для отделения...

3
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.