Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100

Метод Ньютона нахождение максимума функции на отрезке [4 ; 8]

22.11.2022, 23:35. Показов 2812. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
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
import numpy as np
 
import math as mh
 
# функция 
def func(x): 
    return mh.cos(x)+mh.log(x)**2
 
# производная первого порядка 
def der_func(x):
    dx = 0.0001
    return ((func(x+dx)-func(x-dx))/(2*dx))
 
# производная второго порядка 
def der_func_two(x):
    dx = 0.0001
    return (func(x-dx)-2*func(x)+func(x+dx))/dx**2
 
a = 4.0
b=8.0 
k=0               #кол-во итераций
while 1:
    y1=der_func(a)
    y2=der_func_two(a)
    x1=a-y1/y2
    if (a-x1)<eps
        k=k+1
        a = x1
    else:
        xmax = x1
        fmax = func(xmax)
        break
 
print('Точка max:', xmax)
print('fmax: ',fmax,'\nКол-во итераций: ', k)




Точка максимума должна равняться xmax = 6.87841796875; fmax = 4.57

Не могу понять что неправильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2022, 23:35
Ответы с готовыми решениями:

Нахождение минимума функции. Метод Ньютона
Помогите пожалуйста решить задачу, о Умные Люди!!! Задача: f(x;y)=e^(y+x)-x^2+y Методом Ньютона (с точки зрения оптимизации) найти...

Метод Ньютона для нахождения максимума/минимума.
Уважаемые форумчане помогите сделать задание в MathCAD. так как я вообще не знаю как в нем работать не могу даже выложить наработки....

Нахождение корня уравнения x^3 - 2x^2 - 4x + 7 = 0 на отрезке [-3, 3] с точностью еps методом Ньютона
найти решение уравнения x3 – 2x2 –4x + 7 = 0 на отрезке с точностью е методом Ньютона. Помогите, пожалуйста

15
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.11.2022, 08:42
Что за странный способ вычисления производных? Продифференцируй функцию явно!
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 11:07  [ТС]
Catstail, Производная вычисляется правильно
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 11:10  [ТС]
Catstail,
Не пойму может быть где-то в коде ошибся когда прописывал метод Ньютона

Вот в этой части кода у меня возникают трудности
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a = 4.0
b=8.0 
k=0               #кол-во итераций
while 1:
    y1=der_func(a)
    y2=der_func_two(a)
    x1=a-y1/y2
    if (a-x1)<eps
        k=k+1
        a = x1
    else:
        xmax = x1
        fmax = func(xmax)
        break
 
print('Точка max:', xmax)
print('fmax: ',fmax,'\nКол-во итераций: ', k)
Может я где-то ошибся в цикле или условии?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 12:16
888224, 8-я строка
Python
1
if abs(a-x1)>eps
Далее. Вы находите нули производной. То есть помимо локальных максимумов, также и локальные минимумы. С таким начальным приближением как у вас - свалится в минимум левее отрезка
1
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38192 / 21125 / 4309
Регистрация: 12.02.2012
Сообщений: 34,732
Записей в блоге: 14
23.11.2022, 13:49
888224, да зачем применять приближенные формулы, если можно считать производные аналитически?

https://www.cyberforum.ru/cgi-bin/latex.cgi?y=cos(x)+{(ln(x))}^{2}

Тогда:

https://www.cyberforum.ru/cgi-bin/latex.cgi?y'=-sin(x)+\frac{2ln(x)}{x}

и

https://www.cyberforum.ru/cgi-bin/latex.cgi?y''=-cos(x)+2(\frac{1-ln(x)}{{x}^{2}})
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 14:51  [ТС]
Red white socks,
Исправил, но всё ровно максимум не получается в точке, что при аналитическом решении
xmax = 6.87841796875; fmax = 4.57
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 16:09
888224, во-первых, точность у вас будет не выше, чем точность с которой находите производные, т.е. только 3 знака, вне зависимости от значения eps. Последуйте таки совету Catstail или ставьте dx по эпсилону (желательно с запасом по количеству итераций).
А во-вторых, как уже говорил, результат зависит от начального приближения. Одолжил хрустальный шар коллеге, как только вернет - отвечу, что не так с вашим кодом.
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 16:54  [ТС]
Red white socks, Хорошо я Вас понял
Можете вот это блок-схему описать кодом на python
Просто может у меня где-то в коде метода ошибка
Вот блок-схема:
Миниатюры
Метод Ньютона нахождение максимума функции на отрезке [4 ; 8]  
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 17:07
888224, с учетом замечаний, которые уже здесь прозвучали - ваш код рабочий

Добавлено через 1 минуту
Количество итераций еще на 1 занижает, но это мелочи
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 17:26  [ТС]
Red white socks, Переделал с учётом замечаний, всё равно не верно считает

Python
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
def func(x):
    return mh.cos(x)+mh.log(x)**2
 
