首页 > 其他分享 >【C语言基础】C语言实现矩阵相乘

【C语言基础】C语言实现矩阵相乘

时间:2022-11-29 18:23:15浏览次数:82  
标签:Multi kalman int 矩阵 C语言 相乘

前言

最近在考虑如何实现kalman跟踪,其中涉及较多矩阵运算,比如矩阵相乘、矩阵转置等,先实现了一个矩阵相乘的c代码如下。其实,后续可以使用matrix类实现kalman跟踪。

code

#include "stdio.h"
void Multi(int * left, int * right, int * result, int f1, int f2, int s1, int s2);

int main()
{
 int i, j;
 int a[4][3] = 
 { {1,2,3},
  {4,5,6},
  {7,8,9},
  {1,2,3}};
 int b[3][3] =
 { { 1,2,3 },
 { 4,5,6 },
 {7,8,9} };
 //c矩阵为a矩阵与b矩阵的乘积
 int c[4][3];
 //计算两个矩阵相乘
 Multi(a[0], b[0],c[0], 4, 3, 3, 3);
 //输出c矩阵
 for (i = 0; i < 4; i++)
 {
  for(j=0;j<3;j++)
   printf("%4d ", c[i][j]);
  printf("\n");
 }
 //system("pause");
 return 0;
}

//矩阵相乘算法,最后四个参数是两个相乘的矩阵的行数和列数
void Multi(int * left, int * right, int * result,int f1, int f2, int s1, int s2)
{
 //int a[f1][f2], b[s1][s2], c[f1][s2];
 //a[i][j]==a[i*f2+j]
 //由矩阵相乘,要求f2=s1,以下用f2
 for (int i = 0; i < f1; i++) //i表示第i行
 {
  for (int j = 0; j < s2; j++) //j表示第j列
  {
   result[i*f2 + j] = 0;  //在这里 result[i][j] = result[i*f2+j];
   for(int p=0;p<f2;p++)
   {
    result[i*f2 + j] +=left[i*f2+p]*right[p*f2+j];
   }
  }
 }
}
View Code

 

参考

1. 矩阵相乘

2. github_ikalman;

3. Kalman滤波通俗理解+实际应用;

标签:Multi,kalman,int,矩阵,C语言,相乘
From: https://www.cnblogs.com/happyamyhope/p/16924803.html

相关文章

  • 力扣240(java&python)-搜索二维矩阵 II(中等)
    题目:编写一个高效的算法来搜索 m x n 矩阵matrix中的一个目标值target。该矩阵具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 示例......
  • 【转】C语言表驱动法编程实践
    来源:C语言表驱动法编程实践(精华帖,建议收藏并实践)(qq.com)数据压倒一切。如果选择了正确的数据结构并把一切组织的井井有条,正确的算法就不言自明。编程的核心是数据结......
  • 【转】嵌入式C语言代码优化方案
    来源:嵌入式C语言代码优化方案(深度好文,建议花时间研读并收藏)(qq.com)1、选择合适的算法和数据结构选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量......
  • 螺旋矩阵II-LeetCode59 考验代码能力
    力扣链接:https://leetcode.cn/problems/spiral-matrix-ii/题目  给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn 正方......
  • C语言进阶题库
    C语言进阶题库​​1.约瑟夫生者死者小游戏​​​​2.五人分鱼​​​​3.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?​​​​4.企业发放的奖金根......
  • c语言自定义输出小数点位数
    C语言中常用的小数有两种类型,分别是float或double;float称为单精度浮点型,double称为双精度浮点型。不像整数,小数没有那么多幺蛾子,小数的长度是固定的,float始终占用4个......
  • C语言中 char s[] 和 char* s 的区别
    chars[]和char*s的区别1、数组本质2、指针指针的指向3、字符数组4、char*与chara[]5、char**和char*a[]char*a[]char**sC语言指针可......
  • C语言递归算法解决李白打酒问题
    一、概念递归算法(英语:recursionalgorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此......
  • 用c语言求出p=n!/(n-m)!
    #include<stdio.h>intmain(){ intm,n,P; intf(intx);     /*声明函数*/  printf("请输入mandn的值!\n");  scanf("%d%d",&m,&n); P=f(n)/f(n-m)......
  • C语言结构体对齐
    结构对齐规则结构体(struct)的数据成员,第一个数据成员存放的地址为结构体变量偏移量(offset)为0的地址处。结构体成员自身对齐时,存放的地址为有效对齐值=min{自身对......