梯度、散度、旋度

0、哈密顿算子

1、梯度(Gradient)是矢量,也是法向量

2、散度(Divergence)是标量

3、旋度(Curl)是向量

  • 标量的梯度为矢量,因此对该矢量可以继续求散度,从而引入拉普拉斯算子∇2 :
  • 矢量的散度为标量,因此对该标量可以继续求梯度:

拉普拉斯算子对标量的运算结果为标量、对矢量的运算结果为矢量。

举例:

电势场的梯度是电场强度,电场强度的的散度等于q/ε,高斯定理

二次型与矩阵对应关系

f(x)=a11x12+a22x22++annxn2+2a12x1x2+2a13x1x3++2an1,nxn1xn 观察各个项,行和列按x1,x2,x3,,xnx_1,x_2,x_3,\cdots,x_n的顺序排列成表格,每个格子内为行列相乘的项,平方项恰在对角线位置,其他项放在对角线上三角区域,可以得到下面方阵: x1x2x3xnx1a11x122a12x1x22a13x1x32a1nx1xnx20a22x222a23x2x32a2nx2xnx300a33x322a3nx3xnxn000annxn2 如果把像 2a12,2a13,,2a(n1)n2a_{12} , 2a_{13},\dots,2a_{(n-1)n} 这样的2倍的系数沿着对角线对称的位置拆分放置,即a12=a21,a13=a31,,a(n1)n=an(n1)a_{12}=a_{21} , a_{13}=a_{31},\dots,a_{(n-1)n}=a_{n(n-1)},那么可以得到下面的样子:

继续阅读“二次型与矩阵对应关系”

矩阵对角化

一、什么样的n阶矩阵才能对角化?

