Решение задачи Оптимизация на окружности с Acmp

С пояснением   Просмотров: 91


Найдите максимальное значение функции f(x, y) = Ax + By при условии, что \( x^2 + y^2 = R^2 \), и аргументы, при котором оно достигается.


Код

#include<bits/stdc++.h>

using namespace std;

int main()
{
    double a, b, r;
    cin >> a >> b >> r;
    double x = (a * r)/sqrt(a * a + b * b);
    double y = (b * r)/sqrt(a * a + b * b);
    cout << fixed << setprecision(6) << a * x + b * y << endl;
    cout << fixed << setprecision(6) << x  << " ";
    cout << fixed << setprecision(6) << y;
    return 0;
}

         

Администратор Photo Автор: Администратор


Код

import math
a, b, r = map(float, input().split())
x = (a * r) / math.sqrt(a * a + b * b)
y = (b * r) / math.sqrt(a * a + b * b)
print('%.6f'%(a * x + b * y))
print('%.6f'%x, '%.6f'%y, sep=" ")

         

Администратор Photo Автор: Администратор


Так как \( A, B > 0 \), то ясно, что искомый максимум достигается при \( x, y > 0 \). Таким образом,
\( y=\sqrt{R^2-x^2} \). Осталось максимизировать функцию \( Ax+B\sqrt{R^2-x^2} \). Для этого найдём её производную и приравняем её нулю:
$$ \scriptsize \left(Ax+B\sqrt{R^2-x^2}\right)^\prime=A-B\frac{x}{\sqrt{R^2-x^2}} $$
Решив это уравнение, получаем:
$$ x = \frac{A * R}{\sqrt{A^2-B^2}} $$
$$ y = \frac{B * R}{\sqrt{A^2-B^2}} $$

Не забываем, что нужно вывести сумму \( x + y \), затем сами эти числа, используя функцию setprecision.
Если вы ещё не знаете про эту функцию, советую прочитать следующую статью Функция Setprecision


Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться