mathematica——代数操作


0介绍

代数可分为初等代数和抽象代数。初等代数是我们在高中都学过的。Mathematica可以很好地解决初等代数中的问题,本章中的许多案例向您展示了如何利用这些特性。Mathematica目前还没有对抽象代数的深入支持,抽象代数涉及到组、环和字段等构造。但是,有一些第三方的包可以用来研究抽象代数,我提供了一些参考。

1.解代数方程组

问题

你要解一个含未知数的代数方程

解决方案

使用 Solve 处理left-hand-side(左边) == right-hand-side(右边) 和作为第二个参数提供的未知变量(或多个变量)。结果作为规则输出。

Solve[x^2 - 2 x - 3 == 0, x]
{{x -> -1}, {x -> 3}}

Try it online!

上面提到的Solve可以使用单个表达式,也可以使用一组表达式或多个表达式用&&连接。正如你所期望的,解决方案可以以符号形式找到

Solve[{a x + 2 y == 7, 3 b x - y == 1}, {x, y}]
Solve[a x + 2 y == 7 && 3 b x - y == 1, {x, y}]
{{x -> 9/(a + 6 b), y -> -((a - 21 b)/(a + 6 b))}}
{{x -> 9/(a + 6 b), y -> -((a - 21 b)/(a + 6 b))}}

Try it online!

讨论

Reduce

Solve用在线性和多项式方程最有效

对于包含约束、不等式或非代数表达式的表达式,应该使用Reduce。

说明
在Mathematica 8.0以后,Solve将得到增强,以覆盖更大的一类问题,从而减少了Reduce的需要!)

Reduce[x > 0 && x^2 - 2 x - 3 == 0, x]
x == 3

Try it online!

Reduce不使用规则,因为它可能需要用区间来表示。

Reduce[x > 0 && x^2 < 2, x]
0 < x < Sqrt[2]

Try it online!

FindRoot

当你正在寻找数值解决方案的时候用FindRoot是很好的,并提供了一个起点,你希望Mathematica搜索。

FindRoot是一种数值方法,因此它可以求解更大的一类表达式,尽管它不能保证收敛。

FindRoot[x^2 - 2 x - 3, {x, -3}](*-3表示从-3开始找根*)
FindRoot[x^2 - Exp[2 x] - 3 == x, {x, 0}]
{x -> -1.}
{x -> -1.32237}

Try it online!

2.给了根,求多项式

问题

你已经有根了,需要找多项式

解决方案

使用MinimalPolynomia找到以给定值为根的最小多项式(最小次)。

ploy = MinimalPolynomial[Sqrt[2] + Sqrt[5], x]
Last[Solve[ploy == 0, x]] // FullSimplify
9 - 14 x^2 + x^4
{x -> Sqrt[2] + Sqrt[5]}

Try it online!

讨论

正如你所期望的,复数也是可以的。

MinimalPolynomial[2 + I, x]
5 - 4 x + x^2

TTry it online!

数字必须是显式的数字,否则你会得到一个错误。

试图使用带有Pi的 MinimalPolynomia是注定要失败的,因为Pi是一个超越数,但是Pi的合理近似值也失败了,因为它不是显式代数的。

MinimalPolynomial[Pi, x]
\[Pi] 不是一个显式代数数.
MinimalPolynomial[\[Pi], x]

Try it online!

