zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    【设计模式】策略模式
    【设计模式】模板方法模式
    【C++】《Effective C++》第五章
    【C++】《Effective C++》第四章
    free命令详解(内存)
    top命令详解(动态进程)
    ps命令详解(静态进程)
    SpringBoot_集成Redis
    SpringBoot_热部署插件
    SpringBoot_实现RESTfull API
  • 原文地址:https://www.cnblogs.com/cton/p/3441637.html
Copyright © 2011-2022 走看看