进阶-线代和矩阵

简介

Z1h支持了矩阵的部分基础运算, 包括且不限于加、减、乘、除、转置矩阵和矩阵的逆运算等 如果有更多期望的矩阵运算, 欢迎到issue下提出

构建矩阵

一般通过 matrix 函数来构建一个矩阵 - 方法1, 通过字符串构建 matrix(`1 2 3 4 5 6 7 8 9`) - 方法2, 通过字符串且指定行数来构建 print(matrix(`1 2 3 4 5 6 7 8`, 2)) // 2行4列 print(matrix(`1 2 3 4 5 6 7 8`, 4)) // 4行2列 - 方法3, 通过指定行和列来构建一个0值的矩阵 print(matrix(3, 4)) // 3行4列 print(matrix(4, 3)) // 4行3列 - 方法4, 指定初始值(浮点型)、行和列来构建 matrix(3.0, 4, 5) - 方法5, 传入浮点型一维数组和行数重新组合成矩阵 matrix(floatarray(1, 2, 3, 4, 5, 6, 7, 8, 9), 3) - 方法6, 传入另一个矩阵、行数重新组合成矩阵 var m1 = matrix(` 1 2 3 4 5 6`) var m2 = matrix(m1, 3) print(m1, ' & ', m2) - 方法7, 传入整形数组、行数 matrix(range(9), 3) - 方法8, 传入任意数组, 智能解析构建 matrix([1,2,3,4,5,6], 3) matrix([ [1,2,3], [4,5,6], [7,8,9], ])

矩阵运算

矩阵除了支持的加、减、乘、除等基础运算之外, 还提供了 转置逆矩阵行列式 等运算 以下运算相关的示例代码均以下方代码为背景, 请先在自己的测试环境自定义这些变量 m1 = matrix(range(9), 3) m2 = matrix(2.0, 3, 3) num = 4.0

基础运算

- 加法: 矩阵可以和数字相加, 也可以和矩阵相加 - 减法: 和加法类似 - 乘法: 可以和数字相乘, 也可以让 m*pp*n 的矩阵相乘 - 除法: 可以和数字相除 - 求余: 可以和数字进行求余 示例代码: // 矩阵和数字相加 print(m1 + num) // 矩阵之间相加 print(m1 + m2) // 矩阵和数字相减 print(m1 - num) // 矩阵之间相减 print(m1 - m2) // 矩阵和数字相乘 print(m1 * num) // 矩阵之间相乘 print(m1 * m2) matrix(range(6), 3) * matrix(range(6), 2) matrix(range(6), 2) * matrix(range(6), 3) // 矩阵和数字相除 print(m1 - num) // 矩阵和数字求余 print(m1 - num) 注意, 如果使用 +=-=/=\*=%= 运算符, 将会对左值的内容修改, 而且引用了同一个对象的变量也也将同时修改 // 演示 += 等操作符对矩阵的影响 a = matrix(1.0, 2, 2) b = a a += 8 print(b) // b引用的是同一个矩阵, 在+=之后也发生了改变

特殊运算

转置矩阵

矩阵的原型T函数可以进行转置: print(`转置前:`, m1) print(`转置后:`, m1.T())

行列式

矩阵的原型D函数可以计算矩阵的行列式: matrix(` 1 2 3 4 `).D()

矩阵的逆运算

矩阵的原型I函数可以进行矩阵的逆运算: matrix(` 1 2 3 4 `).I()

其它原型函数

除了以上提到的T(转置)、D(行列式)、I(逆运算)函数之外, 矩阵还支持几个原型函数:

random函数

将矩阵的内容重置为0-1之间的随机浮点值 matrix(3, 3).random()

reset函数

将矩阵的内容重置为固定值或函数运行返回值 m = matrix(3, 3) m.reset(5) // 设置为固定值 print(m) m.reset((origin, row, column) => { print(`第${row+1}行第${column+1}列, 原来的值是${origin}`) return origin + row * 10 + column * 100 }) print(m)