def der_func(x):
    #dx = 0.0001
    #return ((func(x+dx)-func(x-dx))/(2*dx))
    return -mh.sin(x)- 2*((mh.log(x))/x)
 
def der_func_two(x):
    ##dx = 0.0001
    ##return (func(x-dx)-2*func(x)+func(x+dx))/dx**2
    return -mh.cos(x)+2*(1-mh.log(x)/(x**2))
 
a = 4.0
b=8.0 
k=0              #кол-во итераций
while 1:
    y1=der_func(a)
    y2=der_func_two(a)
    x1=a-y1/y2
    if abs(a-x1) > eps:
        k=k+1
        a = x1
    else:
        xmax = x1
        fmax = func(xmax)
        break
print('Точка max:', xmax)
print('fmax: ',fmax,'\nКол-во итераций: ', k)
Получается точка максимума на отрезке равна xmax = 3.913429127277947 ограничение на отрезке [4; 8]
А при аналитическом решении уже с проверкой получается, что : xmax = 6.87841796875 (верное решение) ограничение на отрезке [4; 8]
Вот поэтому не могу понять где в коде ошибка?

Добавлено через 4 минуты
Catstail, Переделал всё равно неверно сичтает

Python
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
def func(x):
    return mh.cos(x)+mh.log(x)**2
 
def der_func(x):
    #dx = 0.0001
    #return ((func(x+dx)-func(x-dx))/(2*dx))
    return -mh.sin(x)- 2*((mh.log(x))/x)
 
def der_func_two(x):
    ##dx = 0.0001
    ##return (func(x-dx)-2*func(x)+func(x+dx))/dx**2
    return -mh.cos(x)+2*(1-mh.log(x)/(x**2))
 
a = 4.0
b=8.0 
k=0              #кол-во итераций
while 1:
    y1=der_func(a)
    y2=der_func_two(a)
    x1=a-y1/y2
    if abs(a-x1) > eps:
        k=k+1
        a = x1
    else:
        xmax = x1
        fmax = func(xmax)
        break
print('Точка max:', xmax)
print('fmax: ',fmax,'\nКол-во итераций: ', k)
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 17:31
888224, ошибка в формуле производной
ну и повторяю в третий раз, больше не буду
Цитата Сообщение от Red white socks Посмотреть сообщение
Вы находите нули производной. То есть помимо локальных максимумов, также и локальные минимумы. С таким начальным приближением как у вас - свалится в минимум левее отрезка
Добавлено через 2 минуты
График производной нарисуйте...
0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 17:52  [ТС]
Red white socks,

0
1 / 1 / 0
Регистрация: 27.10.2020
Сообщений: 100
23.11.2022, 18:04  [ТС]
Можете, пожалуйста, показать как должно выглядеть кодом?
0
Эксперт Python
 Аватар для Red white socks
4523 / 1899 / 336
Регистрация: 18.01.2021
Сообщений: 3,489
23.11.2022, 18:33
888224, на графике смотрите к какому корню будет сходиться метод Ньютона в зависимости от х0.
Цитата Сообщение от 888224 Посмотреть сообщение
Можете, пожалуйста, показать как должно выглядеть кодом?
Исправляйте у себя ошибки
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
23.11.2022, 20:18
888224, реализация этого метода приводит к определению минимума в окрестности начальной точки.
Для определения локального максимума в диапазоне хорошо подходит метод фибоначчи, градиентного спуска(подъема) и тп
Например, градиентный метод:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from math import cos, sin, log
 
def f(x):
    return cos(x) + log(x)**2
 
def dfdx(x):
    return -sin(x) + 2*log(x)/x
 
def gradsteps(x, eps=1e-6, alpha=0.4, maxiter=100): 
    dx = 2*eps
    itera = 0
    while dx > eps and itera < maxiter:
        dx_r = dfdx(x) 
        dx = alpha * dx_r
        x = x + dx
        itera += 1
    
    return round(x,5), round(f(x),5), itera
 
 
print(gradsteps(4.))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.11.2022, 20:18
Помогаю со студенческими работами здесь

Есть ли функции в scilab'e нахождения максимума функции на отрезке
Есть ли функции в scilab'e нахождения максимума функции на отрезке, если есть, то как она называется?

Нахождения максимума функции методом Ньютона
Мне надо на с++ написать код для нахождения максимума функции методом ньютона. Код бы я написать смог но вот как методом ньютона найти...

Найти положение максимума функции на заданном отрезке
День добрый, нужна помощь. С++ необходимо составить программу, которая на отрезке изменения переменной Х от действительного...

Найти точку максимума функции на заданном отрезке
Всем привет! Только начинаю в С++ задание на учебе не успеваю сделать помогите пожалуйста. Задание 2) до него докапался...

Нахождение максимума в массиве (рекурсия, метод деления пополам)
К коду и названию темы, в принципе, добавить нечего. Просто зависает и все: wall:Подскажите, пожалуйста, почему #include...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru