以神经网络使用为例的Matlab和Android混合编程
- 首先你要在Matlab中写一个完整的神经网络
- 获取样本
- 样本导入
- 神经网络建模
- 神经网络训练
- 神经网络测试(优化建模)
- 然后你要在Matlab中重写一个神经网络,第二个神经网络的特殊之处是
- 首先这个神经网络必须写成函数,具体有几个细节
- 把第一个神经网络的训练结果net网络保存成mat文件
- 把相关需要用的但无法直接写入代码的数据也保存成mat文件(比如数据归一化的参数)
- 然后在函数中把上面几个mat文件导入,基本上就是一个完整的神经网络模型了
- 再加上一个神经网络计算语句,并把结果返回,这个函数就完成了
- 然后把这个Matlab神经网络函数进行打包,打包的结果是一个jar包
- 然后把这个jar包连同另一个jar包一块导入Andorid工程,并添加为外部依赖
- 最后在Android工程中写一个专门调用这个jar包接口代码的函数,传入输入变量,返回计算结果
- ()
- 你在txt中按这种格式保存数据:每行用回车隔开,每列用空格隔开
- 然后你在matlab中load这个文件,就能得到一个数据的矩阵了
alldata = load('alldata.txt');
alldata = alldata(:,:);
|
- (把经典书目《MATLAB神经网络30个案例分析》的源码包放到工作路径再进行阅读修改)
- 输出数据需要进行一下矩阵转换
- 使用newff工具函数来构建神经网络,使用matlab内部的工具箱(其实就是库函数)来建模、训练和计算,不需要自己写逻辑代码
- 中间各种矩阵的变换感觉不是很习惯,可以参看一下工作空间里的变量状态,或者一步步打印一些变量的结果来看
clc;
clear;
%导入300组数据
alldata = load('alldata.txt');
alldata = alldata(:,:);
%输入输出数据
input = alldata(:,2:33);
outputtemp = alldata(:,1);
%输出数据需要处理一下
output = zeros(300,2);%预先分配内存
for i=1:300
switch outputtemp(i)
case 0
output(i,:) = [1 0];%意思是如果数据结果是0,则输出层的状态是[1 0],或者用第一个输出节点表示
case 1 %能直接识别带小数位的数据
output(i,:) = [0 1];
end
end
%从中随机抽取280组数据作为训练数据,20组数据作为预测数据
k = rand(1,300);
[m,n] = sort(k);
input_train = input(n(1:280),:)';
output_train = output(n(1:280),:)';
input_test = input(n(281:300),:)';
output_test = output(n(281:300),:)';
%输入输出数据进行归一化处理
[inputn,inputps] = mapminmax(input_train);
[outputn,outputps] = mapminmax(output_train);
%网络结构构建32-6-2
net=newff(inputn,outputn,6);
%网络参数配置(迭代次数,学习率,目标)
net.trainParam.epochs=100;
net.trainParam.lr=0.1;
net.trainParam.goal=0.0004;
%网络训练
net=train(net,inputn,outputn);
%BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
%结果分析
figure(1)
plot(BPoutput,':og')
hold on
plot(output_test,'-*');
legend('预测输出','期望输出')
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;
figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)
figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')
errorsum = sum(abs(error))
|
- 在工作空间中右键新建函数,重命名后打开,就是这样
- matlab中的函数在这里一起趁热讲了(自己复习一遍)
- 整个函数有一头一尾两句固定的声明,头是以function开始,然后是:返回值 = 函数名(函数参数),尾是end,虽然一开始看得不适应,但是习惯还是很好理解的,跟其他的语言差不多
- 返回值可以没有,那就是直接 函数名(函数参数)
- 返回值可以有多个,参数也可以有多个,他们的形式是这样:function [x,y,z]=sphere(theta,phi,rho)
- 注意Matlab中不会对函数类型进行声明,所以很多时候你在写函数的时候一开始就要对输入参数进行一个检查
- 然后下面接着是官方注释,第一句是摘要,之后是详细说明,这些东西会在预览的时候显示
- 接下来就是函数体了,你可以做各种事情,逻辑语句、调用其他函数
- 最后在end之前你需要定义返回值,matlab在这块有点特殊,你不用显示地指定return哪个变量,因为你第一句声明里有返回值变量,所以只要你的函数内容中有这个变量,那么最后执行到end的时候就会自动返回这个变量这时候的状态
- -----调用函数------
- 调用函数的形式跟函数声明的第一句是一毛一样的:[输出参数表]=函数名(输入参数表)
- 调用函数时,输入和输出参数的顺序应与函数定义时的一致,数目一定不能多于函数定于中的,可能可以少于
- 为什么可以少于,因为在函数内部可以通过nargin()和nargout()获取函数被调用时用户指定的输入、输出参数个数。所以如果这个函数里边有针对不同的少于输入少于输出的情况进行if else的话,就可以自动适应
- 整个函数有一头一尾两句固定的声明,头是以function开始,然后是:返回值 = 函数名(函数参数),尾是end,虽然一开始看得不适应,但是习惯还是很好理解的,跟其他的语言差不多
- 那么在这里,我的输出是一个int,输入是一个行矩阵,或者说一个数组,我的函数开头就这么写了:
function output = annforecastthi(input_test)
- 把先前神经网络中训练好的net保存成mat文件 非常简单。直接在运算结束后再工作空间中右键net变量,保存为mat文件就可以了
- 然后导入的时候稍微有点麻烦
- 其实load mat文件有两种方式,一种是命令行方式,一种是函数方式。两种方式功能上没什么区别,但是推荐在函数里用函数方式
- 以导入一个结构体(归一化参数)为例:
- 命令行方式 :load anninputps inputps;
- 函数方式:
- 而导入net数据的时候还要麻烦一些:
- 命令行方式:load annnet net;
- 函数方式:(后边还要加一句把结构体转型成网络格式)
- 这里需要导入三个mat文件,一个net和两个归一化参数(后边要用来反归一化)
MATLAB官方论坛中看到这样一个回答:
You will not be able to compile any function which trains the network (like ADAPT). Though the link does not explicitly list these funcions (like ADAPT), they fall under the 'All other command line functionality'.
However, you can deploy a M function code which uses a pre-trained network. I believe the SIM function will deploy fine.
The workflow I see is:
1. In MATLAB, train you network using test input/output
2. Save the network (mat file?)
3. Create a deployable function which then uses the pretrained network for new data. The network itself would not change/adapt/train in this function
4. Compile and deploy the above function
大意:MATLAB compile不支持对神经网络工具箱中涉及到训练的函数命令进行编译,只能编译那些用在已训练好的网络上的函数命令
|
function output = annforecastthi(input_test)
%ANNFORECAST
% 输入长度为32的行矩阵,输出为1或2
A = load('annnet.mat');
B = fieldnames(A);
net = A.(B{1});
net = network(net);
C = load('anninputps.mat');
D = fieldnames(C);
inputps = C.(D{1});
E = load('annoutputps.mat');
F = fieldnames(E);
outputps = E.(F{1});
%BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test',inputps);
%网络预测输出
an=sim(net,inputn_test);
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);
%结果分析
%根据网络输出找出数据属于哪类
output=find(BPoutput(:,1)==max(BPoutput(:,1)));
end
|
- 安装java开发环境是很简单的事情,正常的步骤是这样
- 去甲骨文的官网下最新的jdk文件
- 选择windows64位的下载
- 不要选jre,区别是jre只能用来运行,不能用来编译,它也比jdk要小很多
- 这个网站下东西可能很慢,这个时候可以自行搜索一些网盘里提供的
- 点击这个jdk.exe文件进行安装,安装过程没什么好说的
- 安装完好像说现在的jdk不配置环境变量也没关系,但以前的要配置环境变量,那就配置吧,这个会单独在后边写
- 去甲骨文的官网下最新的jdk文件
- 然后我其实是之前就有安装的,但是在后边生成Jar包的时候出现了问题
- 经过排查,发现是jdk的版本相对matlab版本太高了:目前我的这个matlab2015b对应的是jdk7,所以我现在jdk8都不可以。(参考:matlab 2014a 用jdk1.7;matlab 2013a 用jdk1.6)
- 于是就只能降低jdk版本了,如何降低呢,其实很简单,你的系统中是可以同时安装多个jdk版本的不会冲突,最后你希望编译的时候用哪个版本,就在环境变量里配置哪个版本,非常方便
- 但是下载的时候也会遇到个问题,因为官网找不到旧版本的下载,我就是搜索了一个然后安装,安装完修改了一下环境变量,最后ok了
- 配置JAVA环境变量
- 具体的做法是:
- 我的电脑——属性——高级设置——高级——环境变量
- 在系统变量里添加一个键值对:JAVA_HOME(大小写不敏感),和jdk安装后的位置路径(为javac.exe所在目录D:\Program Files\Java\jdk1.6.0_13\bin的上一层)
- 配置完之后这样可以验证
- 另外说一点是,即使配置了这个java path,但Eclipse和AS中还有独立的配置:
Eclipse:Window -> Preferences->Java -> Compiler 设置 "Compiler compliance level" 为 1.6 (相应版本)
AS:点击File,选择Other Settings,选择Default Project ,Structure...
- 配置path
- 也是在系统变量里添加
- 变量名是path,值是【.;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;D:\Program Files\MATLAB\R2015b\bin】
- 现在我其实是这样的,居然也可以,不是很懂 【%Java_Home%\bin;%Java_Home%\jre\bin;C:\ProgramData\Oracle\Java\javapath;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Calibre2\;C:\Program Files\MATLAB\R2015b\runtime\win64;C:\Program Files\MATLAB\R2015b\bin;C:\Program Files\MATLAB\R2015b\polyspace\bin;C:\Program Files\MATLAB\MATLAB Runtime\v90\runtime\win64】
- 配置CLASSPATH
- 也是在系统变量里添加
- 变量名是path,值是【.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar;D:\Program Files\MATLAB\R2015b\toolbox\javabuilder\jar\javabuilder.jar;%JAVAHOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar】
- 现在我其实是这样的,居然也可以,不是很懂【.;%Java_Home%\bin;%Java_Home%\lib\dt.jar;%Java_Home%\lib\tools.jar】
- 在命令行区域输入命令:deploytool,弹出对话框,然后你选择第三个library compiler
- 于是打开了一个大界面,在这个界面里要做五件事
- 1这选择java
- 2这点击添加你的这个m函数(2旁边这个框保持原样,不用打钩)
- 3这块一般都会改一你觉得适合的名字
- 关键4这一定要把你m函数中load的数据文件一块加进来
- 点击开始打包
- 打包需要一点时间,结束后如果成功就会在工作空间路径下生成一个项目,项目中能找到输出Jar文件,这个就是我们的要的
- 除了刚才生成的这个Jar包之外,还需要导入另一个Jar包,这个jar包就是MATLAB中带的jarbuild.jar 这个包,一般路径是E:\Program Files\MATLAB\R2013a\toolbox\javabuilder\jar (MATLAB解析jar包文件)
- 用AS往Android工程导入JAR包的步骤是这样的
- 将jar文件复制、粘贴到app的libs目录(app—src—main—libs)中(此时虽然jar已经复制黏贴过来了,但是还未导入,所以看不到jar中包含的内容。而已导入的jar,则可以看到jar中内容)
- 右键点击jar文件,并点击弹出菜单中的“Add As Library”,将jar文件作为类库添加到项目中
- 删除jar包 的步骤
- 选中项目
- 点击 File——>Project structure——>module——>app
- 选择 “dependencies”,选择你要删除的jar包,点击减号
- 用Eclipse往JAVA工程导入JAR包的步骤是这样的
- 在java工程下新建一个lib文件夹(不新建也行,只是为了规范),直接把jar包拖入这个文件夹
- 右键,添加依赖
- 导入结束后,你能看到其实是这样的
- 所以你写接口的话非常简单
- 先new一个这个类,然后调用类的这个方法,输入输出
- 直接结束
- (参数和返回值的数据类型什么的,matlab 的帮助文档matlab builer for JA中说得很详细)
- 必须catch一下MWException,这个是matlab里边的
- 输入:
- 你的matlab函数是这样写的:output = annforecastthi(input_test)
- 你的函数里是把输入当成一个大小为32的行矩阵来用的,所以正常想在这应该是输入一个数组
- 但是根据代码提示,你会发现不完全是这样,而是:第一个参数是输出数据个数,之后是一个个的输入数据,输入数据可以直接是一个数组
- 输出:
- 同样,我在matlab函数里写的输入是一个int值,为1或者2
- 但是在这里,你的输出是一个Object[ ],如果输出只有一个的话,那就是result[0]
- 另外如果result[0]返回的是一个数组,可以通过如下的方法解析(供参考)
- MWNumericArray a = new MWNumericArray(Double.valueOf(result[0].toString()),MWClassID.DOUBLE);
- MWNumericArray temp = (MWNumericArray)result[0];
- float [][] weights=(float[][])temp.toFloatArray();
public class TestMatlab {
public static void main(String[] args){ try { ANNMatlab annMatlab = new ANNMatlab();
double[] array = {74.5,75.5 ,83.3 ,93.4 ,93.9 ,90.1 ,86.1 ,... };
Object result[]=annMatlab.annforecastthi( ,array);
//函数第一个参数是输出数据个数,之后的就是是输入数据。
]);
} catch (MWException e) { e.printStackTrace(); } }
}
|
- so文件和dll文件都是动态链接库(说白了就是一些库函数),dll文件是windows系统中使用的,而so文件是Linux系统中使用的
- 而这个libmwmclmcrrt.so.9.0大概是matlab代码需要的,但是为什么需要呢?不应该搞定之后都会有吗?
- 搜索引擎上一些缺少.so文件的问题发生在Linux系统下,然后他们的解决办法都是一个,重新配置环境变量,因为好像在linux上配置这个环境变量很容易出问题(https://www.baidu.com/s?ie=UTF-8&wd=libmwmclmcrrt.so.9.0)(http://blog.csdn.net/chujiangke001/article/details/17427659)(http://www.linuxidc.com/Linux/2013-03/80301.htm)(http://www.aiuxian.com/article/p-2193879.html)(http://blog.csdn.net/xcmax/article/details/27523419)(http://www.aiuxian.com/article/p-2193879.html)
- 搜索引擎上还有缺少dll文件的,一部分是环境变量的配置问题,一部分是需要手动安装某个800多M的文件(如果你要在没有安装matlab的机器上用java调用这些jar包,怎么办?也是可以的,不过,不过你要先在机器上安装matlab提供的MATLAB Compiler Runtime (MCR) ,它的安装文件在D:\program files\study\MATLAB\R2007b\toolbox\compiler\deploy\win32下(你的安装目录下)文件名MCRInstaller.exe)(http://www.cnblogs.com/ellisonDon/archive/2012/10/30/2746457.html)(http://jingyan.baidu.com/article/ab0b5630b801ddc15afa7df1.html)
- 但这里因为在java项目中能成功运行,在android中不行,所以自然会想到是android系统的环境变量配置问题或者说就是跟android系统有关
The .jar files that Compiler SDK generates cannot be run on Android. The .jar has a small interface to call upon the machine code library that is MCR, and otherwise the .jar contains encrypted data files. The encrypted data files are the "compiled" .m code, which is not compiled to java, but rather to MATLAB's internal threaded interpreter. MCR decrypts the encrypted pcode'd .m files and uses them as data to be processed by the threaded interpreter. The encrypted data files themselves can be fairly operating system independent, but you need MCR to interpret them, and MCR is in x86 or x64 machine code for all versions of MATLAB since about R2009a. Android does not run on x86 or x64: Android runs on ARM processors (or possibly PowerPC as well, I am not certain.)
In short, you cannot use Compiler SDK to generate for anything useful on Android.
At this time, the only way to deploy for Android is to use Simulink with Target set to Android. You can have your Simulink blocks call a MATLAB Function block which is specialized MATLAB code (that has to be careful about how it allocates memory.) There is not much graphics you can do with this mechanism but it is the best that is available at this time.
I happened to look last night at some of the blocks available for deployment to a couple of the Android Galaxy devices. There is a block which accepts R, G, and B signals and displays the result as the screen. It would require computing the entire screen, I suspect. Some of the routines in the Vision toolbox help in that.
大意:matlab生成的jar包不能直接在android上运行,还需要用一个叫MCR的东西进行解码(The MATLAB Compiler Runtime (MCR) has the same System requirements as MATLAB. See System Requirements - Android is not one of them.它是matlab代码解析器),而MCR目前只能运行在X86或者X64的CPU上,但因为android是运行在ARM CPU上,所以是不可能使用的。
然后它说:此时,部署Android的唯一方法是使用Simulink与目标设定为Android。你可以有你的Simulink模块调用MATLAB函数的MATLAB代码块是专业(需注意如何分配内存)没有多大的图形可以做这种机制,但它是最好的,此时可用。
后边这个就看不懂了:我碰巧看的最后一个晚上的一些块可供部署到一对夫妇的安卓银河设备。有一个块,它接受R,G和B信号,并显示屏幕的结果。它将需要计算整个屏幕,我怀疑。一些例程中的“视觉工具箱”中的帮助。
I have not read about what can be done in R2016a. The situation as of R2015b was that in order to generate code for Android from MATLAB, what you needed to do was include the MATLAB code in a MATLAB Function block in Simulink and tell Simulink to target Android; there was no direct path for MATLAB to Android.
大意:你需要做的是包括在Simulink MATLAB功能块的matlab代码告诉Simulink目标Android
However, you should be able to use the MATLAB Coder product to generate a standalone C/C++ library from your MATLAB code and then invoke that from your Android application, possibly using JNI.
大意:你可以使用一个叫MATLAB Coder的工具来生成可以独立运行的C/C++库,他们可以在android中通过JNI来直接运行
MATLAB code that is put into a Simulink MATLAB Function Block (with appropriate adjustments made) can be generated for Android target using Simulink. There are a bunch of restrictions on this, but I think it can access the Android Sensor information for supported devices (Galaxy S4, Galaxy Note 2)
大意:matlab代码,把MATLAB的一个Simulink功能块(适当调整)可以为Android使用Simulink生成目标。有一些限制,但我认为它可以访问支持的设备Android传感器信息(Galaxy S4,Galaxy Note 2)
From MATLAB, you can communicate with Android camera and with Android sensors (at least for some models), but it is not possible to generate code for Android. You need to use Simulink to generate code for Android.
MATLAB Coder does not know about Android, so MATLAB Coder cannot generate Android calls for user interaction, networking, graphics, and so on. MATLAB Coder can generally generate C or C++, but unless it has been given information about the target system, MATLAB Coder has a library of calls that is not even as complete as the Standard C Library. This is not enough to create an Android "app"; at most it is enough to create a utility program.
Simulink does know how to target Android, so if you have a Simulink model and use the Android-specific blocks, Simulink can create apps. See http://www.mathworks.com/hardware-support/android-programming-simulink.html
大意:可以用Simulink
.so files are Linux Shared Object libraries. Those .so files are only available for Intel x86 (32 bit) and x64 (64 bit) instruction set (including AMD CPUs that implement those.) They are not available for ARM or other instruction architectures.
大意:.so文件本身也只能再X86的系统上使用,而不能在ARM上使用(这个存疑)
The .jar file requires the MATLAB Compiler Runtime (a freely redistributable component that you get with MATLAB Compiler and MATLAB Builder products) to be present. The MCR has a much larger footprint than is suitable for the typical Android device (it's like a copy of MATLAB itself, without the user interface).
You could think about either
1)Running your MATLAB .jar file remotely on a server, and having your Android application connect to it, or
2)Instead of using MATLAB Compiler and Builder products, use MATLAB Coder, which will convert a subset of the MATLAB language directly into C code. This C code doesn't require the MCR, and could be compiled to run directly on Android. Make sure your MATLAB algorithm falls within, or can be expressed in, the appropriate subset of the MATLAB language.
大意:前面都一样不说了,后边提了两个解决办法:1)不要再app上用Matlab代码,转移到服务器上;2)用MATLAB Coder编译成可以不需要MCR支持才能运行的C/C++文件
A new feature in Matlab 2014a:
http://www.mathworks.com/help/simulink/samsung-galaxy-android-devices.html
You can now directly install (limited set of) models to Samsung Android devices, and this should work actually on any Android device.
大意:2014的新版本中,你可以直接把matlab模型安装在三星安卓设备上,实际上就可以安装在所有安卓设备上
|
- 直接在android app上使用deploytool生成的jar包是不行的,因为它不能独立运行,还需要MCR的支持,而由于CPU的原因MCR是不能运行在android环境的
- 那么其他可行的间接办法有这些
- 不要在app上用Matlab代码,转移到服务器上
- 用MATLAB Coder编译成可以不需要MCR支持才能运行的C/C++文件,然后使用JNI的方法在android app上使用
- 可以通过一种【include the MATLAB code in a MATLAB Function block in Simulink and tell Simulink to target Android】的方法来做
- 首先我没有找到step by step的教程,所以只能一个个自己去搜索
- 于是先去看了matlab的simulate系统,两个感受:
- 功能非常丰富繁杂
- 找不到所谓的跟搞一个android虚拟机有关的东西
- 这个中文入门教程还可以:http://wenku.baidu.com/link?url=40Z4TdIwCDm35TsAmk8NgVwL1UtJzYoVhe8dwKs87kytiIUx25kIgU18zJcV65UTH7kgHyh0Cfq-pGgDjdrXeSE5j3f_B1vmwG284hTiyQG
- 然后我看了下这个什么三星虚拟机,发现:这个东西好像只是跟什么传感器有关,可以在matlab中获取三星手机传感器的数据,跟我现在的需求没有关系
- http://cn.mathworks.com/examples/simulink/mw/android_product-androidusageexample-working-with-samsung-galaxy-android-devices-block-library?s_tid=srchtitle
- https://www.baidu.com/s?wd=matlab%20android&pn=30&oq=matlab%20android&ie=utf-8&rsv_pq=c9a5520000070f35&rsv_t=9669WDl4Z8FRLpkV6StuMtaAWluCKlVLBmZBF1KUbEB63kqnQiyTeEhD7jo&rsv_page=1
- 最后时间关系没有继续探索下去
以神经网络使用为例的Matlab和Android混合编程的更多相关文章
- Matlab与.NET混合编程解决人脸识别问题
原文:[原创]Matlab与.NET混合编程解决人脸识别问题 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ht ...
- matlab和c++混合编程---matlab和vs的环境配置问题及方法和步骤(转载)
matlab和c++混合编程---方法和步骤 matlab和c++混合编程---matlab和vs的环境配置问题 摘要:Matlab具有很强的数值计算和分析等能力,而C/C++是目前最为流行的高级程序 ...
- Matlab与C++混合编程 1--在C++中调用自己写的matlab函数
在Visual Studio中使用C++中调用MATLAB程序 在matlab中可以通过mbuild工具将.m文件编译成dll文件供外部的C++程序调用,这样就可以实现matlab和C++混合编程的目 ...
- 【目录】Matlab和C#混合编程文章目录
本博客所有文章分类的总目录链接:[总目录]本博客博文总目录-实时更新 1.Matlab和C#混合编程文章目录 9.接触Matlab10年后的一个总结,随时使用Matlab要掌握的一些要点 8.国内第一 ...
- 算法库:Matlab与C++混合编程
算法库:Matlab与C++混合编程 最近做光流算法预演过程中,下载的源码中涉及到了Matlab和C++的混合编程.在同事Matlab2014的环境下,程序到是一下就运行通过了.但在我这Matlab2 ...
- Matlab与C++混合编程(依赖OpenCV)
Matlab与C++混合编程实际上就是通过Matlab的Mex工具将C++的代码编译成Matlab支持调用的可执行文件和函数接口.这样一方面可以在Matlab中利用已经编写好的函数,尽管这个函数是用C ...
- matlab与vs混合编程/matlab移植
前言 项目算法中包含了不同编译工具的代码,分别是matlab和VS,需要将二者结合起来,统一在同一个系统工作,此时就要用到matlab和vs混合编程. 在matlab中将.m文件编译生成库文件等供外部 ...
- [转] Matlab与C++混合编程(依赖OpenCV)
作者 zouxy09@qq.com,原文 Matlab与C++混合编程(依赖OpenCV) 之前在运行别人论文的代码的时候,经常有遇到Matlab与C++混合编程的影子.实际上就是通过Matlab的M ...
- [转] Matlab与C++混合编程,添加OpenCV库
原文地址 峰回璐转 最近在做运动医学软件优化工作,此款软件框架及算法语言全由matlab实现,虽然matlab矩阵运算.数值计算能力强大,但速度让人难以忍 受.软件立刻移植到C++上又不太实际,故采用 ...
随机推荐
- CentOS6.5下安装Open vSwitch
准备 # yum install openssl-devel redhat-rpm-config kernel-devel -y #yum install kvm libvirt python-vir ...
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...
- 【linux】修改文件所属用户和组
使用chown命令可以修改文件或目录所属的用户: 命令:chown 用户 目录或文件名 例如:chown qq /home/qq (把home目录下的qq目录的拥有者改为qq用户) 使用chgrp命 ...
- Apache shiro
Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权. 学习博客:http://jinnianshilongnian.iteye.com/blog/2018398
- Centos 6.5 下安装socket5代理
---恢复内容开始--- 1. 安装 先安装依赖库 yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sa ...
- 修改windows系統下xampp中apache端口被其他程式占用的問題
windows 7安裝後啟動xampp, 提示port 443 被其他程式占用. 網上查找解決方案: http://stackoverflow.com/questions/21182512/how-t ...
- dll return a string
char g_szText[1024]; __declspec(dllexport) const char * __stdcall FuncName(const unsigned char *p) { ...
- android自定义RadioGroup实现可以添加多种布局
android自带的RadioGroup是继承自LinearLayout,如果布局的时候不是直接写radiobutton,即radiobutton外面还包了一层容器,这时分组是不成功的,因为查找不到r ...
- 解决play-1.4.0在linux或mac下提示No such file or directory的问题
问题原因:"play"脚本中有特殊符号. 解决方案:写脚本去掉即可. 代码:fixplay.py 放在play-1.4.0目录下执行.亲测在osx与ubuntu下均可用. with ...
- 让IE8支持HTML5及canvas功能!
微软出的IE9支持HTML5,但因为不支持XP系统,暂时我还用不了. 即使能用,现阶段如果开发HTML5页面,并考虑到兼容性问题的话,恐怕也得让自己的界面支持IE6-8吧. 首先,需要让IE支持HTM ...