Символьная квадратичная оптимизация с Maple

Я пытаюсь минимизировать квадратичную энергию с ограничениями линейного равенства в Maple. В настоящее время я выпускаю такие вещи, как:

with(Optimization):
p := (t) -> c3*t^3 + c2*t^2;
m := Minimize(int(diff(p(t),t)^2,t=0..1),{eval(p(t),t=1)=1,eval(diff(p(t),t),t=1)=0});

но это, кажется, дает мне численно оптимизированное решение с ошибкой с плавающей запятой:

m := [1.19999999999997, [c2 = 3.00000000000000, c3 = -2.00000000000000]]

(Правильный ответ m:= [6/5,[c2=3,c3=-2]])

Есть ли способ вычислить решение символически с помощью Maple?

Я предпочел бы не разрабатывать лагранжиан самостоятельно. Я надеюсь на флаг типа symbolic=true.


person Alec Jacobson    schedule 21.08.2013    source источник
comment
Пакет оптимизации предназначен исключительно для численных решений.   -  person Carl Love    schedule 21.08.2013
comment
OK. Затем, возможно, используя другой пакет.   -  person Alec Jacobson    schedule 21.08.2013
comment
Я говорю, просто выработайте решение на бумаге. Проблема крошечная.   -  person user327301    schedule 21.08.2013
comment
Да, это был игрушечный пример. Я хочу решить с помощью полиномов произвольной степени (например, 1000).   -  person Alec Jacobson    schedule 21.08.2013
comment
Решение, которое я дал, будет работать независимо от степени, но оно может быть бесполезным, если вы не разрешите числовое решение.   -  person Carl Love    schedule 21.08.2013


Ответы (1)


Примените множители Лагранжа шаг за шагом. Это довольно легко сделать.

p:= t-> c3*t^3+c2*t^2:
Obj:= int(D(p)^2,  0..1):
Con:= {p(1)=1, D(p)(1)=0}:
L:= Obj - l1*lhs(Con[1]) - l2*lhs(Con[2]):
solve(Con union {diff(L,c3), diff(L,c2)});
              /                      12       -1\ 
             { c2 = 3, c3 = -2, l1 = --, l2 = -- }
              \                      5        5 / 
eval(Obj, %);
                               6
                               -
                               5
person Carl Love    schedule 21.08.2013
comment
Поэтому я также выписал лагранжиан alecjacobson.com/weblog/?p=3425. , но я заметил, что с полиномами степени ~ 15 или около того решения, выходящие из решения, никуда не годятся: похоже, они больше не удовлетворяют ограничениям, если я оцениваю полином с этими коэффициентами. Является ли solve ненадежным для обработки полигонов большей степени? (Кстати, легко ли загрузить фактические значения c2, c3 и т. д., найденные с помощью решения, в p, чтобы я мог оценить: p(1)?) - person Alec Jacobson; 21.08.2013
comment
Я перешел по вашей веб-ссылке, но вижу только исходную проблему, а не проблему со степенью 15. Можете ли вы опубликовать пример, где решение не работает? Вы можете использовать команду assign для назначения значений c2 и c3. - person Carl Love; 22.08.2013
comment
Я не понимаю, как вы можете получить символьное решение с какой-либо практической ценностью из решить для многочлена высокой степени, но вы не должны получать что-то, что не удовлетворяет ограничениям; это было бы ошибкой. - person Carl Love; 22.08.2013
comment
Вот 15 градусов для справки p := (t) -> c02*t^2+c03*t^3+c04*t^4+c05*t^5+c06*t^6+c07*t^7+c08*t^8+c09*t^9+c10*t^10+c11*t^11+c12*t^12+c13*t^13+c14*t^14+c15*t^15: После использования команды assign (спасибо) я вижу, что solve действительно удовлетворяет ограничениям. Я оценивал это численно и строил график функции. Это дало мне мусор. Интересно, что результирующие коэффициенты от Minimize сильно отличаются. Хотя Minimize удовлетворяет ограничениям только до одинарной точности. - person Alec Jacobson; 22.08.2013
comment
Общеизвестно, что полиномиальные решения высокой степени численно неустойчивы. Но только потому, что он, кажется, не удовлетворяет полиному, когда вы снова подключаете его, не означает, что корень не был точным для полного указанного количества цифр. В качестве эксперимента, чтобы понять, что я имею в виду, попробуйте expand((x-10.01)^15); eval(%, x= 10.01); - person Carl Love; 22.08.2013
comment
Согласованный. Хороший пример. Я должен был затаить дыхание, пока не проверю символическое решение. - person Alec Jacobson; 22.08.2013