在数学中,映射的定义一般是,指通过某种规则,将一个集合中的元素与另一个集合中的元素对应起来的过程(广义来说,这种过程可以是抽象的,也可以是具体的,且元素类型也不一定非得是数)。
通常来说,映射过程中的操作对象大多都是数集或者变量。事实上,我们一般将映射规则称为“函数”,或者更广义上来说,称为“算子”(operator)。
算子理论博大精深,且过于抽象艰深,这里就不详细叙述,仅仅举几个简单例子。考虑到这里有些是高中生,那就以离散数学为例。牛顿差分公式大家都知道吧?从高等数学的观点来说,其实它是泰勒公式的离散形式。一般教材中证明牛顿差分公式都是用数学归纳法证明的,但是这来得很不直观,毕竟牛顿差分公式比较复杂。但是,如果了解算子理论的人,就会很容易证明这个公式,并且容易记。
记T表示单位算子(即后面无论跟什么函数,其作用结果还是原来的函数):Tf(x)=f(x);E表示移位算子,即Ef(x)=f(x+1);Δ 表示前向差分算子:Δf(x)=f(x+1)-f(x);∇ 表示后项差分算子:∇f(x)=f(x)-f(x-1).
算子的复合用乘法来表示,比如E^2f(x)=(E·E)f(x)=EEf(x)=f(x+2). 因此根据上述定义,不难得到各个算子的相互关系:Δ =E-T,∇=T-E^(-1).
其中逆元是这么定义的:E^(-1)E=EE^(-1)=T.
单位元T具有良好的性质:T^a=T (其中a为任意整数),TE=ET,ΔT=TΔ,∇T=T∇.
对一个函数f(x)作n次前向差分,怎么计算才方便呢?
只需要利用用二项式展开,得到n阶差分的计算公式
Δ^n f(x)=(E-T)^n f(x)=Sum[C(n,k)(-1)^k E^(n-k),{k,0,n}] f(x)
=Sum[C(n,k)(-1)^k f(x+n-k),{k,0,n}]
又如,根据上面提到的关系T=E-Δ ,我们可以得到T=T^n=(E-Δ)^n,类似上面的方法展开后得到
f(x)=T^n f(x)=(E-Δ)^n f(x)=Sum[C(n,k)(-1)^k Δ^k f(x+n-k),{k,0,n}]
这是上面n阶差分公式的逆变换。
再如,根据关系E=Δ+T,我们得到E^a=(Δ+T)^a,故
f(x+a)=E^a f(x)=(Δ+T)^a f(x)=Sum[[C(n,k)Δ^k f(x),{k=0,n}]
这就是牛顿差分公式。
当然,上面用到了算子的交换律。根据定义可证EΔ=ΔE,∇E=E∇,Δ∇=∇Δ=E+E^(-1)-2T.不过,一般情况下,算子的结合顺序不可随便交换。
有人会问,算子为什么当成一个数一样参加代数运算?(不仅如此,算子还可以参与指数,对数,级数运算,甚至是微分积分运算都可以)这就是算子本身的性质了,由于将运算的本质了解清楚了,所以能足够抽象这一过程。有兴趣的可以阅读以下算子理论的相关书籍。
如果学过高等数学,也许你会在一些教辅资料中看到一些诸如“微分算子法求微分方程”,其实用的就是求微分算子函数的求逆过程。同样,用拉普拉斯变换或者傅里叶变换求解微分方程,其过程就是:对微分方程进行积分变换--->代数运算反求解--->将解进行逆变换。这就是积分变换算子和积分逆变换算子的作用了。
现在我们想在MMA中简单地实现一个微分算子。注意,MMA中的D或者Dt本身具有求偏导数和全导数的功能,但是它们并不是一个算子符号,而是函数名。因而D和Dt本身是不能像上面一样参与运算的(它们必须要有自变量输入才能参与运算)。
我们的目的是定义一个微分算子d(为了避免与MMA内部函数命名冲突,故选择这个算子名),能让其对后面作用的函数进行微分,并且使得它本身能单独参与代数运算。
这里有个不完善的版本:
d /: d[x__]*f_ := D[f, x]
其功能是,能对后面的函数进行求导,例如:
d[x] Sin[x] 将返回 Cos[x]
d[x,y] Sin[x y] 将返回 Cos[x y] - x y Sin[x y]
d[{x,n}] f[x] 将返回 f[x]的n次导数
同样,这个算子还能用矩阵或者向量形式:
{d[x],d[y],d[z]} Sin[x+2 y+3 z] 将返回 {Cos[x + 2 y + 3 z], 2 Cos[x + 2 y + 3 z], 3 Cos[x + 2 y + 3 z]}
不过这个算子还不能进行乘法运算,因为定义里面没有处理后面的f仍然是算子d的情形。另外一个值得改进的地方是,如果后面的函数式一个向量函数,算子d返回的应该是一个雅可比矩阵。
各位高手,等你来提出好的方法了~
通常来说,映射过程中的操作对象大多都是数集或者变量。事实上,我们一般将映射规则称为“函数”,或者更广义上来说,称为“算子”(operator)。
算子理论博大精深,且过于抽象艰深,这里就不详细叙述,仅仅举几个简单例子。考虑到这里有些是高中生,那就以离散数学为例。牛顿差分公式大家都知道吧?从高等数学的观点来说,其实它是泰勒公式的离散形式。一般教材中证明牛顿差分公式都是用数学归纳法证明的,但是这来得很不直观,毕竟牛顿差分公式比较复杂。但是,如果了解算子理论的人,就会很容易证明这个公式,并且容易记。
记T表示单位算子(即后面无论跟什么函数,其作用结果还是原来的函数):Tf(x)=f(x);E表示移位算子,即Ef(x)=f(x+1);Δ 表示前向差分算子:Δf(x)=f(x+1)-f(x);∇ 表示后项差分算子:∇f(x)=f(x)-f(x-1).
算子的复合用乘法来表示,比如E^2f(x)=(E·E)f(x)=EEf(x)=f(x+2). 因此根据上述定义,不难得到各个算子的相互关系:Δ =E-T,∇=T-E^(-1).
其中逆元是这么定义的:E^(-1)E=EE^(-1)=T.
单位元T具有良好的性质:T^a=T (其中a为任意整数),TE=ET,ΔT=TΔ,∇T=T∇.
对一个函数f(x)作n次前向差分,怎么计算才方便呢?
只需要利用用二项式展开,得到n阶差分的计算公式
Δ^n f(x)=(E-T)^n f(x)=Sum[C(n,k)(-1)^k E^(n-k),{k,0,n}] f(x)
=Sum[C(n,k)(-1)^k f(x+n-k),{k,0,n}]
又如,根据上面提到的关系T=E-Δ ,我们可以得到T=T^n=(E-Δ)^n,类似上面的方法展开后得到
f(x)=T^n f(x)=(E-Δ)^n f(x)=Sum[C(n,k)(-1)^k Δ^k f(x+n-k),{k,0,n}]
这是上面n阶差分公式的逆变换。
再如,根据关系E=Δ+T,我们得到E^a=(Δ+T)^a,故
f(x+a)=E^a f(x)=(Δ+T)^a f(x)=Sum[[C(n,k)Δ^k f(x),{k=0,n}]
这就是牛顿差分公式。
当然,上面用到了算子的交换律。根据定义可证EΔ=ΔE,∇E=E∇,Δ∇=∇Δ=E+E^(-1)-2T.不过,一般情况下,算子的结合顺序不可随便交换。
有人会问,算子为什么当成一个数一样参加代数运算?(不仅如此,算子还可以参与指数,对数,级数运算,甚至是微分积分运算都可以)这就是算子本身的性质了,由于将运算的本质了解清楚了,所以能足够抽象这一过程。有兴趣的可以阅读以下算子理论的相关书籍。
如果学过高等数学,也许你会在一些教辅资料中看到一些诸如“微分算子法求微分方程”,其实用的就是求微分算子函数的求逆过程。同样,用拉普拉斯变换或者傅里叶变换求解微分方程,其过程就是:对微分方程进行积分变换--->代数运算反求解--->将解进行逆变换。这就是积分变换算子和积分逆变换算子的作用了。
现在我们想在MMA中简单地实现一个微分算子。注意,MMA中的D或者Dt本身具有求偏导数和全导数的功能,但是它们并不是一个算子符号,而是函数名。因而D和Dt本身是不能像上面一样参与运算的(它们必须要有自变量输入才能参与运算)。
我们的目的是定义一个微分算子d(为了避免与MMA内部函数命名冲突,故选择这个算子名),能让其对后面作用的函数进行微分,并且使得它本身能单独参与代数运算。
这里有个不完善的版本:
d /: d[x__]*f_ := D[f, x]
其功能是,能对后面的函数进行求导,例如:
d[x] Sin[x] 将返回 Cos[x]
d[x,y] Sin[x y] 将返回 Cos[x y] - x y Sin[x y]
d[{x,n}] f[x] 将返回 f[x]的n次导数
同样,这个算子还能用矩阵或者向量形式:
{d[x],d[y],d[z]} Sin[x+2 y+3 z] 将返回 {Cos[x + 2 y + 3 z], 2 Cos[x + 2 y + 3 z], 3 Cos[x + 2 y + 3 z]}
不过这个算子还不能进行乘法运算,因为定义里面没有处理后面的f仍然是算子d的情形。另外一个值得改进的地方是,如果后面的函数式一个向量函数,算子d返回的应该是一个雅可比矩阵。
各位高手,等你来提出好的方法了~