博客成了单机版,基本上没有人看了。我就当给自己写总结吧。
把最近在做的事情简单记一个流水账吧。
最近在网易上mooc,学习python程序设计和高等数学。
python的教程其实看过两遍了,只是工作中一直用不到,所以学了就忘记了,这次学习主要是为了混个mooc的证书,呵呵 。
学习高等数学其实是为了提高一下自己的数学思维能力 ,然后希望在学习的过程中,可以结合自己的工作,能够从中有所收获或者启发 。
在学习高等数学的过程中,发现我现在基本上不用笔写字了,打算推导一下公式,发现找不到笔和纸了。
在这个过程找发现,发现一个数学软件Maxima,比较简单实用,可以用来做一些简单和常用的微积分计算。
最近还在看matlab coder这个模块的功能。
这个模块可以把*.m文件转换为C代码。不过从举的例子来看,一般是把某个写好的函数转换为C代码。转换过程一般为,首先转换为mex格式的,看看转换过程中是否有错误,然后运行转换之后的mex,看看是否有运行时错误。转换过程和运行都没有问题之后,就正式开始转。
以一个简单的函数为例子:
函数如下:
-
function y = hello(x)
-
y = sin(x);
-
end
对这个函数进行转换时,需要指定 输入参数的数据类型。可以通过定义一个实例,通过这个实例的类型来指定。例如,可以定义如下变量:
x = pi/2
然后通过如下命令来程序mex文件:
codegen hello -args {x}
生成成功之后,在文件夹当中会生成hello_mex.mexw32。这个就是mex文件。可以在matlab当中调用,来进行测试。例如:
y = hello_mex(x)
y =
1
然后可以通过下面的命令来生成源代码 。
codegen -config coder.config('lib') hello -args {x}
生成的代码在codegen/lib/hello目录当中。里面有很多文件,但是我们需要的函数在hello.c和hello.h目录当中。代码如下:
-
/*
-
* File: hello.c
-
*
-
* MATLAB Coder version : 2.6
-
* C/C++ source code generated on : 28-Jul-2014 23:30:59
-
*/
-
-
/* Include files */
-
#include "rt_nonfinite.h"
-
#include "hello.h"
-
-
/* Function Definitions */
-
-
/*
-
* Arguments : double x
-
* Return Type : double
-
*/
-
double hello(double x)
-
{
-
return sin(x);
-
}
-
-
/*
-
* File trailer for hello.c
-
*
-
* [EOF]
-
*/
-
/*
-
* File: hello.h
-
*
-
* MATLAB Coder version : 2.6
-
* C/C++ source code generated on : 28-Jul-2014 23:30:59
-
*/
-
-
#ifndef __HELLO_H__
-
#define __HELLO_H__
-
-
/* Include files */
-
#include <math.h>
-
#include <stddef.h>
-
#include <stdlib.h>
-
#include "rtwtypes.h"
-
#include "hello_types.h"
-
-
/* Function Declarations */
-
extern double hello(double x);
-
-
#endif
-
-
/*
-
* File trailer for hello.h
-
*
-
* [EOF]
-
*/
如果修改传入参数的实例类型,则会生成不同的代码。例如,把输入的x修改为一组数据。
x = 0:pi/1024:pi;
codegen -config coder.config('lib') hello -args {x}
则生成的代码如下:
-
/*
-
* File: hello.c
-
*
-
* MATLAB Coder version : 2.6
-
* C/C++ source code generated on : 28-Jul-2014 23:35:15
-
*/
-
-
/* Include files */
-
#include "rt_nonfinite.h"
-
#include "hello.h"
-
-
/* Function Definitions */
-
-
/*
-
* Arguments : const double x[1025]
-
* double y[1025]
-
* Return Type : void
-
*/
-
void hello(const double x[1025], double y[1025])
-
{
-
int i0;
-
for (i0 = 0; i0 < 1025; i0++) {
-
y[i0] = sin(x[i0]);
-
}
-
}
-
-
/*
-
* File trailer for hello.c
-
*
-
* [EOF]
-
*/
-
/*
-
* File: hello.h
-
*
-
* MATLAB Coder version : 2.6
-
* C/C++ source code generated on : 28-Jul-2014 23:35:15
-
*/
-
-
#ifndef __HELLO_H__
-
#define __HELLO_H__
-
-
/* Include files */
-
#include <math.h>
-
#include <stddef.h>
-
#include <stdlib.h>
-
#include "rtwtypes.h"
-
#include "hello_types.h"
-
-
/* Function Declarations */
-
extern void hello(const double x[1025], double y[1025]);
-
-
#endif
-
-
/*
-
* File trailer for hello.h
-
*
-
* [EOF]
-
*/
后续会多进行一些实践,掌握好这个工具。
阅读(2456) | 评论(0) | 转发(0) |