Альтернатива maximixe/minimize, есть?

Форум пользователей пакета Maple

Модератор: Admin

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Альтернатива maximixe/minimize, есть?

Сообщение jambulat » Пн янв 21, 2008 12:16 am

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

Код: Выделить всё

maximize(f_x_y(x,y),x=1.5..3.0,y=0..100,location);

(x,y) воспринимаются системой как симфолы, а если учесть что структура f достаточно сложна и ее еще пытаются символьно дифференцировать, то система захлебывается и пишет что-то типа "слишком большая глубина рекурсии" в то же время можно написать

Код: Выделить всё

plot3d(f_x_y,1.5..3.0,0..100);

и довольно быстро строится трехмерный график...
Может существует вариант функций maximize/minimize, где не нужно писать имен аргументов целевой функции? Чтобы как в cлучае plot3d можно было бы системе подать что-то вроде

Код: Выделить всё

maximize(f_x_y,1.5..3.0,0..100,location);
...
Подскажите, пожалуйста, кто-нибудь, а?))

Андрей М.
Сообщения: 239
Зарегистрирован: Чт апр 21, 2005 3:15 pm

Сообщение Андрей М. » Пн янв 21, 2008 10:11 am

Попробуйте процедуру Аладьева minmax3d из его б-ки. Она в ряде случаев дает результат, когда стандартная бессильна. См. пример справки.

Irmantas
Сообщения: 589
Зарегистрирован: Ср апр 27, 2005 8:49 pm
Откуда: Литва, Каунас

Сообщение Irmantas » Пн янв 21, 2008 11:02 am

Какая у вас функция f_x_y(x,y)? Может можно её ещё упрастить.

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Сообщение jambulat » Пн янв 21, 2008 2:35 pm

Спасибо за решение, надеюсь, оно поможет когда я установлю библиотеку)) А установить для 10 версии что-то пока не получается... Скопировал в LIB UserLib, добавил в него maple.hdb, добавил в Users/maple10.ini строку

Код: Выделить всё

libname:= "c:/program files/maple 10/lib/userlib", libname:


пишу

Код: Выделить всё

with(userlib);

не находит...

А функцию упростить не получится, она еще использует процедуру

Код: Выделить всё

>my_sqrt := proc(x)
> local t;
> t:=sqrt(x);
> if(argument(evalf(t))<evalf(Pi) and argument(evalf(t))>=0)
> then t;
> else -t;
> end if;
> end proc;

Так что из-за того что функции maximize/minimize пытаются работать символьно система не может вычислить логическое выражение. Если я пишу просто

Код: Выделить всё

>my_sqrt:=(x)->sqrt(x);

то она закапывается из-за сложности функции f_x_y

Андрей М.
Сообщения: 239
Зарегистрирован: Чт апр 21, 2005 3:15 pm

Сообщение Андрей М. » Пн янв 21, 2008 5:56 pm

Ув. Jambulat, судя по сказанному, библиотека Аладьева у вас установлена, но к библиотечной организации не применима процедура with. Для проверки наличия б-ки можно:

1. выполнить, например, вызов eval(minmax3d);
2. цепочку команд в GUI

help -> What's New -> New Means... -> Aladjev's Library

Это указано в прилагаемом к б-ке файле «ReadMe.htm». В б-ке для вашей задачи может оказаться полезной и процедура fminimax.

алексей_алексей
Сообщения: 1776
Зарегистрирован: Вс май 01, 2005 9:02 pm

Сообщение алексей_алексей » Вт янв 22, 2008 2:44 am

Пытался тестировать возможности Maple в решении систем нелинейных уравнений. Понимаю, со мной многие не согласятся, но что делать с фактами? Слабенько решает Maple или не решает их вовсе. Всё дело в зашитых алгоритмах, а не в переборе названий. Если профессор Аладьев сумел продвинуть математику в этом направлении, тогда, да, но только в чём выразилось продвижение? Имея небольшой опыт решения нелинейных уравнений, могу предположить, что оптимизационные задачи большей частью базируются на них, и начинать, скорее, надо с рассмотрения самой задачи. Всё к тому, что с более ли менее достойной постановкой без самостоятельного программирования не справиться. Могу ошибаться.

AverGV
Сообщения: 12
Зарегистрирован: Вт окт 18, 2005 4:21 pm

Сообщение AverGV » Пт фев 01, 2008 10:15 pm

Можно попробовать функцию Maximize пакета Optimization - она лучше работает!

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Сообщение jambulat » Ср мар 12, 2008 8:06 pm

AverGV писал(а):Можно попробовать функцию Maximize пакета Optimization - она лучше работает!

Спасибо!!! Неделю назад прочел это Ваше сообщение, теперь усиленно пользуюсь Maximize, она полностью удовлетворяет моим нуждам!))

jambulat
Сообщения: 13
Зарегистрирован: Вт ноя 20, 2007 2:59 am

Сообщение jambulat » Чт апр 03, 2008 2:31 am

Кто-нибудь, подскажите, пожалуйста, можно ли как-то в коде использовать автоматически, не вручную полученные аргументы, при которых наблюдается максимум/минимум?
Как из такой записи

Код: Выделить всё

Maximize(2*x^2+y+2*y^2, {y^2-x<=2, 2*x+y<=6});

[18.0000000000000072,[x = 2.00000000000000044, y = 2.00000000000000044]]

присвоить переменной t значение 2.00000000000000044?

Андрей М.
Сообщения: 239
Зарегистрирован: Чт апр 21, 2005 3:15 pm

Сообщение Андрей М. » Чт апр 03, 2008 8:01 am

> Z:=[18.0000000000000072,[x = 2.00000000000000044, y = 2.00000000000000044]]:
> R:=rhs(Z[2][1]);

R := 2.00000000000000044