MinimalPolynomial[3.14, x]
3.14` 不是一个显式代数数.
MinimalPolynomial[3.14, x]

Try it online!

使用Rationalize来绕过这个限制

MinimalPolynomial[Rationalize@3.14, x]
-157 + 50 x

Try it online!

关于“显式代数数”
关于这一点我对mma的处理有一点怀疑态度。

3. 将表达式转换为其他形式

问题

你有一个符号表达式,希望将其转换为另一种形式。

当你从Mathematica计算中得到一个你不想要的形式的结果时,一个常见的要求是简化表达式

解决方案

两个最重要的符号转换是Simplify和 FullSimplify。

这些函数试图对表达式应用代数和其他转换,将其转换为包含较少符号的等价形式。

Simplify和 FullSimplify 的主要区别在于

FullSimplify 将考虑更大的转换集,包括特殊的函数。

因此, FullSimplify 通常更有效但也更慢

在这里,Simplify和FullSimplify最终得到的答案是一样的,但是 FullSimplify 需要超过一分钟,而 Simplify马上完成了。

Timing[Simplify[Sin[(x + y + z)^2] Cos[(z + y + x)^2]]]
Timing[FullSimplify[Sin[(x + y + z)^2] Cos[(z + y + x)^2]]]
{0.921875, 1/2 Sin[2 (x + y + z)^2]}
{38.25, 1/2 Sin[2 (x + y + z)^2]}

Try it online!

讨论

Together

Simplify和 FullSimplify执行完全自动化的简化。

然而,你有时希望应用更多的目标转换。

例如,一个常见的转换是把一个公分母上的和放在一起。

Together[a/(a^2 + b^2 + c^2) + b/(a^2 + b^2 + c^2) + 
  c/(a^2 + b^2 + c^2)]
(a + b + c)/(a^2 + b^2 + c^2)

Try it online!

Apart

Apart是另一个有用的转换,它将表达式表示为部分分式的和。

Apart[4/((1 + x) (5 + x))]
1/(1 + x) - 1/(5 + x)

Try it online!

Factor、FactorTerms、FactorSquareFree、Expand和ExpandAll

Factor[21 - 4 x - x^2]
Expand[(x + 1)^3]
-(-3 + x) (7 + x)
1 + 3 x + 3 x^2 + x^3

Try it online!

ExpandAll与Expand类似,但 ExpandAll涉及更多的表达式。

例如,涉及Sin或Exp等函数的参数。

请注意,Expand对嵌套多项式没有作用,但 ExpandAll有作用。

比如说我们要把Sin[(x+1)^2]里面的(x+1)^2展开

Expand[Sin[(x+1)^2]]
Sin[(1 + x)^2]

Try it online!

看见没有Expand命令不起作用

现在换成 ExpandAll

ExpandAll[Sin[(x+1)^2]]
Sin[1 + 2 x + x^2]

Try it online!

你还可以分别使用ExpandNumerator和ExpandDenominator将展开范围缩小到表达式的分子或分母

With[{expr = (1 + x)^2/(2 + 3 x)^3}, 
 Row[{ExpandNumerator[expr], ExpandDenominator[expr]}, 
  Invisible[expr]]]
(1+2 x+x^2)/(2+3 x)^3(1+x)^2/(2+3 x)^3(1+x)^2/(8+36 x+54 x^2+27 x^3)

Try it online!

Collect

Collect做拓展的工作,但也收集一些变量的匹配权项。

比较这里给出的展开和收集的结果

Expand[(a + x)^2 (b + x)^3]
Collect[(a + x)^2 (b + x)^3, x]
a^2 b^3 + 3 a^2 b^2 x + 2 a b^3 x + 3 a^2 b x^2 + 6 a b^2 x^2 + 
 b^3 x^2 + a^2 x^3 + 6 a b x^3 + 3 b^2 x^3 + 2 a x^4 + 3 b x^4 + x^5

a^2 b^3 + (3 a^2 b^2 + 2 a b^3) x + (3 a^2 b + 6 a b^2 + 
    b^3) x^2 + (a^2 + 6 a b + 3 b^2) x^3 + (2 a + 3 b) x^4 + x^5

Try it online!

FactorTerms

FactorTerms因式分解出数值项或不依赖于特定变量的项

FactorTerms[Expand[(3 + 3 x)^2]]
Expand[(y + y x)^3]
FactorTerms[Expand[(y + y x)^3], y]
9 (1 + 2 x + x^2)
y^3 + 3 x y^3 + 3 x^2 y^3 + x^3 y^3
(1 + 3 x + 3 x^2 + x^3) y^3

Try it online!

三角变换TrigFactor、TrigExpand、TrigExpandAll和TrigReduce。

TrigFactor[Sin[3 x]]
(1 + 2 Cos[2 x]) Sin[x]

通过使用三角恒等式展开表达式,TrigExpand删除了参数中的乘积

TrigExpand[Sin[3 x + 1]]
Cos[x]^3 Sin[1] + 3 Cos[1] Cos[x]^2 Sin[x] - 
 3 Cos[x] Sin[1] Sin[x]^2 - Cos[1] Sin[x]^3

Try it online!

TrigReduce对一个表达式进行转换,使其在三角函数项中是线性的(没有幂函数或两个不同的三角函数的乘法)。

TrigReduce[Sin[3 x]^2 Cos[2 x]]
1/4 (2 Cos[2 x] - Cos[4 x] - Cos[8 x])

Try it online!

4. 生成多项式

问题

你想要得到一个特定次数的多项式。

解决方案

一个简单的解决方案使用Sum和Subscript这里我生成了一个四次多项式。

Sum[Subscript[a,i]x^i,{i,0,4}]
Subscript[a, 0] + x Subscript[a, 1] + x^2 Subscript[a, 2] + 
 x^3 Subscript[a, 3] + x^4 Subscript[a, 4]

Try it online!

讨论

如果,除了次数,你不关心多项式的特殊形式,那么解是正确的。然而,如果你想指定系数,你可以用Dot生成一个多项式。

Clear[makePloy];
SetAttributes[makePloy, HoldRest];
makePloy[coef_List, var_ : x] := 
  Dot[Table[var^i, {i, 0, Length[coef] - 1}], coef];
makePloy[{a, b, c, d, e}]
a + b x + c x^2 + d x^3 + e x^4

Try it online!

许多数学教科书显示多项式的次数从最高到最低的顺序,我们要产生这种效果。用Inner替换Dot,并使用HoldForm,这样求和就不会被Mathematica重新排序。

Clear[makePloy2];
SetAttributes[makePloy2, HoldRest];
makePloy2[coef_List, var_ : x] := 
  Inner[Times, Table[var^i, {i, Length@coef - 1, 0, -1}], coef, 
   HoldForm[Plus@##] &];
makePloy2[{a, b, c, d, e}]
a x^4+b x^3+c x^2+d x+e

Try it online!

5. 将多项式分解成它们的组成部分

问题

你想从一个给定的多项式中提取一组系数、单项式或变量。

解决方案

分解多项式的两个有用的函数是CoefficientList 和MonomialList,首先我生成一个多项式 。

ploy2 = Sum[Subscript[a, i] x^i, {i, 0, 6}]
Subscript[a, 0] + x Subscript[a, 1] + x^2 Subscript[a, 2] + 
 x^3 Subscript[a, 3] + x^4 Subscript[a, 4] + x^5 Subscript[a, 5] + 
 x^6 Subscript[a, 6]

Try it online!

利用CoefficientList提取系数表

CoefficientList[ploy2, x]
{Subscript[a, 0], Subscript[a, 1], Subscript[a, 2], Subscript[a, 3], \
Subscript[a, 4], Subscript[a, 5], Subscript[a, 6]}

Try it online!

MonomialList给出多项式 poly2中所有单项式的列表.

MonomialList[ploy2]
{Subscript[a, 0], x^6 Subscript[a, 6], x^5 Subscript[a, 5], 
 x^4 Subscript[a, 4], x^3 Subscript[a, 3], x^2 Subscript[a, 2], 
 x Subscript[a, 1]}

Try it online!

如果你只想要多项式的变量,就使用Variables

Variables[(a x + b y)^2]
{a, x, b, y}

Try it online!

讨论

除了 CoefficientList之外,您还可以使用 Coefficient提取你所需要的表达式的系数。

Coefficient[1 + 2 x^2 + x^4 + 4 x^3, x^2] 
2

Try it online!

系数也采用第三个参数,它指定第二个参数的幂。

同样的提取过程可以这样做。

Coefficient[1 + 2 x^2 + x^4 + 4 x^3, x,2] 
2

Try it online!

同样的,你也可以提取常数项。

Coefficient[1 + 2 x^2 + x^4 + 4 x^3, x, 0]
1

Try it online!

函数MonomialList的其他参数

ploy3 = Expand[(x + 2)^2 (y + 3)^3];
MonomialList[ploy3, {x, y}, "DegreeLexicographic"]
MonomialList[ploy3, {x, y}, "Lexicographic"]
MonomialList[ploy3, {x, y}, "NegativeDegreeLexicographic"]
{x^2 y^3, 9 x^2 y^2, 4 x y^3, 27 x^2 y, 36 x y^2, 4 y^3, 27 x^2, 
 108 x y, 36 y^2, 108 x, 108 y, 108}
{x^2 y^3, 9 x^2 y^2, 27 x^2 y, 27 x^2, 4 x y^3, 36 x y^2, 108 x y, 
 108 x, 4 y^3, 36 y^2, 108 y, 108}
{108, 108 x, 108 y, 27 x^2, 108 x y, 36 y^2, 27 x^2 y, 36 x y^2, 
 4 y^3, 9 x^2 y^2, 4 x y^3, x^2 y^3}

可以用HoldForm来把按照顺序的表达式显示出来。

HoldForm[Plus[##]] & @@ MonomialList[ploy3, {x, y}, "Lexicographic"]
x^2 y^3+9 x^2 y^2+27 x^2 y+27 x^2+4 x y^3+36 x y^2+108 x y+108 x+4 y^3+36 y^2+108 y+108

Try it online!

6. 多项式除以多项式

问题

你想要除多项式,找到余数,最大公约数(GCD),或最小公倍数(LCM)。

解决方案

使用PolynomialQuotient或PolynomialRemainder。

如果两者都需要,可以使用PolynomialQuotientRemainder。

PolynomialQuotient[x^3 + x^2 - x + 1, x + 1, x]
PolynomialRemainder[x^3 + x^2 - x + 1, x + 1, x]
PolynomialQuotientRemainder[x^3 + x^2 - x + 1, x + 1, x]
-1 + x^2

2

{-1 + x^2, 2}

Try it online!

讨论

Mathematica还提供了多项式PolynomialMod ,它使用基于重复减法的算法,因此,从不执行除法

With[{ploy4 = x^3 + x^2 - x + 1, divisor = x^2}, 
 Simplify[ploy4 - (divisor*PolynomialQuotient[ploy4, divisor, x])] == 
  PolynomialRemainder[ploy4, divisor, x]]
True

Try it online!

在许多情况下,多项式模 PolynomialMod 和多项式 余数PolynomialRemainder 将返回相同的结果。特别是对于一元有理多项式,多项式的余式与多项式的余式是相同的.

如果除数是常数或多元数,函数的工作方式就不同。

在多项式模 PolynomialMod 的情况下,常数m减少系数模m,而多项式余数 PolynomialRemainder 总是0。

PolynomialMod[13 x^3 + 15 x^2 - 5 x + 7, 7]
PolynomialRemainder[x^3 + x^2 - X + 1, 7, x]
2 x + x^2 + 6 x^3

0

Try it online!

在多元情况下,多项式根据OrderedQ确定变量的顺序。

PolynomialMod[a x^3 + 2 a x^2 - 5 a x + 1, x + a]
PolynomialRemainder[a x^3 + 2 a x^2 - 5 a x + 1, x + a, x]
1 + 5 x^2 - 2 x^3 - x^4
1 + 5 a^2 + 2 a^3 - a^4

Try it online!


文章作者: 我心永恆
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 我心永恆 !
评论
 上一篇
指数积分(1) 指数积分(1)
一,指数积分函数1.定义$$\mathrm{Ei}(x)=\int_{-\infty}^x \frac{e^t}{t} \mathrm{d} t ,\quad x\in\mathbb{W}$$ 这里的$\mathbb{W}\equiv \m
2020-11-04 我心永恆
下一篇 
hexo配置评论回复 hexo配置评论回复
这个是关于如何配置hexo评论回复的文章 你写完一个hexo文章然后推送到git平台,如果有人给你文章评论了,你如何才能第一时间收到消息,并且你评论他之后,他怎么及时得到消息呢效果图: 一.准备工作1.开启qq的SMPT服务这里我用的q
2020-09-15 我心永恆
  目录