Я давно отсутствовал в Mathematica и пытаюсь починить некоторые старые ноутбуки из v4, которые больше не работают под v11.Я тоже немного ржавый.
Я пытаюсь использовать функциональную минимизацию для подгонки полинома переменной степени к произвольной функции (F), учитывая начальное предположение (ao) и интересующую область (d).Обратите внимание, что, хотя F произвольно, его природа такова, что интеграл от произведения F и полинома (или F ^ 2) всегда можно оценить алгебраически.
Для примера я буду использоватьследующие входные данные:
ao = { 1, 2, 3, 4 }
d = { -1, 1 }
F = Sin[x]
Для этого я создаю массив «индексированных» переменных
polyCoeff = Array[a,Length[a],0]
Результат: polycoeff = {a [0], a [1], a [2], a [3]}
Затем я создаю сам многочлен, используя следующее
genPoly[{},x_] := 0
genPoly[a_List,x_] := First[a] + x genPoly[Rest[a],x]
poly = genPoly[polyCoeff,x]
Результат: poly = a [0] + x (a [1] + x (a [2] + xa [3]))
Затем я определяю свою целевую функцию как интеграл от квадрата ошибки разности междуэто поли и функция, которую я пытаюсь подогнать:
Q = Integrate[ (poly - F[x])^2, {x, d[[1]],d[[2]]} ]
результат: Q = 0.545351 - 2. a [0.] ^ 2 + 0.66667 a [1.] ^ 2 + .....
И здесь все рушится.Поли выглядит так, как я и ожидал: многочлен от x с коэффициентами, похожими на a [0], a [1], a [2], ... Но, Q не совсем то, что я ожидал.Я ожидал и получил новый многочлен.Но не коэффициенты содержали a [0.], A [1.], A [2.], ...
Следующим шагом является создание первоначального предположения для FindMinimum
init = Transpose[{polyCoeff,ao}]
Результат: {{a [0], 1}, {a [1], 2}, {a [3], 3}, {a [4], 4}}
Это выглядит нормально.
Но когда я вызываю FindMinimum, я получаю ошибку, потому что коэффициенты передаются в цель (a [0.], A [1.], ...)не совпадают с теми, которые были переданы в первоначальном предположении (a [0], a [1], ...).
S = FindMinimum[Q,init]
Так что я думаю мой вопрос, как мне сохранитьИнтегрировать от изменения аргументов до моих коэффициентов?Но я открыт и для других подходов.Имейте в виду, что это «устаревшая» работа, которую я действительно не хочу полностью обновлять.
Большое спасибо за любую помощь.