2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Минимизация в Maple
Сообщение31.12.2006, 16:19 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Код:
> a:=proc(a1,a2,a3,x) a1*cos(x)+a2*cos(2*x)+a3*cos(3*x) end proc;
                                  a := proc(a1, a2, a3, x) a1*cos(x) + a2*cos(2*x) + a3*cos(3*x) end proc;
> FC:=proc(a1,a2,a3,n) evalf(Int(exp(I*(a(a1,a2,a3,x)+n*x)),x=-Pi..Pi)/(2*Pi)) end proc;
           FC := proc(a1, a2, a3, n) evalf((Int(exp(I*(a(a1, a2, a3, x) + n*x)), x = -Pi .. Pi))/(2*Pi)) end proc;
> FM:=proc(a1,a2,a3) local A,i,j,k;A:=array(1..4);for k to 4 do A[k]:=FC(a1,a2,a3,k-1) end do;sum(sum((abs(A[i])-abs(A[j]))^2,j=1..i-1),i=2..4) end proc;
FM := proc(a1, a2, a3)
local A, i, j, k;
  A := array(1 .. 4);
  for k to 4 do A[k] := FC(a1, a2, a3, k - 1) end do;
  sum(sum((abs(A[i]) - abs(A[j]))^2, j = 1 .. i - 1), i = 2 .. 4);
end proc;
> FM(1.2397215,1.5309297,0);
                                                                   0.0077811308
> with(Optimization);
                             [ImportMPS, Interactive, LPSolve, LSSolve, Maximize, Minimize, NLPSolve,

  QPSolve]
> Minimize(FM(x,y,z),initialpoint={x=1.2397215,y=1.5309297,z=0});
Error, (in Optimization:-NLPSolve) wrong number (or type) of arguments


Почему не хочет минимизировать? С другой функцией работает:

Код:
> FF:=proc(x,y,z)3*x^2+2*y^4+z*y^2-2*x+4*y+z^6-12*z end proc;
                                 FF := proc(x, y, z) 3*x^2 + 2*y^4 + z*y^2 - 2*x + 4*y + z^6 - 12*z end proc;
> Minimize(FF(x,y,z),initialpoint={x=1.2397215,y=1.5309297,z=0});
      [-13.5837606045537598, [x = 0.333333334104796986, z = 1.13983814611687517,   y = -0.675063823297239906]]

 Профиль  
                  
 
 
Сообщение31.12.2006, 16:39 
Заслуженный участник
Аватара пользователя


09/10/05
1142
А если задать вместо
Код:
a1, a2, a3
сразу числовые значения?

По-моему Мэйпл и пишет по этому: wrong type of argument (по видимому не понимает, что это integer) В любом случае initialpoint на мой взгляд выглядит не очень хорошо....

 Профиль  
                  
 
 
Сообщение02.01.2007, 12:30 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Capella писал(а):
А если задать вместо
Код:
a1, a2, a3
сразу числовые значения?


Не понял, в каком месте? Мне нужно минимизировать эту функцию, которая зависит именно от переменных $a1,a2,a3$ (естественно, их можно обозначить и другими буквами). Как я буду минимизировать, если сразу задам числовые значения?

 Профиль  
                  
 
 
Сообщение02.01.2007, 14:48 
Заслуженный участник
Аватара пользователя


09/10/05
1142
Someone

Так это переменные от которых зависит функция или константы? Я так поняла, что Вы рассматривате функцию от одной переменной - $x$. Для меня возникает тогда неразрешимая ситуация, поскольку эти значения могут быть разными, то экстремальные места функции будут и по-разному определены (переменные будут по разному влиять на гармонику косинуса). Поэтому я и говорю, что программа возможно даёт обратно конкретные значения минимума, как во втором случае, и возможно имеет проблемы, если эти значения не определенны числами.
Кроме того, уже в конце, почему Вы задаёте эту функцию

