关于函数变换
复习变换
高中我们对函数的伸缩拉伸有所研究,课本上一般叫伸缩变换。但当我们观察变化后的坐标系和原来的坐标系,经过对比可以明显发现,坐标系发生了变化,我们可以通过一个三角函数的例子演示一下:

图里红的是y=sinx,蓝的是y=sin2x,形状一模一样,就是横向压扁了一半,这就是课本上的伸缩变换。但从坐标系的角度看,变化其实不是发生在图上:我们保持图形不动,换个坐标系去读它,读出来的式子就变了。我们把变换后的函数换一种表示形式,即y'与y、x'与x的关系写出:
我们知道平面直角坐标系是Oxy,现在的坐标系是Ox'y',从变化规则可以看出是对原Oxy坐标系的横轴x拉长2倍得到了新坐标系,而图像不变保持原来的位置,然后对齐新旧坐标系,就实现了图像的压缩。简单记就是:图上变瘦,就是刻度变胖;图上变胖,就是刻度变瘦,图形和坐标系永远是反着来的。
同理我们也可以实现拉伸变换,还是使用正弦函数,这次把振幅、周期、相位和上下平移都揉进去,我们做一下拉伸平移:

我们可以直观地看到,函数像弹簧一样被压缩,被拉伸,被平移,且我们可以写出变换规则:
拿规则验证一下:由x'=(x-π)/2反解出x=2x’+π,由y'=2y+2反解出y=(y’-2)/2,把这两个式子代回y=sinx,得到(y’-2)/2=sin(2x’+π),整理一下正好是y’=2sin(2x’+π)+2,和上面写的完全对得上。图里紫色是原来的y=sinx,绿色是变换后的,横向压缩、纵向拉伸、再平移,几个操作揉在一起,弹簧的比喻还挺形象的。
变化后的坐标系Ox'y'就是相对原Oxy坐标系的一个仿射变换。严格说,仿射变换就是线性变换再叠加一个平移,这里的π和+2就是平移项,所以这个例子已经是完整的仿射变换了,而前面纯伸缩的例子只是其中的线性部分。
下定义
对于函数f(x,y),它的图形完全落在由任意一组向量的张成空间内。规定这组向量组成的仿射坐标系为L,在其中画出f(x,y)的图像;然后对L做换基操作,得到L’坐标系,再把f(x,y)在L系里的图形原样放进L’系里,则f(x,y)在L’坐标系内的解析式$f_T(x,y)$叫做f(x,y)的变换。绕是绕了点,意思其实就是:图形原地不动,只换看它的那副“尺子”。
切记切记,是原图像在新坐标系放入后,把新坐标系与原坐标系对齐后得到的函数叫做函数的变换函数!
算符演算的标准定义:
使问题从一种状态变化为另一种状态的手段称为操作符或算符。算符在单独存在时是没有什么意义。操作符可为走步、过程、规则、数学算子、运算符号或逻辑符号等。
所以我们的函数变换也是一种算符演算,当然你也可以理解为是在基本向量空间内的泛函分析。具体内容可以看实变函数与泛函分析。
对于标准的变换,我们可以通过变换函数实现,对于变换函数规定为下面形式:
函数$f_T(x,y)$就是f(x,y)变换后的函数,A是线性算符。式子$f_T(x,y)=f(A[x,y]^T)$当成一个流程看很好理解:新坐标系里有个点(x,y),先拿A把它换算回原坐标系的坐标,再去问原来的f,得到的值就是新系里的函数值。A的两列,其实分别是新坐标系的x’轴和y’轴在原坐标系里的样子。
这里还有一个容易绕晕的地方:点变换和坐标变换是反着的。把点一个个搬过去,和把坐标系的基换掉、点不动,这两个操作互为逆运算;所以同一件事,写成点变换是一个矩阵,写成坐标系变换就是它的逆矩阵。记住哪边该求逆,基本就不会出错了。
条件里的det(A)≠0,是保证两根基向量不共线,变换不会塌成一条线,这样才可逆。顺便一提,det(A)的绝对值就是变换前后面积的缩放倍数,正负号管的是有没有翻面,后面会出现的反射矩阵,det就是负的。举个数:变换矩阵A=[[1,1],[1,-1]]的det等于-2,单位正方形被它拉成了面积2倍的菱形,负号说明还翻了个面。旋转矩阵的det等于1,面积不缩放,只是把方向转过去了,这也是旋转和拉伸最直观的区别。
还有一个实际问题:2×2的A管不了平移,因为平移不过原点,硬写成矩阵乘向量是塞不进去的。想把平移也并进来,就得升一维用齐次坐标,写成3×3的矩阵,图形学里三维变换用4×4的矩阵也是一个道理。本篇的矩阵例子都是过原点的线性变换,暂时用不到它。
对于函数的变换,它是针对坐标系本身而不是针对函数,也就意味着无论如何变换,原坐标系的关系都不会改变,这里可以归纳为两组性质:
- 可逆性:变换矩阵可逆,所以在L’内的图像可以通过逆变换重新回到原坐标系L内
- 相似性:原坐标系的关系,比如相切相交相离都不会改变
而对于函数的变换,我们可以用两种办法求出,也就是极坐标法或矩阵法,我列举一下优缺点:
| 极坐标系 | 矩阵 | |
|---|---|---|
| 优点 | 是基础的内容便于理解,同时操作简单,前置基础要求不高,可以处理指定角度的旋转问题 | 可以直接表达出变换关系,极坐标法有的优点它都有,可以完成坐标系的定向拉伸,计算简单,理论知识完备。 |
| 缺点 | 无法处理伸缩问题,计算量大 | 需要线性代数的知识 |
| 特点 | 比较直观 | 可以处理任意坐标系 |
平时能用矩阵就用矩阵,理由很直接:旋转、拉伸、反射、斜切全都能写成矩阵,乘一下完事,而且可以组合着用。极坐标法适合理解概念,或者做小角度旋转的时候心算,它的短板是处理不了伸缩,遇到坐标轴被拉长就抓瞎了。
仿射与矩阵变换
我们都知道,对于任意两不共线向量的张成向量空间可以囊括整个二维平面的向量,而矩阵方程就是对这两个不共线向量(基)的操作:矩阵的每一列就是一根新坐标轴的指向,两列怎么选,新坐标系就是什么样子。这里可以通过直观的例子感受一下,对于原坐标系,它的基向量是$\vec i$=(1,0),以及$\vec j$=(0,1),它们的列向量用矩阵表示就是:
这种矩阵不是很熟悉吗?这个叫单位矩阵,任何向量或矩阵与它做乘法都是本身,也就是坐标系并没有改变。而我们将它改为以(1,1)、(1,-1)为基的向量空间时,新坐标系的x’轴指(1,1)、y’轴指(1,-1),坐标系就被掰了45度,我们就需要对原坐标系的向量做矩阵变换,即Ax=b,其中:
x就是自变向量,一般写作:
b是变化后的向量。拿向量x=(1,1)试一下,A乘上去就是两根基向量各取一份相加:(1,1)+(1,-1)=(2,0),矩阵乘法就是在拿基向量做线性组合,这么看就直观了。至于矩阵变换在之前说过,我给个传送门:
https://blog.minloha.cn/2022/04/17/%E7%BB%86%E8%AF%B4%E7%9F%A9%E9%98%B5%E4%B8%8E%E5%8F%98%E6%8D%A2/
函数变换
函数变换这个词其实严格来说并不存在,和矩阵方程一样,是我自己拿来用的说法。我想表达的意思是,函数变换是一个连续的过程,而不是硬套一个公式,图像在变换前后还是“同一条曲线”,只是读数换了。
先从最简单的圆锥曲线练手,它们的方程里x²、y²、xy三项都有,坐标系一变方程怎么跟着变,看得最清楚。首先我们先尝试一个二维空间内的二元函数:
绘制它的图像,我们得到了一个椭圆,长半轴是2、短半轴是1,长轴正好躺在x轴上,然后我们思考一下,如何把它在坐标系Oxy中顺时针旋转45°。

