关于SSA算法中矩阵的3种运算:转置、求逆、相乘

news2024/11/17 20:49:22

1、矩阵转置

  // 矩阵转置(二维矩阵)
    public static double[][] transposeTwo(double[][] matrix) {
        int rows = matrix.length;
        int cols = matrix[0].length;
        double[][] transposedMatrix = new double[cols][rows];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                transposedMatrix[j][i] = matrix[i][j];
            }
        }

        return transposedMatrix;
    }

矩阵转置测试:

package test;

public class transposeOne {

    // 矩阵转置(二维矩阵)
    public static double[][] transposeTwo(double[][] matrix) {
        int rows = matrix.length;
        int cols = matrix[0].length;
        double[][] transposedMatrix = new double[cols][rows];

        for (int i = 0; i < rows; i++) {
            for (int j = 0; j < cols; j++) {
                transposedMatrix[j][i] = matrix[i][j];
            }
        }

        return transposedMatrix;
    }

    public static void printArray(double[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // 定义一个3x3的矩阵
        double[][] matrixData1= {
                {1, 2, 3},
                {0, 1, 4},
                {5, 6, 0}
        };

        double[][] f=transposeTwo(matrixData1);
        printArray(f);

    }

}

在这里插入图片描述

2、矩阵求逆

    // 矩阵求逆(使用高斯-若尔当消元法)
    public static double[][] matrixInverse(double[][] matrix) {
        int n = matrix.length;
        double[][] result = new double[n][n];
        double[][] temp = new double[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                temp[i][j] = matrix[i][j];
            }
        }

        for (int i = 0; i < n; i++) {
            result[i][i] = 1;
        }

        for (int i = 0; i < n; i++) {
            double diagonalElement = temp[i][i];
            if (diagonalElement == 0) {
                throw new IllegalArgumentException("Matrix is not invertible");
            }

            for (int j = 0; j < n; j++) {
                temp[i][j] /= diagonalElement;
                result[i][j] /= diagonalElement;
            }

            for (int k = 0; k < n; k++) {
                if (k != i) {
                    double tempValue = temp[k][i];
                    for (int j = 0; j < n; j++) {
                        temp[k][j] -= tempValue * temp[i][j];
                        result[k][j] -= tempValue * result[i][j];
                    }
                }
            }
        }

        return result;
    }

矩阵求逆测试

package test;

/**
 * 求二维矩阵的逆矩阵
 */
public class test1 {

    public static double[][] invert(double[][] matrix) {
        int n = matrix.length;
        double[][] result = new double[n][n];
        double[][] temp = new double[n][n];

        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                temp[i][j] = matrix[i][j];
            }
        }

        for (int i = 0; i < n; i++) {
            result[i][i] = 1;
        }

        for (int i = 0; i < n; i++) {
            double diagonalElement = temp[i][i];
            if (diagonalElement == 0) {
                throw new IllegalArgumentException("Matrix is not invertible");
            }

            for (int j = 0; j < n; j++) {
                temp[i][j] /= diagonalElement;
                result[i][j] /= diagonalElement;
            }

            for (int k = 0; k < n; k++) {
                if (k != i) {
                    double tempValue = temp[k][i];
                    for (int j = 0; j < n; j++) {
                        temp[k][j] -= tempValue * temp[i][j];
                        result[k][j] -= tempValue * result[i][j];
                    }
                }
            }
        }

        return result;
    }

    public static void printArray(double[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // 定义一个3x3的矩阵
        double[][] matrixData = {
                {1, 2, 3},
                {0, 1, 4},
                {5, 6, 0}
        };

        // 求矩阵的逆
        double[][] result = invert(matrixData);
        printArray(result);

    }
    
}

在这里插入图片描述
在这里插入图片描述

3、矩阵相乘

   // 矩阵相乘
    public static double[][] matrixMultiply(double[][] matrix1, double[][] matrix2) {
        int rows1 = matrix1.length;
        int cols1 = matrix1[0].length;
        int rows2 = matrix2.length;
        int cols2 = matrix2[0].length;

        if (cols1 != rows2) {
            throw new IllegalArgumentException("矩阵1的列数必须等于矩阵2的行数");
        }

        double[][] result = new double[rows1][cols2];

        for (int i = 0; i < rows1; i++) {
            for (int j = 0; j < cols2; j++) {
                for (int k = 0; k < cols1; k++) {
                    result[i][j] += matrix1[i][k] * matrix2[k][j];
                }
            }
        }

        return result;
    }

