matlab 卷积公式与矩阵实现

其实是很简单的代码,叫了翔哥给代码给我改,果断将JAVA改成C++,太简单了。。

我不知道代码是什么意思,贴个记录先。

//matrix multiple opr
#include <stdio.h>
#include <iostream>
using namespace std;

#define maxn 500
int n , m , a, b , r , s , A1[maxn][maxn]; 
int A[maxn][maxn],B1[maxn][maxn] ,B[maxn][maxn];
int R[maxn][maxn];

void conv2()
{
    int e = 0;
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<s;j++)
        {
            for(int k=0;k<r;k++)
            {
                for(int p=0;p<s;p++)
                {
                    if(i-k >= 0 && j-p >=0)
                        e = e + A1[k][p] * B1[i-k][j-p];
                    else if(i-k<0 && j-p>=0)
                        e = e + A1[k][p] * B1[i-k+r][j-p];
                    else if(i-k>=0&&j-p<0)
                        e = e + A1[k][p] * B1[i-k][j-p+s];
                    else
                        e = e + A1[k][p] * B1[i-k+r][j-p+s];
                }
            }
            R[i][j] = e;
            e = 0;
        }
    }
}

main()
{
    puts("请输入矩阵A的行数与列数
"); 
    scanf("%d %d",&m,&n);
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
            scanf("%d",&A[i][j]);
    }
    puts("请输入矩阵B的行数与列数:");
    scanf("%d %d",&a,&b);
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<b;j++)
        {
            scanf("%d",&B[i][j]);
        }
    }
    r = m + a -1 ; s = n + b - 1;
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<s;j++)
        {
            if(i<m && j<n) A1[i][j] = A[i][j];
            else A1[i][j] = 0;
        }
    }
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<s;j++)
        {
            if(i<a && j<b) B1[i][j] = B[i][j];
            else B1[i][j] = 0;
        }
    }
    conv2();
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<s;j++)
        {
            printf("%d ",R[i][j]);
        }
        printf("
");
    }
    scanf("%d",&A[0][0]);
}
/*
5 5
17 24 1 8 15 
23 5 7 14 16 
4 6 13 20 22 
10 12 19 21 3 
11 18 25 2 9
3 3
1 2 1 
0 2 0 
3 1 3

*/
View Code
原文地址:https://www.cnblogs.com/cton/p/3441637.html