答案是极坐标方程,我们知道极坐标极径、极角和直角坐标的关系 x=ρcosθ,y=ρsinθ,且x²+y²=ρ²。旋转放到极坐标里看就是角度上的平移:把x=ρcosθ、y=ρsinθ代进椭圆,先得到ρ²cos²θ/4+ρ²sin²θ=1;顺时针转45°以后,新图上角度为θ的点,在原图上对应的角度是θ+45°,所以把θ换成θ+π/4再算:
用两角和公式展开,cos(θ+π/4)=(cosθ-sinθ)/√2、sin(θ+π/4)=(sinθ+cosθ)/√2,乘开整理:
左边通分化开是(5x²+6xy+5y²)/8,两边同乘8,就得到旋转后的函数了:
验算一下:(2,0)是原椭圆上的点,顺时针转45°后到(√2,-√2),代入5/8x²+3/4xy+5/8y²,正好等于1,说明这个旋转方向没搞反。
为了清楚看到变化后的坐标系,我绘制了Ox'y'坐标系,可以看出变化后的x'与原坐标系的x所成角度正好是45度。
那么我们总不能时刻都用极坐标系吧,不然这矩阵可就无处可施了,所以我们使用旋转矩阵R:
我们还是令θ=45°,椭圆上的点用列向量X=$[x,y]^T$(T为矩阵转置)表示,那么RX就是旋转后的点坐标。算一下是x’=(x+y)/√2、y’=(y-x)/√2,但要得到新函数,得反过来把旧坐标用新坐标表示再代入,也就是得用R的逆。旋转矩阵有个好处:它是正交矩阵,逆矩阵等于转置,所以直接拿R^T去乘就行。代进去算出来的结果和极坐标法一模一样,可以自己拿纸验一遍,它是这样的:

