Maple — подстановка в уравнение

У меня возникли трудности с настройкой функции, в которой я подставляю x1[1] и x2[1]. Любая помощь будет принята с благодарностью.

Мой код:

 restart;
 with(LinearAlgebra);
 x1[1] := -2+1606*alpha;
 x2[1] := 2+400*alpha;
 f := proc (alpha) options operator, arrow; (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2 end proc;

Вывод f оставляет x1[1] и x2[1] и не заменяет их на -2+1600*alpha и 2+400*alpha по желанию.

f(0); не дает желаемого результата 409.

Я могу физически заменить -2+1606*alpha и 2+400*alpha в себе, как показано функцией g ниже. Хотя это не то, что я хотел бы, поскольку я хотел бы, чтобы он брал все, что установлено для x1[1] и x2[1], а не делал это вручную.

g := proc (alpha) options operator, arrow; (1-(1606*alpha-2)^2)^2+100*(2+400*alpha-(1606*alpha-2)^2)^2 end proc
g(0);

Здесь g(0); дает 409 по желанию.

Ниже я прикрепил фотографию того, как вывод клена отображается на моем экране.

введите здесь описание изображения


person Student201    schedule 11.05.2017    source источник
comment
Привет Студент201. Мне нравится твой вопрос. Он хорошо продуман и соответственно не оставляет ничего для воображения читателя. Одно замечание: вы можете форматировать встроенный код с помощью обратных кавычек (`).   -  person Therkel    schedule 11.05.2017


Ответы (1)


Когда вы применяете операторную процедуру к выражению, Maple делает это до вычисления. В выражении

 f := proc (alpha) options operator, arrow; (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2 end proc;

что то же самое, что использовать обозначение «стрелка»

 f2 := alpha -> (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2;

затем Maple ищет любые alpha. Здесь ничего нет. Когда вы затем вызываете f(0), выражение оценивается с (несуществующим) alpha из вызова оператора. Таким образом, f(x) = f(0) для любого x. Со страницы справки:

Использование стрелки опции также отключает правила упрощения Maple, которые добавляют любые нелокальные имена в выражении оператора в список параметров. Эта опция не имеет значения для модулей.

Вместо этого вы можете использовать unapply. оператор, который возвращает оператор вычисленного выражения. Это станет немного яснее, если вы определите переменную expr в качестве содержимого вашей функции.

expr := (-x1[1]^2+1)^2+100*(-x1[1]^2+x2[1])^2;

f := alpha -> expr;
h := unapply(expr, alpha);

h(0); # returns 409
person Therkel    schedule 11.05.2017