substitute subexpressions into an expression
algsubs(a = b, f)
algsubs(a = b, f, v)
algsubs(a = b, f, v, options)
name or list or set of names
The function algsubs performs an algebraic substitution, replacing occurrences of a with b in the expression f. It is a generalization of the subs command, which only handles syntactic substitution. The purpose of algsubs can be seen from these five examples where subs fails.
algsubs( s^2=1-c^2, s^3 );
algsubs( a+b=d, 1+a+b+c );
algsubs( a*b=c, 2*a*b^2-a*b*d );
algsubs( a*b/c=d, 2*a*b^2/c );
algsubs( a^2=0, exp(2-a+a^2/2-a^3/6) );
Where the expression being replaced has more than one variable, the result is ambiguous. For example, should algsubs(a+b=c, 2*a+b) return 2⁢c−b or a+c? What should algsubs(a+b=c, a+Pi*b) return? Should algsubs(x*y^2=c, x*y^4) return c⁢y2 or c2x? The algsubs command provides two modes for breaking ambiguities, an exact mode and a remainder mode (the default).
Both modes depend on the ordering of the variables that appear in a. This can be set to a specific ordering by specifying the variables v in a list as a third argument. If the variables are not explicitly given, the set of indeterminates in a, b which are functions and names defines the variables and their order. Also, the result is collected in the variables given.
Both modes require that monomials in a divide monomials in f for a substitution to occur. A monomial u in a divides a monomial v in f if for each variable x in u, then either 0<degree⁡u,x≤degree⁡v,x or degree⁡v,x≤degree⁡u,x<0.
For example, the monomial x2y2 divides the monomial x3y2 but not xy2 or x2y.
Note: The algsubs command currently works only with integer exponents.
Note that the requirement for monomials in a to divide monomials in f means that the negative powers of u in the following example are not substituted, and must be handled separately as shown.
f := a/u^4+b/u^2+c+d*u^2+e*u^4;
Hence, to substitute for both positive and negative powers.
If the option remainder is specified, or no option is specified, a generalized remainder is computed. If the leading monomial of a divides the leading monomial of f then the leading monomial of f is replaced with the appropriate value, and this is repeated until the leading monomial in f is less than the leading monomial in a.
If the option exact is specified, then if the value a being replaced is a sum of terms ai, and the value f it is replacing is the sum of terms fi, then the replacement is made if and only if each monomial ai divides fi and sum⁡ai=c⁢sum⁡fi that is, the coefficients must all be the same. For example, algsubs( x^2+2*y=z, 3*x^2+6*y ) succeeds with c=3 but algsubs(x^2+2*y=z, 3*x^2+3*y) fails.
The algsubs command goes recursively through the expression f. Unlike the subs command it does not substitute inside indexed names, and function calls are applied to the result of a substitution. Like subs, it does not expand products or powers before substitution. Hence algsubs( x^2=0, (x+1)^3 ) yields x+13.
Download Help Document
What kind of issue would you like to report? (Optional)