精华内容
下载资源
问答
  • matlab转C语言

    2018-12-27 10:41:00
    1.软件版本 matlab R2018a 2.步骤 (1).编写特定功能的matlab代码,以及其测试文件 (2).检查matlab代码的兼容性,确保matlab代码都能转换成C/C++代码...在C语言编译器中验证生成的 .c 文件 3.详细步骤 3.1 ...

    1.软件版本  matlab R2018a

    2.步骤

       (1).编写特定功能的matlab代码,以及其测试文件

       (2).检查matlab代码的兼容性,确保matlab代码都能转换成C/C++代码(并不是所有的matlab代码都能生成C/C++代码)

       (3).生成 .c 文件和mex文件

       (4).在C语言编译器中验证生成的 .c 文件

    3.详细步骤

       3.1 编写matlab代码及其测试文件

             1.编写matlab代码

    function [c,d] = add(a,b)
      for i =1:1:10
           c = a + i;
           d = b * i;
      end
    end
    

             2.编写测试文件。类似于Verilog语言里面的testbench,给出输入信号,然后调用matlab的功能函数

    clear all;
    clc;
    close all;
    
    x = 8;
    y = 17;
    
    [m,n] = add(x,y);
    

      3.2 生成步骤

           1.在APP菜单栏里面找到matlab coder ,双击打开

           2.Entry-Point Function 里面选择matlab的功能函数文件。如果是一个大型工程,只需要把最顶层的文件添加进来。它会自动的添加下面的子文件。下一步

          

           3.这里添加测试文件tb_add。然后点击autodefine input types.系统会自动的为输入变量分配类型,默认是double。也可以手动为输入变量分配类型。需要注意的是需要将matlab的工作路径设置在测试文件所在的路径,不然这一步会提示没定义测试文件。下一步

           

           4.点击check for issues,系统会生成MEX函数。如果功能函数和测试文件有错误或者哪些matlab语句不能转换成C语言,在这一步都会报出来。如果在开始编写matlab功能函数的时候不知道哪些语句无法生成C语言,就先不用管。然后在这一步根据提示进行修改。下一步

           

            5.这一步是配置生成C语言的参数。

               1.build type是配置要生成文件的类型,这里选择source code.

               2.hardware Board 这一栏选择None select device below.然后根据自己的硬件板,在device 那一栏选择相应的器件。如果没有硬件板,就选择默认的matlab host computer

               3.ToolChain,根据自己的C语言编译器进行选择相应的编译器(貌似是这样,不确定)

               4.more setting 里面根据自己的需要进行配置,一般可以选择默认配置

               5.点击generate

           

           6.下面是生成代码后的界面,至此就算生成成功了

     

    转载于:https://www.cnblogs.com/xingjian92/p/10183651.html

    展开全文
  • 今天看了下MATLAB转换C语言这个功能怎么实现,看到网上有一篇写的挺好,便复制了过来,为保护版权,在此附上文章出处:matlab转C语言 - xing见 - 博客园https://www.cnblogs.com/xingjian92/p/10183651.html(略有...

    今天看了下MATLAB转换C语言这个功能怎么实现,看到网上有一篇写的挺好,便复制了过来,为保护版权,在此附上文章出处:

    matlab转C语言 - xing见 - 博客园

    https://www.cnblogs.com/xingjian92/p/10183651.html(略有修改)

    1.软件版本  matlab R2020a

    2.步骤

       (1).编写特定功能的matlab代码,以及其测试文件

       (2).检查matlab代码的兼容性,确保matlab代码都能转换成C/C++代码(并不是所有的matlab代码都能生成C/C++代码)

       (3).生成 .c 文件和mex文件

       (4).在C语言编译器中验证生成的 .c 文件

    3.详细步骤

       3.1 编写matlab代码及其测试文件

             1.编写matlab代码

    1

    2

    3

    4

    5

    6

    function [c,d] = add(a,b)

      for i =1:1:10

           c = a + i;

           d = b * i;

      end

    end

             2.编写测试文件。类似于Verilog语言里面的testbench,给出输入信号,然后调用matlab的功能函数

    1

    2

    3

    4

    5

    6

    7

    8

    clear all;

    clc;

    close all;

    x = 8;

    y = 17;

    [m,n] = add(x,y);

      3.2 生成步骤

           1.在APP菜单栏里面找到matlab coder ,双击打开

           2.Entry-Point Function 里面选择matlab的功能函数文件。如果是一个大型工程,只需要把最顶层的文件添加进来。它会自动的添加下面的子文件。下一步

           b455eb9dce3ad6fac27d3675041ca0f5.png

           3.弹出如下窗口,这个窗口要求我们指定函数的形参类型。有两种方法,第一种方法:在下面的第1个输入框中,输入被转函数的测试语句,这条语句可以有两种选择:①直接代入一组合理的形参,调用该函数,②选择一个调用该函数的m脚本;这里添加测试文件tb_add。然后点击autodefine input types.系统会自动的为输入变量分配类型,默认是double。也可以手动为输入变量分配类型。需要注意的是需要将matlab的工作路径设置在测试文件所在的路径,不然这一步会提示没定义测试文件。下一步

            b1b485358cda3d191940e9d5e72290d6.png

           4.点击check for issues,系统会生成MEX函数。如果功能函数和测试文件有错误或者哪些matlab语句不能转换成C语言,在这一步都会报出来。如果在开始编写matlab功能函数的时候不知道哪些语句无法生成C语言,就先不用管。然后在这一步根据提示进行修改。下一步

            17d19566a4f78c575bb77da19ccefb56.png

            5.这一步是配置生成C语言的参数。

               1.build type是配置要生成文件的类型,这里选择source code.

               2.hardware Board 这一栏选择None select device below.然后根据自己的硬件板,在device 那一栏选择相应的器件。如果没有硬件板,就选择默认的matlab host computer

               3.ToolChain,根据自己的C语言编译器进行选择相应的编译器(貌似是这样,不确定)

               4.more setting 里面根据自己的需要进行配置,一般可以选择默认配置

               5.点击generate

            fe7db826d67ab5818cd4d38d511c9baf.png

           6.下面是生成代码后的界面,至此就算生成成功了

    3159b2505513622585fd34457c641b2e.png

    展开全文
  • MATLAB转C语言的步骤 步骤 我们首先以求三阶矩阵的逆为例,首先在matlab中编写的代码如下: function[res] = inverse(src) res = inv(src) end 此为新建的一个函数,函数的保存名称为 inverse.m ,需要注意的是这...

    MATLAB转C语言的步骤

    步骤

    我们首先以求三阶矩阵的逆为例,首先在matlab中编写的代码如下:

      function[res] = inverse(src)
      res = inv(src)
      end
    

    此为新建的一个函数,函数的保存名称为 inverse.m ,需要注意的是这个.m文件必须是函数文件,而不能是脚本文件,而且文件的名称和函数的名称必须一致。
    在matlab中输入一个三阶矩阵与输出的结果如下所示:
    `在这里插入图片描述
    在本文的末尾会验证在VS2017C语言代码的运行结果。
    进入主题,在已经写好了函数的前提下,我们在matlab主界面点击 APP (在编辑器旁边),然后点击下拉框,输入code找到如下图的功能模块:
    在这里插入图片描述
    点击上图中的第一个图标,即 MATLAB Coder ,会弹出下面的界面。第一步,可以直接输入函数的名称,或者点击 Add Entry-Point Function 浏览出函数文件。然后点击next.如下图:
    在这里插入图片描述
    弹出如下窗口,要求输入指定的形参类型,可以直接输入,或者点击 Autodefine Input Types ,直接填入形参类型。

    如果被转的函数中还调用了全局变量,点击下图的add global,把全局变量的名称和类型都填写上。
    在这里插入图片描述

    点击next

    弹出下图(在此界面的输入中可以选择直接输入函数的输入,或者选择一个引用了这个函数的程序,系统会直接检测出你定义的函数的输入形式):点击check for issues按钮,matlab会检测一下你写的m函数能否转换成C函数,如果不能,会给出report,告诉你为什么不能转,哪一行代码导致的不能转,把bug修改完之后,点击clear Mex清除刚才的结果(如果正确的话则不会显示这个按钮),再点击check for issues按钮重新检查即可。如果检测没问题,右下角的next按钮就亮了,并闪烁,你可以点击next了。
    在这里插入图片描述
    点击next之后就会出现如下界面,可以根据要求进行选择:
    在这里插入图片描述
    结果如下:
    在这里插入图片描述
    下面就是验证生成代码是否正确,我们采用VS2017编写代码及逆行验证,VS2017中的代码如下:

    #include <stdio.h>
    #include "inverse.h"
    int main()
    {
    	double a[9] = { 1,0,1,0,2,1,1,1,1 };
    	double b[9];
    	inverse(a, b);
    	
    	for (int i = 0; i < 9; i++)
    	{
    		printf("%f ", b[i]);
    		printf("\n");
    	}
    	return 0;
    }
    

    其中,我把matlab生成的代码做成 inverse.h 的头文件(VS中将代码块封装成头文件的步骤请参照我 C语言 中的博文),运行的结果如下:
    在这里插入图片描述
    代码转换成功。

    展开全文
  • matlab转C语言的操作步骤(1)——基本操作

    万次阅读 多人点赞 2019-06-22 17:59:32
    文章的最后,我们会看看转换出的C语言函数,在单片机上的运行结果。 新建一个.m文件(这个文件必须是函数文件,如下图所示,而不能是脚本文件。而且matlab还有要求,函数名和文件名必须一致),在.m文件中把求...

    以求3x3矩阵的逆矩阵为例:

    先看看在matlab中的运行结果:

    文章的最后,我们会看看转换出的C语言函数,在单片机上的运行结果。

     

     

    新建一个.m文件(这个文件必须是函数文件,如下图所示,而不能是脚本文件。而且matlab还有要求,函数名和文件名必须一致),在.m文件中把求逆函数写好,如下:

    在matlab'主窗口的app中找到coder工具,如下:

    弹出如下界面,要求我们输入要转换的.m文件中所有的函数名。你可以一个个的输入函数名,也可以浏览出那个m文件,这个coder工具会自动识别出函数名。再点击右下角next,如下图:

    弹出如下窗口,这个窗口要求我们指定函数的形参类型。有两种方法,第一种方法:在下面的第1个输入框中,输入被转函数的测试语句,这条语句可以有两种选择:①直接代入一组合理的形参,调用该函数,②选择一个调用该函数的m脚本;

    然后点击Autodefine Input Types按钮,matlab会根据你写的或选的测试代码自动确定出形参的类型,如下图中,我写的测试语句中,形参为3x3矩阵,matlab自动把C语言的形参设置成了3x3的double数组,当然,你也可以把第二个框中的double改成single,也即C语言中的float。第二种方法,直接手工指定形参类型,如下图第2个框所示。

    如果被转的函数中还调用了全局变量,点击下图的add global,把全局变量的名称和类型都填写上。

    点击next

    弹出下图:点击check for issues按钮,matlab会检测一下你写的m函数能否转换成C函数,如果不能,会给出report,告诉你为什么不能转,哪一行代码导致的不能转,把bug修改完之后,点击clear Mex清除刚才的结果(如果正确的话则不会显示这个按钮),再点击check for issues按钮重新检查即可。如果检测没问题,右下角的next按钮就亮了,并闪烁,你可以点击next了。

     

    点击下图的generate按钮,即可生成C函数。在这个界面中,你也可以先选择一下工具链,

     

    转换完之后,如下图所示。连m文件中的注释都带过来了,有意思。

    由上图可见,3X3的double矩阵,转成C语言之后,是按double [9]来存储的。矩阵形式的返回值,是从形参地址输出的。

     

    直接把这个函数拷贝到单片机工程中,如下,把运行的结果从串口打印出来:

    运行结果如下:

    这个结果和直接在matlab中运行的结果一毛一样,说明转换出的求逆函数确实没问题。

    需要注意的是,如果你输入的源矩阵是奇异阵(行列式值为0)或者接近奇异,在mallab中求逆时会出现错误提示,或警告提示,但是转成C之后,这些错误就不会再有提示了。建议把可能会引发bug的地方,直接在m文件中用防护语句都检测好,再转换。如下:

    转出的C函数如下:

    由于在单片机中编程,没有bool类型,也没有true、false定义,我们直接在单片机中定义一个即可:

     

     

     

    展开全文
  • C语言单独对于一个带小数点的数,默认使用四舍五入 但是对于处理除法后的数,相除之后默认取整数。 解决方法:整数/整数=整数 浮点数/整数=浮点数,这样round才会四舍五入
  • MATLAB转C语言(二)

    2019-05-29 18:54:00
    1.怎样确保每一个.m文件都能成一个独立的.c文件? 在MATLAB代码中加入 coder.inline('never'); 2.%#codegen %#codegen 指令(或编译指令)添加到函数中的函数签名之后,以指示您要为 MATLAB® 算法生成代码。...
  • 如果变量类型设置错误,在C时,会出现以下报错: Error using XX_mex (line 0) Incorrect class for expression 'studentHeight': expected 'single' but found 'double'. 或者报这个错: This assignment ...
  • matlab工具将matlab脚本转C语言实现

    万次阅读 2018-09-25 22:27:29
    Matlab 提供了将matlab语句转换成C或者C++语句的工具Matlab coder,但是部分matlab实现的函数是不能转换的,能够转换的函数列表在这个链接中可以找到:... 下面就以matl...
  • Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。例如二维数组Amn (1)行优先...
  • MatlabC语言程序的应用编程接口()[@more@]MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空航天、机械制造和工程建筑等领域发挥着...
  • 目的:比较MatlabC语言在进行不同类型数据混合运算时的差异 以典型情形Double Single混合运算为例 Matlab:Double Single运算,运算结果为Single类型,且是在运算结束后将DoubleSingle换。 C:Double Single运算...
  • 补充一下,我想扩大一下问题,c语言的位操作效率很高吗?上面问题的按位异或我是直接用了matlab的bitxor,matlab其他的位操作我自己试着写了一下,里面包含了不少类型转换,会花不少的时间吧,c其他的位操作也一样快...
  • Fortran和matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维数组存储方式为行优先原则,内循环最好是行循环。下面介绍何为行优先存储,何为列优先存储。 例如二维数组Amn (1)行...
  • ... ...MATLAB 实现代码,本文的 c 实现便是基于 MATLAB 代码。感谢原作者   http://www.codelast.com/?p=29 ,这是大牛对之及其通俗的解释,相信看了能明白个大概。 ...
  • matlab程序转换成C语言

    千次阅读 2015-04-14 17:14:39
    原文地址:matlab程序转换成C语言作者:Qtchen  要将用Matlab语言编写的函数文件编译成可独立执行的*.exe文件(即可脱离Matalab环境的执行程序),首先要安装和配置好Matlab Compiler,一般来说,在安装Matlab时就...
  • matlab脚本,成c代码,使用模块:matlab coder。 https://blog.csdn.net/MikeDai/article/details/82846272
  • m a t l a b 程 序 换 成 C 语 言 要将用 Matlab .exe ( 语言编写的函数文件编译成可独立执行的 文件 即可脱 离 Matalab 环境的执行程序 ) 首先要安装和配置好 MatlabCompiler 一般 来说在安装 Matlab 时就已经...
  • 基于MEX文件的MatlabC语言接口实例

    千次阅读 2015-04-21 07:52:50
    自: 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数: double add(double x, double y) { return x + y; } 现在我想要在Matlab中使用它,比如输入: >>...
  • Matlab数组转换为C语言样式的维度 目的:将Matlab的数组中按列存储的数据以行*列的形式传递给C函数,为什么会有这一问题? 因为Matlab语言中的多维数组存储方式为列优先原则,内循环最好是列循环;而c语言中的多维...
  • MatlabC语言程序的应用编程接口

    千次阅读 2012-01-13 15:34:40
      本文自: http://tech.ccidnet.com/art/1081/20060116/416047_1.html ...MATLAB作为世界顶尖的数学应用软件,以其强大的工程计算、算法研究、工程绘图、应用程序开发、数据分析和动态仿真等功能,在航空
  • clc;  clear all;  close all; %% 使用SVM做识别,测试准确率 ...file_path = 'E:/matlab_0808/0816/people1/';% 图像文件夹路径 img_path_list = dir(strcat(file_path,'*.jpg'));%获取该文件夹中...
  • 使用Matlab生成了滤波器,那么怎么将滤波器代码.m文件转换成C或C++语言呢? 查找了好多资料,找到了两个工具MATLAB Coder 、 Embedded Coder 问题是看了好多资料没有看清楚怎么使用,这里标记一下,到后续解决。 ....
  • Matlab的.m文件转C语言或C++

    千次阅读 2017-06-27 15:36:14
    matlab command window 输入mex -setup,选择编译环境在当前工作文件夹下建立myfun.m,输入coder,新建工程fun.prjtype为mex,C,and C++ code generation,点击OKadd files myfun.m ,定义输入(if exists)变量的...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 184
精华内容 73
关键字:

matlab转c语言

matlab 订阅
c语言 订阅