矩阵相乘测试:

package test;

public class test_matrixMultiply {
    // 矩阵相乘
    public static double[][] matrixMultiply(double[][] matrix1, double[][] matrix2) {
        int rows1 = matrix1.length;
        int cols1 = matrix1[0].length;
        
        int rows2 = matrix2.length;
        int cols2 = matrix2[0].length;

        if (cols1 != rows2) {
            throw new IllegalArgumentException("矩阵1的列数必须等于矩阵2的行数");
        }

        double[][] result = new double[rows1][cols2];

        for (int i = 0; i < rows1; i++) {
            for (int j = 0; j < cols2; j++) {
                for (int k = 0; k < cols1; k++) {
                    result[i][j] += matrix1[i][k] * matrix2[k][j];
                }
            }
        }

        return result;
    }

    public static void printArray(double[][] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        // 定义一个3x3的矩阵
        double[][] matrixData1= {
                {1, 2, 3},
                {0, 1, 4},
                {5, 6, 0}
        };

        double[][] matrixData2 = {
                {1, 2, 3},
                {0, 1, 4},
                {5, 6, 0}
        };

        // 求矩阵的逆
        double[][] result = matrixMultiply(matrixData1,matrixData2);
        printArray(result);
    }
    
}

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1082419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇博客带你学会关于Vuex使用

前言&#xff1a; 在我们之前我们的学习vue知识中&#xff0c;我们组件传递方式有父传子&#xff0c;子传父&#xff0c;这两种方法传递参数复杂&#xff0c;所以我们今天来学习Vuex&#xff0c;就可以解决这个传递的问题&#xff01;&#xff01;&#xff01; 一&#xff0c;V…

【算法思考】端到端实例分割模型 SOLO

目录 背景工作总结 背景 不同于语义分割&#xff0c;实例分割不仅需要输出图像的语义蒙版&#xff0c;还要对图像中不同的实例作区分。如下图所示&#xff0c;实例分割任务需要多不同的羊做区分&#xff0c;输出不同的实例蒙版。 由于图片中实例个数的不确定性&#xff0c;实例…

第二章 C++的输出

系列文章目录 第一章 C的输入 文章目录 系列文章目录前言一、个人名片二、cout三、printf总结 前言 今天来学C的输出吧&#xff01; 一、个人名片 二、cout cout 三、printf printf 总结 最近懒得写博客怎么办&#xff1f;

【技术研究】环境可控型原子力显微镜超高真空度精密控制解决方案

摘要&#xff1a;针对原子力显微镜对真空度和气氛环境精密控制要求&#xff0c;本文提出了精密控制解决方案。解决方案基于闭环动态平衡法&#xff0c;在低真空控制时采用恒定进气流量并调节排气流量的方法&#xff0c;在高真空和超高真空控制时则采用恒定排气流量并调节进气流…

Docker系列--网络的配置

原文网址&#xff1a;Docker系列--网络的配置_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍Docker的网络的配置。 官网网址 https://docs.docker.com/engine/reference/commandline/network/ 网络的默认设置 Docker启动之后&#xff0c;系统中会产生一个名为docker0的…

2015架构真题(五十)

供应链中信息流覆盖了供应商、制造商和分销商&#xff0c;信息流分为需求信息流和供应信息流&#xff0c;&#xff08;&#xff09;属于需求信息流&#xff0c;&#xff08;&#xff09;属于供应信息流。 库存记录生产计划商品入库单提货发运单 客户订单采购合同完工报告单销售…

Leetcode.2867 统计树中的合法路径数目

题目链接 Leetcode.2867 统计树中的合法路径数目 rating : 2428 题目描述 给你一棵 n n n 个节点的无向树&#xff0c;节点编号为 1 1 1 到 n n n 。给你一个整数 n n n 和一个长度为 n − 1 n - 1 n−1 的二维整数数组 e d g e s edges edges &#xff0c;其中 e d g …

Matlab地理信息绘图—风玫瑰图

文章目录 风玫瑰图的作用Matlab代码实现结果展示 风玫瑰图的作用 风玫瑰图&#xff08;Wind Rose Plot&#xff09;是一种用于可视化风向和风速分布的图表。它通常以极坐标形式呈现&#xff0c;其中角度表示风向&#xff0c;半径表示风速的频率或相对概率。风玫瑰图对于理解和呈…

项目log日志mysql记录,熟悉python的orm框架