Код:
Minimize (FM(x,y,z), initialpoint .....


снова от 3 переменных? (Опять-же во втором случае всё кристально ясно).

 Профиль  
                  
 
 
Сообщение02.01.2007, 19:57 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Нет, с количеством переменных всё в порядке. Проблема, похоже, в том, что внутри минимизируемой функции есть интеграл, зависящий от аргументов минимизируемой функции как от параметров. И что теперь с этим делать?

 Профиль  
                  
 
 
Сообщение05.01.2007, 10:24 
Заслуженный участник
Аватара пользователя


03/03/06
648
Someone

Сейчас к сожалению у меня под рукой нет Maple 10 --- не могу использовать функцию оптимизации.
Но насколько я понял суть проблемы дело в следующем:
Maple 10 при такой оптимизации использует по умолчанию функцию NLPSolve, а она в свою очередь, если я не ошибаюсь, основана на методе SQP и он не может справиться с выражением для целевой функции (интегралы не позволяют), т.е. до взятия начального приближения он просто не доходит программно.
Вот моя гипотеза.

Поэтому, как Вы правильно заметили, надо бороться с интегралами.

 Профиль  
                  
 
 
Сообщение05.01.2007, 15:35 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
reader_st писал(а):
Поэтому, как Вы правильно заметили, надо бороться с интегралами.


К сожалению, они ни в каком смысле не берущиеся.

 Профиль  
                  
 
 
Сообщение05.01.2007, 16:38 
Экс-модератор
Аватара пользователя


30/11/05
1275
Someone писал(а):
К сожалению, они ни в каком смысле не берущиеся.


Может быть, тогда попробовать самому реализовать на Maple какой-нибудь алгоритм минимизации? Или попробовать аппроксимировать интеграл какой-нибудь более простой функцией.

 Профиль  
                  
 
 
Сообщение05.01.2007, 17:02 
Заслуженный участник
Аватара пользователя


03/03/06
648
Someone

Ну тогда придется какой-нибудь продвинутый алгоритм перебора. Судя по начальному приближению Вы знаете предел изменения неизвестных переменных.

Аурелиано Буэндиа
К вопросу о пакете оптимизации в Maple 10. Сделано довольно много процедур, которые берут большинство оптимизациооных задач + еще масса дополнительных опций.

 Профиль  
                  
 
 
Сообщение05.01.2007, 18:19 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
Речь идёт о следующем: подобрать функцию $a(t)$ (периодическую, с периодом $2\pi$), чтобы разложение в ряд Фурье функции $e^{ia(t)}$ имело заданное количество равных по модулю коэффициентов Фурье $c_n=\frac 1{2\pi}\int\limits_{-\pi}^{\pi}e^{i(a(t)+nt)}dt$. Естественно, желательно, чтобы эти коэффициенты по модулю были наибольшими.

Начальное приближение - это значения параметров в функции $a(t)=a_1\cos t+a_2\cos 2t$, при которых равны по модулю 5 коэффициентов ($|c_{-2}|=|c_{-1}|=|c_0|=|c_1|=|c_2|$). Подбирал я их графически: строил в большом масштабе графики и подбирал параметры, чтобы три кривые пересекались в одной точке (из-за чётности функции $c_{-n}=c_n$). Но дальше это уже становится слишком громоздким, и я хотел воспользоваться какой-нибудь готовой функцией минимизации, чтобы минимизировать сумму квадратов разностей модулей коэффициентов Фурье, раз уж знаю, что минимум должен быть равен нулю. В Mathematica 4.1 нужной функции не нашлось, в Maple 9.5 вроде бы есть, но не справляется. Придётся, видимо, самому писать алгоритм минимизации.

 Профиль  
                  
 
 Re: Минимизация в Maple
Сообщение22.12.2009, 00:01 


28/05/08
2
Это работать и не будет. В Maple, насколько я знаю, модули не используют перекрестную адрессацию... Иными словами, для минимизации/максимизации нужно задать единичную функцию, а не набор из нескольких увязанных функций (как во втором случае).

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group