温柔一刀你进来,俺要还你三刀。(300分)

  • 主题发起人 主题发起人 o*o
  • 开始时间 开始时间
O

o*o

Unregistered / Unconfirmed
GUEST, unregistred user!
接前两天那题。
经过温老师指点,俺以为很简单就把老六打发了:

>在doublennbpxlog.m的最前面加一行:
>function ret=doublennbpxlog()
>最后面加一行:
>ret=0;
>
>然后mcc doublennbpxlog

老六回信:

我刚才是了一下,运行mcc时,发现源文件中有要求输入数据文件或
参数的地方就会出错,例如第6行。是否要把要输入的数据文件和参
数作为函数doublennbpxlog(_)的变量,而把结果文件作为输出变量?

俺实在没辙了,因为Matlab一点儿也不会。
请您再次出手,一刀,只需一刀,把老六结果了吧。

俺将在今晚把doublennbpxlog.m这个文件发到你的信箱
tender-edge@21cn.com,请温老师一定帮忙。
看看如何将这个特定的Script变成Function.
 
555,温老实还会MATLAB呀!?
 
这个同学是哪班的?怎么可以这样说老师! :-)
 
怎么不肯接俺这三刀?
 
信已经收到,文件也看了,可让俺说什么呢?
俺早已经说过,写f-file的根本目的在于扩展
matlab的(计算)功能,编译的目的则在于
提高诸如循环之类运算的速度。

你那种换汤不换药的“转换”方式,只是生成了一个
可以称作"function file"的文件,运行起来实际上
还是script。
mcc可编译的文件是有严格限制的,与matlab环境
紧密相关的语句是无法通过的。

There are some limitations and restrictions on the kinds of MATLAB code that mcc can work with. mcc cannot compile:

- functions containing the commands "eval, input, load";
- functions using the explicit variable "ans";
- functions that create or access sparse matrices;
- functions using variables whose names end with an underscore.

因此,现在还是回到我前面问过的问题,为什么要编译?
如果是运行速度慢,那么把慢的那一部分做成function,
看看是否可以编译,如果不行,想别的办法来优化吧。

比如说你发来的那个文件,已经都是一些函数调用了,
没看出来那些地方还可以提高速度的。请你问问老六,
到底什么地方不爽,搞得一天茶不思饭不想一条胡同走到黑不撞南墙不回头的就要编译成mex?
 
老六这个农民可气死俺了,因为您这一刀还没把他砍死。

他还想知道.m怎样编译成C的EXE。(step by step)

哎,作农民就够难的了,而作个玩电脑的农民难上加难。

分先给老师加上了。
 
mcc -e 就是产生可编译成为EXE的C代码:

Building a stand-alone executable application

After invoking MATLAB enter:

>>mcc -e myfun.m

With the option -e, mcc translates an M-file to a C-file that may be linked with the MATLAB Math Library and executed
outside of the MATLAB environment. It does not produce a MEX-file. To prepare a stand-alone code you need an M-file
called "main" which calls your function. Here is an example of how the M-file main should look:

function main
r =myfun(100000);
r

This M-file should also be compiled with the -e option as follows:

>>mcc -e main.m

After having generated the C source files exit Matlab. To prepare the stand-alone executable file enter:

mccbuild -o myfun.ex main.c myfun.c

where the option -o defines the name of the executable file.

The restrictions described above apply also to the stand-alone external application. In addition, external applications cannot
access:

- MATLAB debugging function, such as dbclear;
- MATLAB grapics functions, such as surf, plot, get and set;
- MATLAB save function;
- SIMULINK functions.

这里说的“The restrictions described above”就是上面一个帖子
的那四条限制,一共8种限制。
因此想编成EXE,几乎什么功能都不能用了,老六还想这么做吗?

老兄,咱这可是Delphi论坛,别人看了我们的帖子,好说是不务正业,
狠一点还不说咱们串谋发财?
(在您老的帮助下我都提前进入了本月排行前十名了)
 
"六叔"最近没有什么新想法了? :-)
 
没呢,在玉米地里蹲着那. :-)
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部