矩阵这一块相对于高考考生来说,烦是真的烦。
但是个人觉得,主要还是靠自己理解题目的意思,然后慢慢推。课上讲的普通矩阵不会一模一样拿出来考的。
So请看下面8
定义
Ps:这块内容既枯燥又枯燥,建议直接跳过(我只是为了完善笔记而已Ctrl+V)
在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。这一概念由 19 世纪英国数学家凯利首先提出。
由 m×n 个数排成的 m 行 n 列的数表称为 m 行 n 列的矩阵,简称 m×n 矩阵
这 m×n 个数称为矩阵 A 的元素,简称为元,数 a(i,j)位于矩阵 A 的第i 行第 j 列,称为矩阵 A 的(i,j)元。
普通矩阵的生成
m = Val(Text1.Text)
n = Val(Text2.Text)
For i = 1 To m * n
r=Int(Rnd *90)+10
a(i) = r
s = s + Str(a(i))
If i Mod n =0 Then
List1.AddItem s
s = ""
End If
Next i
End Sub
下面的公式是重点啦!请自行推一遍!
行号:H=(i-1)\n + 1
列号:L=(i-1) mod n + 1
数组下标:i=(H-1)*n+L
数组下标与位置关系为(所在行数-1)*列数+所在列
特别要注意最后一列数据的处理
矩阵翻转
相信你读完上面也觉得矩阵不怎么难嘛,那么下面的翻转对于你来说肯定也没问题啦~
顺便吐槽一下,VB里其实是有二维数组的,但SB出题人就偏偏只喜欢用一维数组,所以添加了好多好多麻烦!QAQ
垂直翻转
垂直翻转是这样子转滴!相当于你倒立了!这是关于行的变换
仿二维法
新数据在第i行, 原数据在第m-i+1行
b((i-1)*n+j)=a((m-i)*n+j)
'数组下标与位置关系为(所在行数-1)*列数+所在列
一维线性法
新数据 b(i)
行: (i-1)\n+1
列: (i-1) mod n+1
原数据a (?)
行:m-((i-1)\n+1)+1=m-(i-1)\n
列:(i-1) mod n+1
b(i)=a((m-(i-1)\n-1)*n+(i-1) Mod n+1
'数组下标与位置关系为(所在行数-1)*列数+所在列
别问,问就是我也记不住。一维的方法真的很不符合思维的规律哎
水平翻转
这就是从你看到了镜子中的自己,是关于列的变换
同样也有两种方法,这里只贴代码了:
仿二维法
b((i-1)*n+j) =a((i-1)*n+n-j+1)
'数组下标与位置关系为(所在行数-1)*列数+所在列
一维线性法
b(i)=a((i-1)\n*n+n-(i-1) mod n)
'数组下标与位置关系为(所在行数-1)*列数+所在列
矩阵旋转
顺时针旋转90度
仿二维法:b((i-1)m+j)=a((m-j)n+i)
一维线性法:b(i)=a((m-(i-1) Mod m-1)*n+(i-1)\m+1)
逆时针旋转90度
仿二维法:b((i-1)m+j)=a(jn+n-i+1)
一维线性法:b(i)=a((i-1) Mod m)*n+n-(i-1)\m)
旋转180度(中心对称)
仿二维法:b((i-1)n+j)=a((m-i)n+n-j+1)
一维线性法:b(i)=a((m-(i-1)\n-1)*n+n-(i-1) Mod n)
或b(i) = a(m * n + 1 - i)
转置(行列互换)
仿二维法:b((i-1)m+j)=a((j-1)n+i)
一维线性法:b(i)=a(((i-1) Mod m)*n+(i-1)\m+1)
懒得写了…光记这个公式其实挺乏味的……还是手动模拟一遍怎么转转吧。就题而推。