精华内容
下载资源
问答
  • 方阵相乘

    千次阅读 2020-01-06 16:22:17
    一代码 package Matrix; /** ...* FileName: Matrix * Author: cakin * Date: 2020/1/6 * Description: 方阵相乘 * a[][]*b[][]=c[][] * 代码中: * i:代表c的行 * j:代表c的列 * k:代表第几次进行...

    一 代码

    package Matrix;
    
    /**
    * Copyright (C), 2020-2020, XXX有限公司
    * FileName: Matrix
    * Author:   cakin
    * Date:     2020/1/6
    * Description: 方阵相乘
    * a[][]*b[][]=c[][]
    * 代码中:
    * i:代表c的行
    * j:代表c的列
    * k:代表第几次进行相加运算
    */
    public class Matrix {
        public static void matrix( double[][] a, double[][] b, double[][] c ) {
            int N = a.length;
            for (int i = 0; i < N; i++)
                for (int j = 0; j < N; j++) {
                    for (int k = 0; k < N; k++) {
                        c[i][j] += a[i][k] * b[k][j];
                    }
                }
        }
    
    
        public static void main( String[] args ) {
            int N = 10;
            double[][] a;
            double[][] b;
            double[][] c = new double[N][N];
            a = new double[N][N];
            b = new double[N][N];
    
    
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    a[i][j] = 1.0;
                    b[i][j] = 2.0;
                }
            }
            matrix(a, b, c);
            for (int i = 0; i < N; i++) {
                for (int j = 0; j < N; j++) {
                    System.out.print(c[i][j] + " ");
                }
                System.out.println();
            }
        }
    }

    二 测试

    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0
    20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0

     

    展开全文
  • 主要为大家详细介绍了C语言实现个矩阵相乘的程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 方阵相乘C代码

    2011-11-22 11:05:50
    全C代码书写的关于方阵相乘的代码,适合刚学习完C语言的人使用~
  • A、B是个n*n的矩阵,计算C=A*B。 传统算法: 按照下面公式计算,需要n3次乘法和n3-n2次加法,时间复杂度为Θ(n3)。 递归算法: 假定n为2的幂,将A、B、C分成4个大小为(n/2)*(n/2)的子矩阵。 用分治法来...

    A、B是两个n*n的矩阵,计算C=A*B。

    传统算法:

    按照下面公式计算,需要n3次乘法和n3-n2次加法,时间复杂度为Θ(n3)。



    递归算法:

    假定n为2的幂,将A、B、C分成4个大小为(n/2)*(n/2)的子矩阵。


    用分治法来计算C。

    需要8次(n/2)*(n/2)矩阵的乘法和4次(n/2)*(n/2)矩阵的加法,其中乘法是原来的1/8倍消费,加法是原来的1/4倍耗费。用m表示n=1是乘法的耗费,用a表示加法的耗费。
    于是有了下面的递推式:

    可以推出:

    同样需要n3次乘法和n3-n2次加法,与传统方法相比,时间复杂度没有改进,反而还增加了递归带来的管理开销。


    Strassen算法:

    复杂度为o(n3),运行时间渐进少于n3。
    像递归方法一样划分矩阵,但在计算C的时候有一些不同。
    首先计算出一些中间值:

    再由这些中间值得出C:

    Strassen算法进行了18次加法和7次乘法。对于运行时间有如下的递推式:

    经过计算可得,运行时间为Θ(nlog7)=O(n2.81)。


    三个算法的比较:

    #include<iostream>
    #include<stdio.h>
    #include<cstdio>
    #include<cstring>
    #define ll long long
    using namespace std;
    
    const int dim=20; //最高的维度,可调
    int mod=1000000007; // 结果取的模,可调
    int mk=5;// 运算时是运算几维矩阵的,可调
    
    struct Matrix
    {
        ll a[dim][dim];
        Matrix(){memset(a,0,sizeof(a));}
    };
    
    
    Matrix operator *(const Matrix& a,const Matrix& b)
    {
        Matrix ret;
        for(int i=0;i<mk;++i)
            for(int j=0;j<mk;++j)
                for(int k=0;k<mk;++k)
                {
                    ret.a[i][j]+=a.a[i][k]*b.a[k][j];
                    ret.a[i][j]%=mod;
                }
        return ret;
    }
    Matrix operator ^(Matrix x, ll n)
    {
        Matrix ret;
        for(int i=0;i<mk;++i)ret.a[i][i]=1;
        while(n)
        {
            if(n&1)ret=ret*x;
            x=x*x;
            n>>=1;
        }
        return ret;
    }
    
    int main()
    {
        int a;
        cin>>a;
    }

     

    转载于:https://www.cnblogs.com/akrusher/p/5987780.html

    展开全文
  • 比如怎么写出7个方阵相乘? m x m x m x m x m x m x m
  • 由矩阵乘法定义可以看出,矩阵A和B可以相乘的条件是A的列数要等于B的行数。 可以看出,方阵是矩阵中最重要的一种,因为它可以求行列式。如果行列式不为0,这样又引出矩阵的逆矩阵这样的概念。方阵A在乘法的运算下,...

    引言

    线性代数(高等代数)是进入大学之后学习代数的起点,和数学分析,解析几何并称数学三大基础课。需要注意的是,一般理工科学的是线性代数,数学系学的是高等代数,高等代数相比于线性代数,除了内容上增加了多项式以外,难度和深度也有增加。当然,高等数学和数学分析所学的内容也有所区别,这里就不再赘述。以如今的数学观点来看,线性代数几乎无处不在,它的概念与方法已经渗透到和数学相关的方方面面,这也正是为什么线性代数如此重要的原因。

    线性代数的课程内容基本上可以划分为矩阵、线性空间,线性变换三大部分,每个部分里还又可以分成若干小部分。当热,线性变换无疑是线性代数的核心内容,而对线性变化的研究又可以转化为对矩阵的研究,如此看来,“矩阵”应当说是线性代数最核心的概念。而行列式又紧密着矩阵,因此行列式的重要性自然也不言而喻。今天我们就简单地分析一下行列式和矩阵的一些浅显性质和意义,限于篇幅和学识,就不过多的展开。

    行列式

    线性代数比较传统的讲法都是从解线性多元方程组开始,因为这样可以自然地引出行列式和矩阵的概念。从数学的历史发展来看,虽然行列式和矩阵看起来“非常相似”,但对行列式的研究早于矩阵。行列式的概念来源于日本的关孝和,而差不多一百年后才由克拉默正式提出了利用行列式解线性方程组的方法,也就是我们熟知的克拉默法则

    行列式的原始定义来源于解n×n型线性方程组,也就是把n×n个系数拿出来进行行列式运算。以完全数学的观点来看,行列式是一个关于列的多重反对称线性函数,至于怎么去具体定义以及行列式的各种性质,这里不再赘述。

    特别要提到的是,行列式的性质与线性方程组的性质高度相关,我们都知道解线性方程组有著名的高斯消元法,也就是不断地把前面的方程乘以一个常数加到后面方程中去,这样就可以逐渐减少后面方程的未知数个数直到不能减少为止,然后通过解这个未知数最少的方程来逐渐解整个方程组。这里可能会出现行列式为0的情形,也就是至少某两个方程是等价的,而等价就是说进行高斯消元后其中一个是另一个的倍数,这样的后果就是方程组的解不唯一,解将由一个或多个参数表达出来。粗略的说,解如果要唯一,那么不等价方程的个数就要等于未知数的个数,这也就是求行列式的价值所在,它恰是判断这一结果的标准。

    行列式只能定义为n×n的形式,因为它最早就是用来研究n×n型线性方程组的。关于这样的线性方程组,著名的克拉默法则指出,如果一个线性方程组的系数行列式不为0,那么它有唯一解并且可以用行列式表达出来。那么一个自然的问题是,如果一个线性方程组的方程个数和未知数个数不一样怎么办?这也就引出了矩阵的概念。但需要注意的是,矩阵并不是行列式的推广,行列式是一种运算,而矩阵则是一个数学结构,或者说研究的对象。

    矩阵

    类似于行列式中的形式,我们把方程组的系数拿出来构成一个所谓的系数矩阵,而把未知数和常数项分别拿出来构成一个列向量,再把系数和常数项重新组合成一个增广矩阵

    实际上高斯消元法对这样的方程组同样有效,而且在这样的表达形式下,我们只需要对增广矩阵进行操作就行了,那么对方程组的研究就完全转化为对矩阵的研究,实现了从具体到抽象的过程。对于数学而言,很多时候我们关心的是解的情况而不是去具体求出来,比如解的存在唯一性,或者不唯一的情况下用几个参数能表达出来。

    为了达到这些目的,就要引入矩阵的“秩”这个深刻概念。从一个a行b列的a×b矩阵中任意拿出n行n列(n≤a,b)构成一个方阵(也就是行数和列数相等的矩阵),如果这个方阵的行列式不为0,就称之为非奇异或可逆的,使得n×n方阵非奇异的最大的n就成为这个矩阵的秩,并且若n等于a和b中较小的一个,就称之为满秩(秩记为R)。实际上,可以看出,矩阵的秩实际上就是不等价方程的个数。接下来就可以证明,线性方程组有解的充分必要条件就是系数矩阵的秩和增广矩阵的秩(记为r)相等,进一步,解的参数有b-r个,如果b-r<0,那么方程组不相容,也就无解。特别的,如果系数矩阵满秩,那么一定有解,因为此时增广矩阵也满秩。至此,线性方程组解的存在唯一性问题已经完全解决。

    再考虑更一般的情形,也就是未知数也不止一列,此时把不同的未知数的列拿来构成一个矩阵,这样就得到了矩阵的乘法含义,即系数矩阵乘以未知数列矩阵等于常系数列矩阵。由矩阵乘法定义可以看出,矩阵A和B可以相乘的条件是A的列数要等于B的行数。

    可以看出,方阵是矩阵中最重要的一种,因为它可以求行列式。如果行列式不为0,这样又引出矩阵的逆矩阵这样的概念。方阵A在乘法的运算下,具有单位元,也即单位矩阵E(对角线全为1的矩阵),满足AE=EA=A。如果AB=BA=E,那么称B为A的逆矩阵。如果再回到线性方程组Ax=b上,如果A可逆,那么在方程组两边左乘A的逆矩阵B,那么x=Bb,这样就直接解出了方程组!这也正是逆矩阵的原始意义。求逆矩阵的方法很多,这里就不多说了。

    方阵的行列式

    线性空间又称向量空间,取定一组基底后,线性空间中的元素完全由它在基底下的系数决定,那么判断若干个向量是否线性相关就转化为系数矩阵秩的问题。一个线性空间到自身的线性映射就称为线性变换,取定一组基底后,线性变换将由它在基底下的矩阵(实际上是一个方阵)唯一决定。例如图形的平移、旋转和压缩等都属于线性变换。

    在求多重积分的变量替换过程中,我们遇到过雅可比矩阵及其行列式,这个行列式拥有深刻的几何意义。dx1dx2……dxn表示的是体积微元,我们知道变量替换要求雅可比行列式不为0,实际上雅可比行列式反应的是有向体积元在线性变换下的伸缩情况,因为微分可以看作切空间上的线性变换。如果雅可比行列式为0,那么线性变换不可逆,它把高维的空间映射到低维空间,一一对应就不复存在,很多东西就失去意义。

    行列式的几何意义通过这种方式得到了粗略的解释,但行列式所能表达的意义远不止于此,例如它还能表示出向量的外积,多面体的体积等等,当然,核心思想都是相似的。

    结语

    我们从线性方程组出发,简单分析了行列式和矩阵这两个概念,又在线性变换这一核心内容下重新观察了矩阵及其行列式。但不得不说的是,关于矩阵的内容博大精深,我们所说的这些连九牛一毛都算不上,充其量只算是引出概念。我们的介绍到这里就告一段落,感兴趣的朋友们可以参看相关的书籍。

    展开全文
  • 矩阵相乘方阵

    2019-07-11 22:15:01
    核心代码 int c[][] = new int [n][n]; //实现矩阵相乘 for(int i = 0;i < n;i++) { for(int j = 0;j < n;j++) { for(int k = 0;k <...核心思想:矩阵相乘 行、列对应相乘相加...
    • 核心代码
    int c[][] = new int [n][n];
    	
    	//实现矩阵相乘
    	for(int i = 0;i < n;i++) {
    		for(int j = 0;j < n;j++) {
    			for(int k = 0;k < n;k++)
    				c[i][j] += a[i][k] * b[k][j];
    		}
    

    核心思想:矩阵相乘 行、列对应相乘相加。

    • 三层for循环控制a、b两个二维数组(矩阵)的行列变化
    • 重点理解i、j、k变化所控制的行列变化
    展开全文
  •  假设 A ,B 是nxn的方阵,将其简单的划分成这种四个小矩阵的形式,A包含abcd四个小矩阵,B包含efgh四个矩阵。 2.令 p1 = a (f- h) , p2 = (a+b)h , p3 = (c+d)c,p4 = d(q-e) , p5 = (a+d)(e+h),p6 = (b-d)(g+...
  • 分治算法求解n介方阵相乘(Strassen)

    千次阅读 2013-12-15 23:54:32
    天在看《算法导论》第4章,看到有关Strassen算法和递归式求解的内容,着实让小弟头疼了一把。...个n介方阵相乘,最简单的算法就是使用三层for循环求解,时间复杂度是O(n3),在此不再详述。 第二种算
  • 用c语言实现个矩阵相乘怎么做?

    千次阅读 2021-05-25 07:37:53
    匿名用户1级2015-01-15 回答C语言实现矩阵相乘问题描述:编写程序,可以实现m*n矩阵和n*p矩阵相乘。m,n,p均小于10,矩阵元素为整数。分析:首先我们可以根据题意写出函数头。可以定为void MatrixMutiply(int m,int n...
  • strassen算法-方阵相乘

    2016-03-28 23:06:30
    实现个n*n方阵相乘的Strassen算法。
  • python 求个矩阵相乘

    千次阅读 2020-04-01 10:32:56
    方法一: def matrix_multiply(matrix1,matrix2): new_matrix = [[0 for i in range(len(matrix1))] for j in range(len(matrix1))] for i in range(len(matrix1)): for j in range(len(matrix1)): ...
  • 实现个矩阵相乘(Java)

    千次阅读 2020-03-23 13:53:24
    矩阵可以用二维数组来表示:比如arr[n][m],其中n表示矩阵的行数m代表矩阵的列数,根据矩阵相乘的特性,个矩阵相乘生成的那个新矩阵的行列是第一个矩阵的行和第二个矩阵的列,为了方便大家理解我这里就举一个例子: ...
  • 个矩阵相乘算法

    千次阅读 2018-03-19 11:55:00
    个矩阵相乘算法 本来是处理个矩阵的连乘求如何加括号使得中间的运算次数最少的问题,但是突然想到实现一下如何求连个矩阵连乘的算法,就实现了一下,挺简单的: 注意程序围绕的思想: 1.个矩阵相乘,前一...
  • C++个矩阵相乘

    2017-11-01 23:37:00
    /*编程求个矩阵相乘的结果。输入第一行是整数m,n,表示第一个矩阵式m行n列的;然后是一个m * n的矩阵。再下一行的输入时整数p,q,表示下一个矩阵p行,q列的(n=p);然后就是一个p行q列的矩阵。要求输出个矩阵相乘...
  • 个矩阵相乘—Strassen算法,相乘的矩阵都为阶数为偶数的方阵,即阶数 n = m*2^k(m,k=1,2,3...)
  • 矩阵相乘的实现-python

    千次阅读 2020-12-30 07:02:25
    第一个数组的列和第二个数组的行一样的时候才能相乘相乘原则:第一个数组的行乘以第二个数组的列然后相加放入对应位置.import numpy as npdef matrix_multi(m1,m2):# 首先建立一个值都是0的矩阵,矩阵形状是矩阵1的...
  • c语言实现个矩阵相乘

    千次阅读 2020-04-19 22:57:28
    #include<stdio.h> #include<stdlib.h> #define M 3 int main(void) { int i,j,k,matrix1[M][M],matrix2[M][M],row1=M ,col1=M ,row2=M,col2=M,matrix[M]... /*为需要相乘个矩阵赋值:*/ prin...
  • 定理 设Am×nA_{m\times n}Am×n​,Bn×sB_{n\times s}Bn×s​满足AB=OAB=OAB=O,则 (1) BBB的各列均为齐次线性方程组Ax=0A\bm{x}=\bm{0}Ax=0的解; (2) r(A)+r(B)≤nr(A)+r(B)\le nr(A)+r(B)≤n。...
  • 个N×N矩阵相乘的算法。

    千次阅读 2020-07-04 14:20:47
    个N×N矩阵相乘的算法。 #include<stdio.h> #define n 3 int main() { int i, j, k; int a[n][n] = { 1,2,3,4,5,6,7,8,9 }, b[n][n] = { 1,2,3,4,5,6,7,8,9 }, c[n][n] = { 0 }; for (i = 0; i < n...
  • 个N阶方阵的乘积

    千次阅读 2018-12-12 20:23:12
    个n阶方阵的乘积C=AB 具体算法如下: #define n 自然数; MATRIXMLT(float A[][n],float B[][n],float [][n]); { int i,j,k; for(i=0;i&lt;n;i++) for(j=0;j&lt;n;j++) { C[i][j]=0; for(k=...
  • c语言实现矩阵相乘

    2014-08-16 19:44:35
    用c语言实现矩阵相乘,适用于三乘三矩阵。
  • 任意阶数相同的矩阵相加与相乘

    千次阅读 2018-06-13 11:41:14
    ~直接放代码 便于自己以后查看(我写的可能...//矩阵相乘代码核心部分更改 int [][] c = new int [N][N]; for(int i=0 ; i&lt;N ; i++) { for(int j=0 ; j&lt;N ; j++) { for(int k=0 ; k&lt;N ...
  • 解决个矩阵相乘的好方法

    千次阅读 2017-04-04 10:43:29
    解决个矩阵相乘的问题
  • c语言矩阵相乘

    2021-05-21 16:16:27
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼程序清单#include&nbspint&nbspmain(void){&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspchar&nbsp&......
  • C语言 求个矩阵相乘

    万次阅读 多人点赞 2017-10-08 11:13:48
    先看下面个矩阵相乘:矩阵A和B都是行两列,矩阵相乘时,A的行元素乘以B的列元素,然后相加。即20*2+5*1=45作为C11(矩阵C的第一行第一列)20*1+5*4=40作为C12(矩阵C的第一行第二列)15*2+10*1=40作为C21(矩阵C...
  • python的几种矩阵相乘的公式详解

    千次阅读 2020-12-17 05:49:37
    对应元素相乘 element-wise product: np.multiply(), 或 * 在Python中,实现对应元素相乘,有2种方式,一个是np.multiply(),另外一个是*。见如下Python代码: import numpy as np # 2-D array: 2 x 3 two_dim_...
  • Rao积由个列数相同的矩阵 对应列Kronecker积构成 矩阵结构运算:向量化(列向量化vec(A),行向量化revec(A)),矩阵化(分行向量矩阵化与列向量矩阵化) 1.2矩阵的性能指标 (实对称矩阵或Hermite矩阵)二次型...
  • void matrix_multiply1(int (*m1)[2], int (*m2)[4], int (*r)[4],int x, int y, int z)#include void matrix_multiply(int *m1, int *m2, int *r,int x, int y, int z){int i, j, k;for (i = 0;...
  • 主要介绍了Python实现的矩阵转置与矩阵相乘运算,结合实例形式分析了Python针对矩阵进行转置与相乘运算的相关实现技巧与操作注意事项,需要的朋友可以参考下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,342
精华内容 3,336
关键字:

两方阵相乘

友情链接: webbrowserclient.rar