Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 29.01.2020
Сообщений: 1

Найти безусловный минимум функции одной переменной

29.01.2020, 09:12. Показов 2549. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте я начинающий программист в области matlab и у меня такая задача
требуется найти безусловный минимум функции f(x) одной переменной, т.е такую точку x^*=R что f(x^*)=minf(x)
f(x)=2x^2+16/x
x=R
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.01.2020, 09:12
Ответы с готовыми решениями:

Безусловный минимум функции. Метод половинного деления
Здравствуйте, облазил весь форум но не нашел нечего по теме. Поэтому решил создать тему нахождения минимума функции. Итак есть код но он...

Найти минимум функции одной переменной
Пожалуйста, помогите с заданием! Очень нужно! Найти минимум функции одной переменной двумя методами: одним из методов нулевого порядка и...

Найти минимум функции одной переменной методом нулевого порядка
Добрый вечер))) нужно написать математическую программу, но не знаю что это. Задание следующее: Найти минимум функции одной переменной...

7
574 / 363 / 186
Регистрация: 11.01.2019
Сообщений: 1,220
29.01.2020, 19:03
что означают таинственные символы ^* для x
0
 Аватар для Krasme
7247 / 5100 / 2151
Регистрация: 02.02.2014
Сообщений: 13,461
29.01.2020, 19:37
Цитата Сообщение от tokrab Посмотреть сообщение
^* для x
https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{*}=R\\f(x^*)=...
1
416 / 200 / 69
Регистрация: 20.01.2019
Сообщений: 714
29.01.2020, 20:52
megalev555, А зачем матлаб - такую задачу надо решать в уме, где-то за 5 секунд, не больше.
2
 Аватар для Зосима
5245 / 3573 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.01.2020, 21:49
megalev555, с твоего позволения поделюсь решением со всеми, может еще кому пригодится.
В общих чертах, задаются начальная точка, шаг и точности, как обычно в численных методах.
Из начальной точки начинаем плясать в сторону уменьшения производной, пока знак производной не поменяется. Так находится интервал поиска минимума на первой итерации.
Далее из значений функции и ее производной на концах строится кубическая интерполянта и из коэф-тов определяется ее минимум. Далее сравниваются производные и приращение аргумента с заданными точностями и повторяется пока не сойдется.
Понятно, что встроенный fminsearch быстрее и точнее, но это в копилку еще один вариант ручной реализации поиска минимума.
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
clear, clc
close all
 
% задаем функцию и производную
f = @(x) 2*x.^2 + 16./x; % создаем функцию
%f = @(x) 2*(x-3).^2;
h = 1e-6; % приращение (нужно для расчета производной) f' = (f(x+h)-f(x-h))/(2h)
df = @(x) (f(x+h)-f(x-h))/(2*h); % производная (для любой функции)
 
% Шаг 1 (задаем параметры)
x0 = 1;
delta = 1;
eps1 = 0.01;
eps2 = 0.03;
 
x1 = x0;
df1 = df(x1); % Шаг 2
 
% определяем начальный интервал поиска
k = 0;
flag = 1; % если 0, то минимум найден
if df1 < 0 % Шаг 3 - проверяем знак производной
    x2 = x1 + 2^k*delta;
    while df(x1)*df(x2) > 0
        k = k+1;
        x1 = x2;
        x2 = x1 + 2^k*delta;
    end
elseif df1 > 0
    x2 = x1 - 2^k*delta;
    while df(x1)*df(x2) > 0
        k = k+1;
        x1 = x2;
        x2 = x1 - 2^k*delta;
    end
else % df = 0 - попали в точку минимума!
    if df(x1) == 0
        xm = x1;
    else
        xm = x2;
    end
    flag = 0; % минимум нашли
end
 
