Одним из важных применений подстановок является проверка правильности решений уравнений и систем уравнений. Ниже дан пример такой проверки:
> eqs:={x+y+z=6,y/x=z-1,z-x=2};
> res:=solve(eqs,{х,у,z});
res: = {z = -2, у = 12, x = -4}, {y = 2, z = 3, x = 1}
> subs(res,eqs);
{2 = 2, 6 = 6, -3 = -3}
> subs(c=a-b,(а^2-2*а*b+b^2)/с);
Здесь задана система из трех нелинейных уравнений, которая затем решена функцией solve. В конце примера с помощью функции подстановки выполнена проверка правильности решения. Оно верно, поскольку у всех уравнений значение левой части совпадает со значением правой части.
3.6.5. Подстановки правил и подвыражений
Для применения некоторого правила или списка правил rule к некоторому выражению expr используется функция applyrule(rule, expr). Применение этой функции достаточно очевидно:
> restart:applyrule(f(а::integer*х)=a*f(х),f(2*х)+g(х)-p*f(х));
2f(x)+g(x)-pf(x)
> applyrule(х^2=у,f(x^2,ln(cos(x)+2*x^2)));
f(y, ln(cos(x) + 2y))
> applyrule(b+c=x,f(a+b+c+d));
f(x + a + d)
Эта функция более мощная, чем subs, но она не выполняет математические вычисления, подобно тому, как это делает функция algsubs(a=b, f, v, options) с необязательными двумя последними параметрами. Проанализируйте следующие примеры
> algsubs(а^2=0, ехр(2-а+а^2/2-а^3/6));
e (2-a)
> applyrule(а^2=0, ехр(2-a+a^2/2-a^3/6));
e (2-a-1/6a³)
и различия между этими функциями подстановки станет ясным.
3.6.6. Функции сортировки и селекции
Сортировка и селекция выражений широко используются в практике символьных преобразований. Нередко она важна в статистических расчетах, обеспечивая повышение их точности.
Для выполнения сортировки служит функция sort, применяемая в одной из следующих форм:
sort(L)
sort(L, F)
sort(A)
sort(A, V)
Здесь L — список сортируемых значений, F — необязательная булева процедура с двумя аргументами, А — алгебраическое выражение, V — необязательные дополнительные переменные.
Примеры применения этих функций (файл sortsel)
> restart;
> sort([у, s,f,a,c,i] ); t([2,5,1,7,3,8]);
[a, c, f, i, s, y]
t([2, 5,1,7, 3, 8])
> sort([y,s,f,a,c,i]);
[a, c, f, i, s, y]
> sort([у,s,f,а,с,i],lexorder);
[a, c, f, i, s, y]
> sort(1+х^4-х^2+х);
x 4- x 2+ x + 1
> sort(у*х^2+х*у+у-х^2+х^4*у^5);
x 4y 5+ x 2y - x 2+ xy + у
> sort((y+z+x)/(y-x-z),{x, y})
;
> names:= ["Peter","Anna","Vladimir", "Ivan"];
names := ["Peter", "Anna", "Vladimir", "Ivan"]
> sort(names);
["Anna", "Ivan", "Peter", "Vladimir"]
> integers:=[$10..30];
integers := [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]
Если функция сортировки меняет порядок расположения членов в выражении (или порядок расположения выражений), то другая функция — select — служит для выделения требуемого выражения:
select(f, е)
select(f, е, b1, ..., bn)
Как бы обратной ей по действию служит функция remove, устраняющая заданные выражения:
remove(f, е)
remove(f, е, b1,.... bn)
В этих функциях f — процедура, возвращающая логическое значение, е — список, множество, сумма, произведение или функция, b1, …, bn — необязательные дополнительные аргументы.
Ниже даны примеры применения этих функций (файл sortsel):
> integers := [$10..30]:
> select(isprime,integers);
[11, 13, 17, 19, 23, 29]
> remove(isprime,integers);
[10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, 26, 27, 28, 30]
> f:=2*ln(a*x)*exp(x)*ln(y);
f: = 2 ln(ax)e xln(y)
> select(has,f,x);
ln(ax)e x
> remove(has,f,x);
2 ln(y)
> f:=indets(f);
f: = {a, x, y, e x, ln(y), ln(ax)}
> select(type,f,name);
{a, x, y}
> remove(type,f,name);
{е x, ln(y), ln(ах)}
> f:=2*ln(x)*(y+1);
f:= 2 ln(x)(y + 1)
> c:=remove(has,f,x);
с:= 2y + 2
> f/c;
> select(has,f,x);
ln(x)
Maple имеет также оператор селекции А[expr]. Его действие поясняют следующие примеры (файл sortsel):
> restart;
> S:=[a+b*c,х^2,с,1,2,3];
S:=[a+ bc, x²,c, 1, 2, 3]
> S[1];
a + bc
> S[1..2];
[a+bc, x²]
> S[-2..-1];
[2, 3]
> S[3..3];
[c]
> S[3..2];
[]
> S[4..6];
[1, 2, 3]
> X:=S[];
Читать дальше
Конец ознакомительного отрывка
Купить книгу