直接在项目里面创建一个class&#xff0c;这个类对应着mysql里面的表 我们运行项目&#xff0c;可以自动建立表 在.env中找到mysql的配置信息&#xff0c;这个是在NB服务器上运行的mysql&#xff0c;localhost需要变成NB服务器的ipv4地址 使用Mysql工具连接查看&#xff0c;连…

【Java学习之道】继承与多态

引言 本文将介绍面向对象编程的核心概念——继承与多态。对于初学者来说&#xff0c;掌握这些基本概念是迈向Java高手的第一步。接下来&#xff0c;让我们一起揭开继承与多态的神秘面纱&#xff0c;感受它们的魅力吧&#xff01; 一、继承 继承是面向对象编程的一个重要特性…

C++学习day5

目录 作业&#xff1a; 1> 思维导图 2> 多继承代码实现沙发床 1>思维导图 2> 多继承代码实现沙发床 #include <iostream>using namespace std; //创建沙发类 class sofa { private:string sitting; public:sofa(){cout << "sofa的无参构造函数…

算法leetcode|82. 删除排序链表中的重复元素 II(rust重拳出击)

文章目录 82. 删除排序链表中的重复元素 II&#xff1a;样例 1&#xff1a;样例 2&#xff1a;提示&#xff1a; 分析&#xff1a;题解&#xff1a;rust&#xff1a;go&#xff1a;c&#xff1a;python&#xff1a;java&#xff1a; 82. 删除排序链表中的重复元素 II&#xff1…

开发者职场“生存状态”大调研报告分析 - 第一版

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

三轮技术面 +HR 面,字节跳动面试也不过如此......

前言 人人都有大厂梦&#xff0c;对于软件测试人员来说&#xff0c;BAT 为首的一线互联网公司肯定是自己的心仪对象&#xff0c;毕竟能到这些大厂工作&#xff0c;不仅薪资高待遇好&#xff0c;而且能力技术都能够得到提升&#xff0c;最关键的是还能够给自己镀上一层金&#…

Unity中Shader的光照衰减

文章目录 前言一、衰减原理1、使用一张黑白渐变贴图用于纹理采样2、把模型从世界坐标转化为灯光坐标&#xff08;即以灯光为原点的坐标系&#xff09;3、用转化后的模型坐标&#xff0c;对黑白渐变纹理进行纹理采样4、最后&#xff0c;把采样后的结果与光照模型公式的结果相乘输…

PBA.客户需求分析管理

1 需求的三个层次: Requirement/Wants/Pains 大部分人认为&#xff0c;产品满足不了客户需要&#xff0c;是因为客户告知的需求是错误的&#xff0c;这听起来有一些道理&#xff0c;却没有任何意义。不同角色对于需求的理解是不一样的。在客户的需求和厂家的需求之间必然有一定…

分布式文件服务器——Windows环境MinIO的三种部署模式

上节简单聊到MinIO&#xff1a;分布式文件存储服务——初识MinIO-CSDN博客&#xff0c;但没具化&#xff0c;本节开始展开在Windows环境下 MinIO的三种部署模式&#xff1a;单机单节点、单机纠删码、集群模式。 部署的几种模式简要概括 所谓单机单节点模式&#xff1a;即MinI…

什么是谐波?谐波的危害

一、什么是谐波&#xff1f; “谐波”一词起源于声学。有关谐波的数学分析在18世纪和19世纪已经奠定了良好的基础。傅里叶等人提出的谐波分析方法至今仍被广泛应用。电力系统的谐波问题早在20世纪20年代和30年代就引起了人们的注意。当时在德国&#xff0c;由于使用静止汞弧变流…

PCL源码分析:直通滤波

文章目录 一、简介二、源码分析三、小结参考资料一、简介 让我们从一个最简单的功能开始慢慢重新认识PCL~~,虽然这个功能很简单,但是已可以从中管中窥豹来更加深入了解PCL的内部结构。 二、源码分析 在真正看PCL的源代码之前,我们先简单的看一下直通滤波这个类的类关系: 这…

自适应前照灯系统控制器AFS

自适应前照灯控制系统&#xff08;Adaptive Front-lighting System&#xff0c;简称AFS&#xff09;是一种智能灯光调节系统。通过感知驾驶员操作、车辆行驶状态、路面变化以及天气环境等信息&#xff0c;AFS 自动控制前照灯实时进行上下、左右照明角度的调整&#xff0c;为驾驶…