116.复矩阵乘法

简介: 116.复矩阵乘法
#include "stdio.h"
#define MAX 255
void CMatrixMul(ar,ai,br,bi,m,n,k,cr,ci) /*复矩阵相乘*/
int m,n,k; /*m是矩阵A的行数,n是矩阵B的行数,k是矩阵B的列数*/
/*ar,br,cr分别是矩阵A,B,C的实部,ai,bi,ci分别是矩阵A,B, C的虚部*/
double ar[],ai[],br[],bi[],cr[],ci[];
{
  int i,j,l,u,v,w;
      double p,q,s;
      for (i=0; i<=m-1; i++)
    for (j=0; j<=k-1; j++)
    {
      u=i*k+j;
            cr[u]=0.0; ci[u]=0.0;
            for (l=0; l<=n-1; l++)
      {
        v=i*n+l; w=l*k+j;
        p=ar[v]*br[w];
        q=ai[v]*bi[w];
        s=(ar[v]+ai[v])*(br[w]+bi[w]);
        cr[u]=cr[u]+p-q;
        ci[u]=ci[u]+s-p-q;
      }
    }
  return;
}
print_matrix(A,m,n)/*打印的矩阵A(m*n)的元素*/
int m,n; /*矩阵的阶数*/
double A[]; /*矩阵A*/
{
  int i,j;
  for (i=0; i<m; i++)
  {
    for (j=0; j<n; j++)
      printf("%13.7f\t",A[i*n+j]);
    printf("\n");
  }
}
main()
{
  int i,j,n,m,k;
  double Ar[MAX],Br[MAX],Cr[MAX],Ai[MAX],Bi[MAX],Ci[MAX];
  static double cr[3][4],ci[3][4];
  static double ar[3][4]={ {1.0,2.0,3.0,-2.0}, /*矩阵A的实部*/
              {1.0,5.0,1.0,3.0},
              {0.0,4.0,2.0,-1.0}};
  static double ai[3][4]={ {1.0,-1.0,2.0,1.0}, /*矩阵A的虚部*/
              {-1.0,-1.0,2.0,0.0},
              {-3.0,-1.0,2.0,2.0}};
  static double br[4][4]={ {1.0,4.0,5.0,-2.0}, /*矩阵B的实部*/
              {3.0,0.0,2.0,-1.0},
              {6.0,3.0,1.0,2.0},
              {2.0,-3.0,-2.0,1.0}};
  static double bi[4][4]={ {-1.0,-1.0,1.0,1.0}, /*矩阵B的虚部*/
              {2.0,1.0,0.0,5.0},
              {-3.0,2.0,1.0,-1.0},
              {-1.0,-2.0,1.0,-2.0}};
  clrscr();
  puts("**********************************************************");
  puts("*    This is a complex-matrix-multiplication program.    *");
  puts("*    It calculate the two matrixes C(m*k)=A(m*n)B(n*k).  *");
  puts("**********************************************************");
  printf(" >> Please input the number of rows in A, m= ");
  scanf("%d",&m);
  printf(" >> Please input the number of cols in A, n= ");
  scanf("%d",&n);
  printf(" >> Please input the number of cols in B, k= ");
  scanf("%d",&k);
  printf(" >> Please input the %d elements in Ar one by one:\n >> ",m*n);
  for(i=0;i<m*n;i++)
    scanf("%lf",&Ar[i]);
  printf(" >> Please input the %d elements in Ai one by one:\n >> ",m*n);
  for(i=0;i<m*n;i++)
    scanf("%lf",&Ai[i]);
  printf(" >> Please input the %d elements in Br one by one:\n >> ",n*k);
  for(i=0;i<n*k;i++)
    scanf("%lf",&Br[i]);
  printf(" >> Please input the %d elements in Bi one by one:\n >> ",n*k);
  for(i=0;i<n*k;i++)
    scanf("%lf",&Bi[i]);
  CMatrixMul(Ar,Ai,Br,Bi,m,n,k,Cr,Ci); /*进行计算*/
  /*输出乘积结果的实部*/
  printf(" Real part of C(%d*%d)=A(%d*%d)*B(%d*%d):\n",m,k,m,n,n,k);
  print_matrix(Cr,m,k);
  /*输出乘积结果的虚部*/
  printf(" Complex part of C(%d*%d)=A(%d*%d)*B(%d*%d):\n",m,k,m,n,n,k);
  print_matrix(Ci,m,k);
  printf(" Press any key to quit...");
  getch();
}
相关文章
|
前端开发 JavaScript
css之伪类hover改变自身、子元素、其他元素的样式
css之伪类hover改变自身、子元素、其他元素的样式
276 0
|
测试技术 程序员 C++
iOS:项目中无用类检测和无用图片检测汇总
在涉及到项目大改版,或者涉及到某个功能模块大变更,就会涉及到图片废弃和文件废弃的情况。 但是这时候就会遗留下一个很大的问题,没有将废弃的、无用的文件类或资源删除干净。而这次需要对工程代码的无用资源和无用文件进行删除处理,感触颇多,故在此笔记。 首先,感觉很多人的代码习惯还是恶待提高。比如我发现一些人的代码操作习惯,从好到次,可以大略分以下情况
1501 0
iOS:项目中无用类检测和无用图片检测汇总
|
Java 数据库连接 数据安全/隐私保护
利用开源工具实现轻量级上网行为审计(来源ispublic.com)
来源ispublic.com Google上貌似找不到利用开源软件实现上网行为审计的文章——这也难怪,开源在国内并不流行,而上网行为审计在国外也不流行。
1700 0
|
5月前
|
机器学习/深度学习 人工智能 计算机视觉
AI图像质感还原堪比专业摄影!Miracle F1:美图WHEE全新AI图像生成模型,支持超写实与多风格生成
美图WHEE推出的Miracle F1采用扩散模型技术,通过精准语义理解和多风格生成能力,可产出具有真实光影质感的专业级图像作品。
226 5
AI图像质感还原堪比专业摄影!Miracle F1:美图WHEE全新AI图像生成模型,支持超写实与多风格生成
|
11月前
|
机器学习/深度学习 Python
【10月更文挑战第1天】弹性网(Elastic Net)正则化
【10月更文挑战第1天】弹性网(Elastic Net)正则化
149 3
|
Python
Python教程:一文了解如何使用Lambda 表达式和 filter函数实现过滤器
在 Python 中,Lambda 表达式是一种匿名函数,也就是没有名称的函数。它允许您快速定义简单的单行函数,通常用于函数式编程中的一些场景,例如在高阶函数中作为参数传递。
571 2
|
11月前
|
移动开发 编解码 JavaScript
|
缓存 数据库连接 API
Entity Framework Core——.NET 领域的 ORM 利器,深度剖析其最佳实践之路
【8月更文挑战第28天】在软件开发领域,高效的数据访问与管理至关重要。Entity Framework Core(EF Core)作为一款强大的对象关系映射(ORM)工具,在 .NET 开发中扮演着重要角色。本文通过在线书店应用案例,展示了 EF Core 的核心特性和优势。我们定义了 `Book` 实体类及其属性,并通过 `BookStoreContext` 数据库上下文配置了数据库连接。EF Core 提供了简洁的 API,支持数据的查询、插入、更新和删除操作。
249 0
|
消息中间件 负载均衡 Java
"深入Kafka核心:探索高效灵活的Consumer机制,以Java示例展示数据流的优雅消费之道"
【8月更文挑战第10天】在大数据领域,Apache Kafka凭借其出色的性能成为消息传递与流处理的首选工具。Kafka Consumer作为关键组件,负责优雅地从集群中提取并处理数据。它支持消息的负载均衡与容错,通过Consumer Group实现消息的水平扩展。下面通过一个Java示例展示如何启动Consumer并消费数据,同时体现了Kafka Consumer设计的灵活性与高效性,使其成为复杂消费场景的理想选择。
245 4
基于多路径路由的全局感知网络流量分配优化算法matlab仿真
本文提出一种全局感知网络流量分配优化算法,针对现代网络中多路径路由的需求,旨在均衡分配流量、减轻拥塞并提升吞吐量。算法基于网络模型G(N, M),包含N节点与M连接,并考虑K种不同优先级的流量。通过迭代调整每种流量在各路径上的分配比例,依据带宽利用率um=Σ(xm,k * dk) / cm来优化网络性能,确保高优先级流量的有效传输同时最大化利用网络资源。算法设定收敛条件以避免陷入局部最优解。