while flag  % делаем бесконечный цикл, так как мы не знаем, когда найдем минимум
    % Шаг 4
    % интервал поиска
    %[x1, x2]
    f1 = f(x1);
    f2 = f(x2);
    df1 = df(x1);
    df2 = df(x2);
    % Шаг 5
    % считаем параметры
    z = 3*(f1-f2)/(x2-x1) + df1 + df2;
    if x1 < x2
        w = sqrt(z^2 - df1*df2);
    else
        w = -sqrt(z^2 - df1*df2);
    end
    mu = (df2 + w - z)/(df2 - df1 + 2*w);
    % находим минимум куб. сплайна:
    if mu < 0
        xm = x2;
    elseif (mu>=0)&(mu<=1)
        xm = x2 - mu*(x2-x1);
    else
        xm = x1;
    end
    % Шаг 6 - проверяем условие убывания
    while f(xm) > f(x1)
        xm = xm - 1/2*(xm - x1);
    end
    % Шаг 7 - проверяем условия окончания
    if (abs(df(xm)) < eps1) & ( abs((xm-x1)/x1) < eps2 ) % если оба условия выполнены
        flag = 0; % опускаем флаг, чтобы выйти из цикла
    else % если что-то не сошлось - пересчитываем по новой
        if df(xm)*df(x1)<0
            x2 = x1;
            x1 = xm;
        elseif df(xm)*df(x2)<0
            x2 = x2;
            x1 = xm;
        elseif df(x1) == 0
            xm = x1; flag = 0; % минимум нашли
        else
            xm = x2; flag = 0; % минимум нашли
        end
    end
    x_min = xm; % сохраняем результат
end
 
x_min % результат
 
%точное решение
Xmin = fminsearch(f, x0) % ищем минимум начиная от точки х=0
err = abs(x_min - Xmin) % разница между найденным и точным решением
 
% рисуем
fplot(f,[x_min-delta, x_min+delta]) % рисуем функцию на интервале (-1,5)
hold on
plot(x_min,f(x_min),'*r') % рисуем точку минимума
grid on
Миниатюры
Найти безусловный минимум функции одной переменной  
1
212 / 352 / 62
Регистрация: 09.06.2015
Сообщений: 1,458
29.01.2020, 22:50
Видимо, я всё позабыл, но мне кажется, что безусловный минимум этой функции равен бесконечности со знаком “-“. А условный минимум, то есть, при условии, что x>0, достигается примерно при x=1.587401052 и равен (тоже примерно) 15.1190526, он же, в данном случае, минимум локальный.
0
Эксперт по математике/физике
 Аватар для SSC
3390 / 1913 / 571
Регистрация: 09.04.2015
Сообщений: 5,365
30.01.2020, 07:19
Цитата Сообщение от one man Посмотреть сообщение
Видимо, я всё позабыл,
Нет, кое что Вы отлично помните.
Точка минимума -0. Величина минимума -бесконечность.
А Зосима, несколько поспешил.
При начальной точке
x0 = -10;
Его программа просто уходит в бесконечный цикл.
При этом fminsearch находит
Xmin =

-7.1054e-15

А сообщение AlMih про 5 секунд очень актуально
0
574 / 363 / 186
Регистрация: 11.01.2019
Сообщений: 1,220
30.01.2020, 08:24
Цитата Сообщение от SSC Посмотреть сообщение
сообщение AlMih про 5 секунд очень актуально

Не по теме:

в связи со старыми и новыми санкциями ?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.01.2020, 08:24
Помогаю со студенческими работами здесь

Найти производную функции одной переменной
Найти производную функции y=\ln \frac{x^2}{1-x^2}

Найти производную функции одной переменной.
Найти производную функции одной переменной

Найти экстремумы функции одной переменной
Найти экстремумы функции 2x2-12x следующими методами: равномерного поиска, деления интервала пополам, дихотомии, золотого сечения. ...

Найти экстремумы функции одной переменной
Пожалуйста с подробным решением так как оно очень нужно! Заранее спасибо! Найти экстремумы функции f(x)=x2lnx

Найти максимум произвольной функции одной переменной
Написать функцию пользователя, позволяющую найти максимум произвольной функции одного переменного, аргумент которой задан массивом из «n»...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru