三阶矩阵运算库分享

By jerryxjr1220 at 2021-12-19 • 0人收藏 • 345人看过

正好这几天要写一些关于三阶矩阵运算的小程序,需要用到一些基本的三阶矩阵的加减乘除。当然用python的numpy是非常方便的,但是如果仅仅只为了这一个小功能再去导入额外的包就太麻烦了,于是自己动手写了一下,顺便复习了一下线性代数,哈哈!

//Matrix三阶矩阵运算

namespace matrix

add = function(x, y){
    res = {{0,0,0};{0,0,0};{0,0,0}};
    for i=1;3 {
        for j=1;3 {
            res[i][j] = x[i][j]+y[i][j];
        }
    }
    return res;
}

minus = function(x, y){
    res = {{0,0,0};{0,0,0};{0,0,0}};
    for i=1;3 {
        for j=1;3 {
            res[i][j] = x[i][j]-y[i][j];
        }
    }
    return res;
}

mult = function(x, y){
    res = {{0,0,0};{0,0,0};{0,0,0}};
    res[1][1] = x[1][1]*y[1][1] + x[1][2]*y[2][1] + x[1][3]*y[3][1];
    res[1][2] = x[1][1]*y[1][2] + x[1][2]*y[2][2] + x[1][3]*y[3][2];
    res[1][3] = x[1][1]*y[1][3] + x[1][2]*y[2][3] + x[1][3]*y[3][3];
    
    res[2][1] = x[2][1]*y[1][1] + x[2][2]*y[2][1] + x[2][3]*y[3][1];
    res[2][2] = x[2][1]*y[1][2] + x[2][2]*y[2][2] + x[2][3]*y[3][2];
    res[2][3] = x[2][1]*y[1][3] + x[2][2]*y[2][3] + x[2][3]*y[3][3];
    
    res[3][1] = x[3][1]*y[1][1] + x[3][2]*y[2][1] + x[3][3]*y[3][1];
    res[3][2] = x[3][1]*y[1][2] + x[3][2]*y[2][2] + x[3][3]*y[3][2];
    res[3][3] = x[3][1]*y[1][3] + x[3][2]*y[2][3] + x[3][3]*y[3][3];
    
    return res;
}

det = function(x){
    return x[1][1]*x[2][2]*x[3][3] + x[1][2]*x[2][3]*x[3][1] + x[1][3]*x[2][1]*x[3][2]
            - x[3][1]*x[2][2]*x[1][3] - x[3][2]*x[2][3]*x[1][1] - x[3][3]*x[2][1]*x[1][2];    
}

star = function(x){
    res = {{0,0,0};{0,0,0};{0,0,0}};
    
    res[1][1] = x[2][2]*x[3][3]-x[3][2]*x[2][3];
    res[1][2] = x[3][2]*x[1][3]-x[1][2]*x[3][3];
    res[1][3] = x[1][2]*x[2][3]-x[2][2]*x[1][3];
    
    res[2][1] = x[2][3]*x[3][1]-x[3][3]*x[2][1];
    res[2][2] = x[3][3]*x[1][1]-x[1][3]*x[3][1];
    res[2][3] = x[1][3]*x[2][1]-x[2][3]*x[1][1];
    
    res[3][1] = x[2][1]*x[3][2]-x[3][1]*x[2][2];
    res[3][2] = x[3][1]*x[1][2]-x[1][1]*x[3][2];
    res[3][3] = x[1][1]*x[2][2]-x[2][1]*x[1][2];
    
    return res;
}

reverse = function(x){
    d = det(x);
    new = star(x);
    for i=1;3 {
        for j=1;3 {
            new[i][j] = new[i][j]/d;
        }
    }
    return new;
}

调用

import console; 
import matrix;

x = {{1,2,3},{4,5,6},{7,8,9}};
y = {{1,3,5},{7,9,2},{4,6,8}};

console.dump(matrix.mult(x, matrix.reverse(y)))

console.pause(true);

和python的numpy对比

图片1.png

3 个回复 | 最后更新于 2021-12-21
2021-12-19   #1

点赞

2021-12-19   #2

这不写个n阶矩阵计算

2021-12-21   #3

虽然看不懂,但我深感震惊,五星好评!

登录后方可回帖

登 录
信息栏
公告:
个人博客
专注分享
谢谢合作!

本站域名:HtmLayout.Cn
aardio可以快速开发上位机,本站主要记录了学习过程中遇到的问题和解决办法及aardio代码分享

这里主要专注于aardio学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.

Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
本 站 主 站:Stm32cube中文网
Sciter中文在线文档Sciter在线学习文档
空间赞助:才仁机械
打赏本站
Loading...