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();
}
相关文章
|
搜索推荐 架构师 数据挖掘
架构实操:画好一张业务模型图
本文以SDK设计的角度分析了如何构建一张属于SDK的各个业务的模型图。
1015 14
|
机器学习/深度学习 算法 数据可视化
【模式识别】探秘分类奥秘:最近邻算法解密与实战
【模式识别】探秘分类奥秘:最近邻算法解密与实战
277 0
|
机器学习/深度学习 自然语言处理 算法
DL之Attention:Attention注意力机制的简介、应用领域之详细攻略(二)
DL之Attention:Attention注意力机制的简介、应用领域之详细攻略
DL之Attention:Attention注意力机制的简介、应用领域之详细攻略(二)
|
16天前
|
人工智能 自然语言处理 文字识别
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
Qwen3.7-Max是阿里云百炼面向智能体时代推出的新一代旗舰模型,对标GPT-5.5、Claude Opus 4.7等闭源旗舰。该模型支持百万级token上下文窗口,具备顶级推理能力、多模态搜索与视觉理解增强、流式输出低延迟响应等核心优势,覆盖编程、办公、长周期自主执行等复杂场景。同时支持OpenAI接口兼容,便于系统快速迁移。用户可通过Token Plan团队或节省计划等订阅方式灵活调用,适合企业级高要求场景使用。
6019 30
阿里云百炼Qwen3.7-Max简介:能力、优势、支持订阅计划参考
|
1天前
|
数据采集 人工智能 前端开发
让 Coding Agent 从黑盒到透明:阿里云 Agent 观测审计数据采集实践
AI Agent 规模化落地带来执行黑盒、行为难追溯、成本难度量三大难题。阿里云基于 OTel 标准,面向 Coding Agent、个人通用助理和框架型 Agent,推出 LoongSuite Pilot、插件及探针等无侵入采集方案,让 Agent 实现可看见、可分析、可审计、可治理。
572 135
|
11天前
|
存储 定位技术 数据库
CodeGraph 如何让 Claude Code减少 7 成工具调用?
CodeGraph 为 Coding Agent 提供本地代码知识图谱,把函数、类、调用链和框架路由提前整理成“项目地图”,减少盲目搜索和文件读取。它不是新 Agent,而是上下文基础设施,让 Agent 更快找到正确代码路径,平均减少 7 成工具调用。
1187 3
|
8天前
|
人工智能 安全 定位技术
CodeGraph深度解析 让Claude Code工具调用直降七成的核心原理与实操教程
如今以Claude Code为代表的AI编程智能体已经成为开发者日常编码、项目重构、漏洞修复的必备工具。但在长期使用过程中,几乎所有开发者都会遇到同一个明显痛点:AI虽然具备强大的代码生成与分析能力,却常常陷入盲目探索的循环中。
990 1