求公式:1*3+2*3+3*3+……+n*3

本期教程主要讲解矩阵运算中的初始化,加法,逆矩阵和减法。

21.1 初学者重要提示

21.1 初学者重要提示

  1.   复数运算比较重要,后面FFT章节要用到,如果印象不深的话,需要温习下高数知识了。
  2.   ARM提供的DSP库逆矩阵求法有局限性,通过Matlab验证是可以求逆矩阵的,而DSP库却不能正确求解。

本章用到的DSP指令在前面章节都已经讲解过。

主要用于矩阵结构体成员的初始化,浮点格式矩阵结构体定义如下:

定点数Q31格式矩阵结构体定义如下:

定点数Q15格式矩阵结构体定义如下:

这个函数用于浮点格式的矩阵数据初始化。

  •   第2个参数是矩阵行数。
  •   第3个参数是矩阵列数。
  •   第4个参数是矩阵数据地址。

这个函数用于定点数Q31格式的矩阵数据初始化。

  •   第2个参数是矩阵行数。
  •   第3个参数是矩阵列数。
  •   第4个参数是矩阵数据地址。

这个函数用于定点数Q15格式的矩阵数据初始化。

  •   第2个参数是矩阵行数。
  •   第3个参数是矩阵列数。
  •   第4个参数是矩阵数据地址。

* 功能说明: 矩阵数据初始化

实验现象(按下K1按键后串口打印模平方):

以3*3矩阵为例,矩阵加法的实现公式如下:

这个函数用于浮点数的矩阵加法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A + 矩阵B计算结果存储的地址。
  1. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  2. 矩阵在数组中的存储是从左到右,再从上到下。

这个函数用于定点数Q31的矩阵加法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A + 矩阵B计算结果存储的地址。
  1. 使用了饱和运算,输出结果范围[0xx7FFFFFFF]。
  2. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  3. 矩阵在数组中的存储是从左到右,再从上到下。

这个函数用于定点数Q15的矩阵加法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A + 矩阵B计算结果存储的地址。
  1. 使用了饱和运算,输出结果范围[0xFFF]。
  2. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  3. 矩阵在数组中的存储是从左到右,再从上到。

* 功能说明: 矩阵求和

实验现象(按下K2按键后串口打印矩阵加法):

下面通过Matlab来求解矩阵和(在命令窗口输入):

以3*3矩阵为例,矩阵减法的实现公式如下:

这个函数用于浮点数的矩阵减法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A减去矩阵B计算结果存储的地址。
  1. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  2. 矩阵在数组中的存储是从左到右,再从上到下。

这个函数用于定点数Q31的矩阵减法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A减去矩阵B计算结果存储的地址。
  1. 使用了饱和运算,输出结果范围[0xx7FFFFFFF]。
  2. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  3. 矩阵在数组中的存储是从左到右,再从上到下。

这个函数用于定点数Q15的矩阵减法。

  •   第1个参数是矩阵A的源地址。
  •   第2个参数是矩阵B的源地址。
  •   第3个参数是矩阵A减去矩阵B计算结果存储的地址。
  1. 使用了饱和运算,输出结果范围[0xFFF]。
  2. pSrcA,pSrcB,pDst的行数和列数必须是相同的,否则没有办法使用加法运算。
  3. 矩阵在数组中的存储是从左到右,再从上。

* 功能说明: 矩阵减法

实验现象(按下OK按键后串口打印矩阵减法):

下面通过Matlab来求解矩阵减法(在命令窗口输入)。

以3*3矩阵为例,逆矩阵的实现公式如下(Gauss-Jordan法求逆矩阵):

这个函数用于64bit浮点数的逆矩阵求解。

  •   第1个参数是矩阵源地址。
  •   第2个参数是求逆后的矩阵地址。
  1. pSrc必须得是方阵(行数和列数相同)。
  2. pSrc和pDst必须是相同的方阵。
  3. ARM官方库只提供了浮点数矩阵求逆矩阵。

这个函数用于32bit浮点数的逆矩阵求解。

  •   第1个参数是矩阵源地址。
  •   第2个参数是求逆后的矩阵地址。
  1. pSrc必须得是方阵(行数和列数相同)。
  2. pSrc和pDst必须是相同的方阵。

* 功能说明: 求逆矩阵 注意,ARM提供的DSP库逆矩阵求发有局限性,通过Matlab验证是可以求逆矩阵的,而DSP库却不能正确求解。

实验现象(按下K3按键后串口打印逆矩阵):

下面我们通过Matlab来实现求逆矩阵(在命令窗口输入):

V7-216_DSP矩阵运算(加法,减法和逆矩阵)

  1. 学习DSP复数运算(加法,减法和逆矩阵)
  1. 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  2. 按下按键K1,串口打函数DSP_MatInit的输出数据。
  3. 按下按键K2,串口打函数DSP_MatAdd的输出数据。
  4. 按下摇杆OK键,串口打函数DSP_MatSub的输出数据。

特别注意附件章节C的问题

上电后串口打印的信息:

波特率 115200,数据位 8,奇偶校验位无,停止位 1。

硬件外设的初始化是在 bsp.c 文件实现:

* 功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次 - 设置NVIV优先级分组为4。 配置系统时钟到400MHz - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。 - 默认不开启,如果要使能此选项,务必看V7开发板用户手册第8章 bsp_InitKey(); /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
  •   启动一个自动重装软件定时器,每100ms翻转一次LED2。
* 功能说明: c程序入口 * 返 回 值: 错误代码(无需处理) /* 进入主程序循环体 */ /* 判断定时器超时时间 */ /* 其他的键值不处理 */

V7-216_DSP矩阵运算(加法,减法和逆矩阵)

  1. 学习DSP复数运算(加法,减法和逆矩阵)
  1. 启动一个自动重装软件定时器,每100ms翻转一次LED2。
  2. 按下按键K1,串口打函数DSP_MatInit的输出数据。
  3. 按下按键K2,串口打函数DSP_MatAdd的输出数据。
  4. 按下摇杆OK键,串口打函数DSP_MatSub的输出数据。

特别注意附件章节C的问题

上电后串口打印的信息:

波特率 115200,数据位 8,奇偶校验位无,停止位 1。

硬件外设的初始化是在 bsp.c 文件实现:

* 功能说明: 初始化所有的硬件设备。该函数配置CPU寄存器和外设的寄存器并初始化一些全局变量。只需要调用一次 - 设置NVIV优先级分组为4。 配置系统时钟到400MHz - 可用于代码执行时间测量,MDK5.25及其以上版本才支持,IAR不支持。 - 默认不开启,如果要使能此选项,务必看V7开发板用户手册第8章 bsp_InitKey(); /* 按键初始化,要放在滴答定时器之前,因为按钮检测是通过滴答定时器扫描 */
  •   启动一个自动重装软件定时器,每100ms翻转一次LED2。
* 功能说明: c程序入口 * 返 回 值: 错误代码(无需处理) /* 进入主程序循环体 */ /* 判断定时器超时时间 */ /* 其他的键值不处理 */

本期教程就跟大家讲这么多,有兴趣的可以深入研究下算法的具体实现。

实际上就是将发散的部分忽视了之后在特殊意义下的求和得到的 -\frac1{12} ,即 \zeta(-1) 的值。

我要回帖

更多关于 已知通项公式怎么求前n项和 的文章

 

随机推荐