先说结论 {a.特征值无重根b.有重根{b.1.厄米特矩阵(Hermitian),特别的对称实数矩阵b.2.非厄矩阵{b.2.1.几何重数=代数重数b.2.2.几何重数≠代数重数

定理1:

λ1,λ2,,λm\lambda_1,\lambda_2,\dots,\lambda_m 是方阵AA的m个特征值,p1,p2,,pmp_1,p_2,\dots,p_m依次是与之对应的特征向量,如果λ1,λ2,,λm\lambda_1,\lambda_2,\dots,\lambda_m各不相等,则p1,p2,,pmp_1,p_2,\dots,p_m线性无关。

继续阅读“矩阵对角化”

韦达公式推导

一元n次方程 anxn+an1xn1+...+a1x+a0=0 \begin{align} a_nx^n + a_{n-1}x^{n-1} + … + a_1x + a_0 = 0 \end{align} 的根为x1,x2,...,xnx_1, x_2, …, x_n,其中an0a_n \neq 0。 那么(1)式可以写成下面的形式: an(xx1)(xx2)...(xxn)=0 \begin{align} a_n(x – x_1)(x – x_2)…(x – x_n) = 0 \end{align}

将其展开,并观察多项式系数,xn1x_{n-1}的系数: (x1+x2+...+xn)an-(x_1 + x_2 + … + x_n)a_n 常数项: (1)nx1x2...xn1an(-1)^nx_1x_2…x_{n-1}a_n

比较常数项和xn1x_{n-1}的系数,可以得到: a0=(1)nx1x2...xn1anan1=(x1+x2+...+xn)an \begin{aligned} a_0 &=(-1)^nx_1x_2…x_{n-1}a_n \\ a_{n-1} &=-(x_1 + x_2 + … + x_n)a_n \end{aligned}

\therefore i=1nxi=x1x2...xn1an=(1)na0ani=1nxi=x1+x2+...+xn=an1an \begin{equation} \begin{aligned} &\prod_{i=1}^nx_i=x_1x_2…x_{n-1}a_n=\frac{(-1)^{n}{a_0}}{a_n} \\ &\sum_{i=1}^nx_i=x_1 + x_2 + … + x_n = -\frac{a_{n-1}}{a_n} \end{aligned} \end{equation}

这就是一元n次方程的韦达公式。

直线与平面的向量表示

在初中我们就学过很多种直线的表示

一般式Ax+By+C=0Ax+By+C=0 A,BA,B不能同时为零;
斜截式y=kx+by = kx + b ,其中 kk 是斜率(slope),表示直线与x轴正方向夹角的正切值,bb 是纵截距(y-intercept,截距可以是负值),表示直线与y轴的交点的纵坐标;
点斜率yy1=k(xx1)y – y_{1} = k(x – x_{1}),其中 (x1,y1)(x_{1},y_{1}) 表示直线上一点, kk表示直线斜率;
截距式xa+yb=1\frac{x}{a} + \frac{y}{b} = 1,其中 a,ba,b分别表示直线与x轴和y轴的截距,也就是与x轴交点的横坐标和与y轴交点的纵坐标;
两点式xx1x2x1=yy1y2y1\frac{x – x_{1}}{x_{2} – x_{1}} = \frac{y – y_{1}}{y_{2} – y_{1}},其中 (x1,y1),(x2,y2)(x_{1},y_{1}),(x_{2},y_{2}) 表示直线上两点坐标;

继续阅读“直线与平面的向量表示”

如何:使用颜色矩阵对单色进行变换

GDI+ 提供用于存储和操作图像的 ImageBitmap 类。 ImageBitmap 对象用一个 32 位数字存储每个像素的颜色:红、绿、蓝和 Alpha 各 8 位。 这四个分量的值都是 0 到 255,其中 0 表示没有亮度,255 表示最大亮度。 alpha 分量指定颜色的透明度:0 表示完全透明,255 表示完全不透明。

颜色矢量采用 4 元组形式(红色、绿色、蓝色、alpha)。 例如,颜色矢量 (0, 255, 0, 255) 表示一种没有红色和蓝色但绿色达到最大亮度的不透明颜色。

表示颜色的另一种惯例是用数字 1 表示亮度达到最大。 通过使用这种约定,上一段中描述的颜色将可以由矢量 (0, 1, 0, 1) 表示。 在执行颜色变换时,GDI+ 遵循使用 1 为最大亮度的惯例。

可通过用 4×4 矩阵乘以这些颜色矢量将线性变换(旋转和缩放等)应用到颜色矢量中。 但是,您不能使用 4×4 矩阵进行平移(非线性)。 如果在每个颜色矢量中再添加一个虚拟的第 5 坐标(例如,数字 1),则可使用 5×5 矩阵应用任何组合形式的线性变换和平移。 由线性变换组成的后跟平移的变换称为仿射变换。

例如,假设您希望从颜色 (0.2, 0.0, 0.4, 1.0) 开始并应用下面的变换:

  1. 将红色分量乘以 2。
  2. 将 0.2 添加到红色、绿色和蓝色分量中。

下面的矩阵乘法将按照列出的顺序进行这对变换。

颜色矩阵的元素按照先行后列(从 0 开始)的顺序进行索引。 例如,矩阵 M 的第五行第三列由 M[4][2] 表示。

5×5 单位矩阵(在下面的插图中显示)在对角线上为 1,在其他任何地方为 0。 如果用单位矩阵乘以颜色矢量,则颜色矢量不会发生改变。 形成颜色变换矩阵的一种简便方法是从单位矩阵开始,然后进行较小的改动以产生所需的变换。

有关矩阵和变换的更详细的讨论,请参见坐标系统和变形

示例

下面的示例采用一个使用一种颜色 (0.2, 0.0, 0.4, 1.0) 的图像,并应用上一段中描述的变换。

下面的插图在左侧显示原来的图像,在右侧显示变换后的图像。

下面示例中的代码使用以下步骤进行重新着色:

  1. 初始化 ColorMatrix 对象。
  2. 创建一个 ImageAttributes 对象,并将 ColorMatrix 对象传递给 ImageAttributes 对象的 SetColorMatrix 方法。
  3. ImageAttributes 对象传递给 Graphics 对象的 DrawImage 方法。

C#

VB

Image image = new Bitmap(“InputColor.bmp”);
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = {
   new float[] {2,  0,  0,  0, 0},        // red scaling factor of 2
   new float[] {0,  1,  0,  0, 0},        // green scaling factor of 1
   new float[] {0,  0,  1,  0, 0},        // blue scaling factor of 1
   new float[] {0,  0,  0,  1, 0},        // alpha scaling factor of 1
   new float[] {.2f, .2f, .2f, 0, 1}};    // three translations of 0.2

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10);

e.Graphics.DrawImage(
   image,
   new Rectangle(120, 10, width, height),  // destination rectangle
   0, 0,        // upper-left corner of source rectangle
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);

编译代码

前面的示例是为使用 Windows 窗体而设计的,它需要 Paint 事件处理程序的参数 PaintEventArgse