这里注意,矩阵是直接改变了坐标系,也就意味着是对坐标系本体发生了变换,如果想要完成换基,就需要用新基矩阵的逆去乘以变量向量。忘掉取逆的后果也很直观:xy项前面的符号会差一个,本来是顺时针转的椭圆看起来就朝逆时针去了,方向直接反过来。
相似地,我们可以再用两种办法研究一下双曲线,也就是在初中学习的反比例函数:
我们对它进行化简,可以得到二元函数:
第一种极坐标法,我们还是让角度为45°,我简单列一下计算过程。
则把θ换成θ+π/4代入参数方程,用两角和公式展开正余弦:
左边乘开就是ρ²(cos²θ-sin²θ),也就是ρ²cos2θ,再用x²-y²=ρ²cos2θ换掉,即可推出:

然后再来尝试一下矩阵,定义变换函数为g(x,y),满足下面矩阵。不过注意,这不是旋转矩阵的逆,而是一个反射矩阵;好在双曲线xy=1关于y=x对称,所以它作用的结果和旋转是一样的!
它其实是旋转矩阵乘上“关于y=x的反射矩阵”的结果,而xy=1这条双曲线本来就关于y=x对称,先反射再旋转和直接旋转看不出区别,所以最终效果和旋转一致。
我们乘一下,得到下面的内容:
我们把x'和y'代入f(x,y)中,得到新的方程:
可以看到和我们使用极坐标是一样的。拿点验一下:(1,1)本来在xy=1上,T作用之后变成(√2,0),正好落在x²-y²=2上,说明两边算出来的确实是同一条曲线。其实xy=1是条等轴双曲线,渐近线就是两根坐标轴,转45°以后渐近线变成y=±x,方程也就化成了x²-y²=2这种标准形式,跟课本上的结论对得上。
高级玩法
我们让坐标系变成斜二测画法的坐标系,操作对象就选择椭圆了。斜二测就是x轴不动、y轴歪45度且长度减半,看看下面这个矩阵的列:第一列(1,0),x’轴还是原来的x轴;第二列(1/2,1/2),表示 y 轴歪 45°、y 坐标缩为一半:
那么就可以令f(x,y)是椭圆,求出它对应的变换函数了:
也就是把x’=x+y/2、y’=y/2代进椭圆方程,得到(x+y/2)²/4+(y/2)²=1,展开就是下面这个式子。求解一下,得到变化后的方程以及图像如下:

我们可以看出,矩阵变换可以完美解决伸缩坐标系的问题,至于y=x只是参考直线。方程里冒出来的xy交叉项就是证据:在新坐标系里椭圆已经被斜着架起来了,长轴短轴都不再贴着坐标轴,这正是坐标系被斜切之后的样子。
最后让我们看一个抛物线旋转的例子就结束吧!
中间展开一下:代入后u=(x+y)/√2、v=(x-y)/√2,方程变成v²/(4u)-1=0,把v²=(x-y)²/2、4u=2√2(x+y)带进去,整理出(x-y)²=4√2(x+y),再把平方拆开、两边同除2,就是上面这个结果。原来的抛物线开口朝着x轴正方向,转完以后开口朝着45度方向,顶点还留在原点。
绘制图像:

总结
这种圆锥曲线的旋转是我刷数学题时在一道压轴选择题里看到的,当时没太在意。后来学完高数多元函数,对旋转有了新的认识,就简单试了试旋转、平移、仿射这些操作,才有了这篇博文。矩阵法和极坐标法各有各的用处,建议两个都亲手推一遍,尤其是矩阵取逆那步,很容易翻车。有任何问题都可以在下面留言,我都会回复的呢!记得收藏本站地址: