[Visual Basic]矩阵与矩阵转置

矩阵这一块相对于高考考生来说,烦是真的烦。
但是个人觉得,主要还是靠自己理解题目的意思,然后慢慢推。课上讲的普通矩阵不会一模一样拿出来考的。
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度

S90
仿二维法: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度

N90
仿二维法:b((i-1)m+j)=a(jn+n-i+1)
一维线性法:b(i)=a((i-1) Mod m)*n+n-(i-1)\m)

旋转180度(中心对称)

ZX
仿二维法: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)

转置(行列互换)

ZZ
仿二维法:b((i-1)m+j)=a((j-1)n+i)
一维线性法:b(i)=a(((i-1) Mod m)*n+(i-1)\m+1)

懒得写了…光记这个公式其实挺乏味的……还是手动模拟一遍怎么转转吧。就题而推。

猜你喜欢

转载自www.cnblogs.com/lsqwq/p/Matrix.html
今日推荐