矩阵乘法是一种高效的算法可以把一些一维递推优化到log( n ),还可以求路径方案等,所以更是是一种应用性极强的算法。矩阵,是线性代数中的基本概念之一。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。由于它把许多数据紧凑的集中到了一起,所以有时候可以简便地表示一些复杂的模型。矩阵乘法看起来很奇怪,但实际上非常有用,应用也十分广泛。

只有当矩阵A的列数与矩阵B的行数相等时A×B才有意义。一个m×n的矩阵a(m,n)左乘一个n×p的矩阵b(n,p),会得到一个m×p的矩阵c(m,p),满足矩阵乘法满足结合律,但不满足交换律 一般的矩乘要结合快速幂才有效果。(基本上所有矩阵乘法都要用到快速幂的)   在计算机中,一个矩阵实际上就是一个二维数组。一个n行m列的矩阵与一个m行p列的矩阵可以相乘,得到的结果是一个n行p列的矩阵,其中的第i行第j列位置上的数为第一个矩阵第i行上的m个数与第二个矩阵第j列上的m个数对应相乘后所得的m个乘积之和。比如,下面的算式表示一个2行2列的矩阵乘以2行3列的矩阵,其结果是一个2行3列的矩阵。

其中,结果矩阵的那个4(结果矩阵中第二(i)行第二(j)列)

=

2(第一个矩阵第二(i)行第一列)*2(第二个矩阵中第一行第二(j)列)   +   0(第一个矩阵第二(i)行第二列)*1(第二个矩阵中第二行第二(j)列)

        static void Main(string[] args)
{ //定义三个数组,分别存储矩阵A,B,C
float[,] a = new float[,];
float[,] b = new float[,];
float[,] c = new float[,]; int n, m, mB, p; float[,] s = new float[,];
//矩阵A行数m1,列数n1
n = ;
m = ;
//矩阵B行数m2,列数n2
mB = ;
p = ; if (m != mB)
{
//判断是否可以相乘
Console.WriteLine("不可以相乘!!!");
return;
} a[, ] = ;
a[, ] = ;
a[, ] = ; a[, ] = ;
a[, ] = ;
a[, ] = ; b[, ] = ;
b[, ] = ; b[, ] = ;
b[, ] = ; b[, ] = ;
b[, ] = ; Console.WriteLine("矩阵A:\n");
for (var i = ; i <= n; i++)
{
for (var j = ; j <= m; j++) {
Console.Write("{0}-", a[i, j]);
if (j == m)Console.Write("\n");
}
} Console.WriteLine("矩阵B:\n");
for (var i = ; i <= m; i++)
{
for (var j = ; j <= p; j++)
{
Console.Write("{0}-",b[i, j]);
if (j == p)Console.Write("\n");
} }
Console.WriteLine("矩阵C=A*B:\n");
for (var i = ; i <= n; i++)
{
for (var j = ; j <= p; j++)
{
for (var k = ; k <= m; k++)
{ s[i,j] = s[i,j] + a[i,k]*b[k,j];
}
c[i,j] = s[i,j];
Console.Write("{0}-",c[i,j]);
if (j == p) Console.Write("\n");
}
} Console.Read();
}

C# 矩阵乘法实现的更多相关文章

  1. *HDU2254 矩阵乘法

    奥运 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  2. *HDU 1757 矩阵乘法

    A Simple Math Problem Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

  4. POJ3070 Fibonacci[矩阵乘法]

    Fibonacci Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13677   Accepted: 9697 Descri ...

  5. bzoj 2738 矩阵乘法

    其实这题跟矩阵乘法没有任何卵关系,直接整体二分,用二维树状数组维护(刚刚学会>_<),复杂度好像有点爆炸(好像有十几亿不知道是不是算错了),但我们不能怂啊23333. #include&l ...

  6. 【BZOJ-2476】战场的数目 矩阵乘法 + 递推

    2476: 战场的数目 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 58  Solved: 38[Submit][Status][Discuss] D ...

  7. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1012  Solved: 566[Submit][S ...

  8. 【Codeforces718C】Sasha and Array 线段树 + 矩阵乘法

    C. Sasha and Array time limit per test:5 seconds memory limit per test:256 megabytes input:standard ...

  9. 矩阵乘法的MapReduce实现

    对于任意矩阵M和N,若矩阵M的列数等于矩阵N的行数,则记M和N的乘积为P=M*N,其中mik 记做矩阵M的第i行和第k列,nkj记做矩阵N的第k行和第j列,则矩阵P中,第i行第j列的元素可表示为公式( ...

  10. 矩阵乘法&矩阵快速幂&矩阵快速幂解决线性递推式

    矩阵乘法,顾名思义矩阵与矩阵相乘, 两矩阵可相乘的前提:第一个矩阵的行与第二个矩阵的列相等 相乘原则: a b     *     A B   =   a*A+b*C  a*c+b*D c d     ...

随机推荐

  1. 用js来传参到父网页实现

    今天搞了半天,用location.href提交参数到后台,结果php无法接收到参数,这让我找了半天,终于发现原因是本页被另外的主页引用了,最终发现问题出在提交js上,最终用parent.locatio ...

  2. 调试JDK1.8源码的方法

    背景 在学习JDK源码的时候,免不了需要调试JDK的源码. 比如:想理解ConcurrentHashMap的put(K k, V v)方法,JDK自带的rt.jar文件是支持断点调试,但是却看不到变量 ...

  3. mongodb数据库shell

    mongoexport -d mofangdb -c log_user_access_index --type=csv -f _id,uid,page,date -o log_user_access_ ...

  4. 创建ajax的过程

    step1. 创建XMLHttpRequest对象,也就是创建一个异步调用对象: step2. 创建一个新的HTTP请求,并指定改HTTP请求的方法.URL以及验证信息: step3. 设置响应HTT ...

  5. myeclipce怎么破解

    MyEclipse安装文件下载,下载地址 http://www.jb51.net/softs/150886.html 你也可以进入官方网站下载:http://www.myeclipsecn.com/d ...

  6. 在控制台快速定位js函数

    最近在搞教务处的模拟登录,教务处用js加密密码和账号,为了构造能用的post数据,需要快速的找到对应的js代码.但是,那么多js代码,手动找会找到死的. 恰好学习了两个快速定位的方法:console ...

  7. deepin linux 15.3安装完eclipse启动报错An error has occurred.

    原因是系统中安装了jdk9 导致的. 卸载jdk9就可以了 $ java -version Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings ...

  8. linux学习笔记26--命令wc

    Linux系统中的wc(Word Count)命令的功能为统计指定文件中的行数.字数.字节数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的行数.字 ...

  9. 理解Callable 和 Spring DeferredResult(翻译)

    1-介绍 Servlet 3中的异步支持为在另一个线程中处理HTTP请求提供了可能性.当有一个长时间运行的任务时,这是特别有趣的,因为当另一个线程处理这个请求时,容器线程被释放,并且可以继续为其他请求 ...

  10. toString() 和 (String) 以及 valueOf() 三者的对照关系[java]

    简述 在Java中,往往需要把一个类型的变量转换成String 类型.作为菜鸟,有时候我会使用(String) data,有时候就使用data.toString(),如果不行还会试试 String.v ...