2014 dxdy logo

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

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




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


23/07/05
17976
Москва
Код:
> 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
17976
Москва
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
17976
Москва
Нет, с количеством переменных всё в порядке. Проблема, похоже, в том, что внутри минимизируемой функции есть интеграл, зависящий от аргументов минимизируемой функции как от параметров. И что теперь с этим делать?

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


03/03/06
648
Someone

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

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

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


23/07/05
17976
Москва
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
17976
Москва
Речь идёт о следующем: подобрать функцию $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, Супермодераторы



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

Сейчас этот форум просматривают: DariaRychenkova


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

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