Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 40
1

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

16.12.2016, 07:53. Просмотров 1238. Ответов 3
Метки нет (Все метки)

Существует массив с двумя столбцами, переменные следует обозвать х и у. Задание: написать программы в matlabe которые осуществляют поиск максимума методами: метод касательных, метод Ньютона-Рафсона. Praktic_MO_02 загружается в матлаб, массив называется Z1_var4_max.
Praktic_MO_02.zip
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2016, 07:53
Ответы с готовыми решениями:

Решить 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
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 40
24.12.2016, 11:25  [ТС] 2
Добрый день. Нужно реализовать в программе 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 просмотров)
Модератор
Эксперт по математике/физике
4642 / 3555 / 1199
Регистрация: 30.07.2012
Сообщений: 10,120
24.12.2016, 12:21 3
Peter29, загляните в самый низ этой страницы в раздел "Похожие темы". Можете найти для себя много полезной информации...
0
0 / 0 / 0
Регистрация: 09.12.2015
Сообщений: 40
24.12.2016, 17:50  [ТС] 4
Там про то как решить уравнения, а у меня х и у уже заданы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2016, 17:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Не выходит получить правильный ответ методом Ньютона (касательных)
Для уравления cos*(ln(x)-cos^2(x))-1⁄3=0 найти решения на отрезке . Методом касательных в 15...

Поиск максимума методом Фибоначчи
Доброе всем время суток!! Хотела бы попросить помощи в построении кода программы метода Фибоначчи...

Минимизация методом касательных (Перевести код из C++)
Вот собственно сама программа в с++. void KasMet(double a,double b,double E) { double...

Метод Ньютона-Рафсона
Помогите пожайлуста преобразовать программу так, чтобы появлялось сообщение об ошибке при делении...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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