- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我为 MATLAB 开发了一个 MEX 文件,我在 ode45
求解器中使用它。
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
//enable floating point exception
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
size_t mrows,ncols;
/* Check for proper number of arguments. */
if(nrhs!=4) {
mexErrMsgIdAndTxt( "HYPRO:invalidNumInputs",
"4 input required.");
}
if(nlhs>2) {
mexErrMsgIdAndTxt( "HYPRO:invalidNumOutputs",
"Too many output arguments");
}
/* The input must be a noncomplex scalar double.*/
for(int i=0;i<nrhs;i++){
mrows = mxGetM(prhs[i]);
ncols = mxGetN(prhs[i]);
if( !mxIsDouble(prhs[i]) || mxIsComplex(prhs[i]) ||
!(mrows==1 && ncols==1) ) {
mexErrMsgIdAndTxt( "HYPRO:inputNotRealScalarDouble",
"Input must be a noncomplex scalar double.");
}
}
/* Create matrix for the return argument. */
plhs[0] = mxCreateDoubleMatrix((mwSize)mrows, (mwSize)ncols, mxREAL);
/* Assign pointers to each input and output. */
const double t = *mxGetPr(prhs[0]);
const double p = *mxGetPr(prhs[1]);
const double T = *mxGetPr(prhs[2]);
const double U = *mxGetPr(prhs[3]);
double& Thrust1 = *mxGetPr(plhs[0]);
Thrust1 = 9000;
double Thrust;
Foam::List<double> Mfr;
try{
MyFunction(t,p,T,U,Thrust,Mfr);
}catch (std::exception& e){
mexErrMsgIdAndTxt( "HYPRO:error", e.what());
}
plhs[1] = mxCreateDoubleMatrix((mwSize)mrows, Mfr.size(), mxREAL);
double* point = mxGetPr(plhs[1]);
for (mwSize i = 0; i < Mfr.size(); i++) {
point[i] = 40; //Mfr[i];
}
}
如您在上面的代码中所见,我将 MEX 文件的输出与 MyFunction
的输出分离,以排除其中的任何问题,但行为如下。
MEX 文件在从 MATLAB 手动调用时以及在非常简单的 for 循环中运行良好。但是,当我通过一个函数调用 ode45
求解器时,该函数又调用此 MEX 文件,我收到以下错误。
有趣的是,ode45
第一次调用 MEX 文件时不会发生错误,但会在第二次发生。
在 gdb 中调试时会产生相同的行为,但是没有可用的调试信息,因为 MATLAB 解释器的源代码不可用。
我的 Matlab 版本是 R2013a(8.1.0.604) 64-Bit(glnxa64)
------------------------------------------------------------------------
Floating point exception detected at Mon Sep 8 12:14:25 2014
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Current Visual : 0x21 (class 4, depth 24)
Default Encoding : UTF-8
GNU C Library : 2.19 stable
MATLAB Architecture: glnxa64
MATLAB Root : /usr/local/MATLAB/R2013a
MATLAB Version : 8.1.0.604 (R2013a)
Operating System : Linux 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64
Processor ID : x86 Family 6 Model 30 Stepping 5, GenuineIntel
Virtual Machine : Java 1.6.0_17-b04 with Sun Microsystems Inc. Java HotSpot(TM) 64-Bit Server VM mixed mode
Window System : The X.Org Foundation (11501000), display :0
Fault Count: 1
Abnormal termination:
Floating point exception
Register State (from fault):
RAX = 0000000000000001 RBX = 00007fb110dda810
RCX = 0000000000000000 RDX = 00007fb072653d70
RSP = 00007fb110dda6c0 RBP = 00007fb110dda700
RSI = 0000000000000001 RDI = 00007fb110dda810
R8 = 0000000000000064 R9 = 0000000000000064
R10 = 0000000000200000 R11 = 0000000000400000
R12 = 0000000000000001 R13 = 00007fb072653d70
R14 = 0000000000000000 R15 = 0000000000004000
RIP = 00007fb123efeb2c EFL = 0000000000010246
CS = 0033 FS = 0000 GS = 0000
Stack Trace (from fault):
[ 0] 0x00007fb123efeb2c /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04434732
[ 1] 0x00007fb123efe875 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04434037
[ 2] 0x00007fb123f02645 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04449861
[ 3] 0x00007fb123eecfd7 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04362199
[ 4] 0x00007fb123eed950 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04364624
[ 5] 0x00007fb123f347ec /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04655084
[ 6] 0x00007fb123ef132f /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+04379439
[ 7] 0x00007fb123e7e204 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+03908100
[ 8] 0x00007fb123e80b76 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+03918710
[ 9] 0x00007fb123e80fac /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+03919788
[ 10] 0x00007fb123c9d8ac /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01939628
[ 11] 0x00007fb123c99993 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01923475
[ 12] 0x00007fb123c9a797 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01927063
[ 13] 0x00007fb123d05e50 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02367056
[ 14] 0x00007fb12444a6b2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00562866
_ZN8Mfh_file11dispatch_fhEiPP11mxArray_tagiS2_+00000594
[ 15] 0x00007fb123ce8256 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02245206
[ 16] 0x00007fb123c98a86 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01919622
[ 17] 0x00007fb123c9d374 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01938292
[ 18] 0x00007fb123c99993 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01923475
[ 19] 0x00007fb123c9a797 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01927063
[ 20] 0x00007fb123d05e50 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02367056
[ 21] 0x00007fb12444a6b2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00562866
_ZN8Mfh_file11dispatch_fhEiPP11mxArray_tagiS2_+00000594
[ 22] 0x00007fb11b0f453a /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01672506
[ 23] 0x00007fb11b09513a /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01282362
[ 24] 0x00007fb11b0953be /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01283006
[ 25] 0x00007fb11b09712c /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+01290540
[ 26] 0x00007fb11b181f17 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcos.so+02252567
[ 27] 0x00007fb1243fcaf8 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00244472
_ZN13Mfh_MATLAB_fn11dispatch_fhEiPP11mxArray_tagiS2_+00000488
[ 28] 0x00007fb123ce7d33 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02243891
[ 29] 0x00007fb123cf7798 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02307992
[ 30] 0x00007fb123cfb436 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02323510
[ 31] 0x00007fb123cfc54c /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02327884
[ 32] 0x00007fb123c7eb06 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01813254
[ 33] 0x00007fb123c75f28 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01777448
[ 34] 0x00007fb123c9e136 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01941814
[ 35] 0x00007fb123c99993 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01923475
[ 36] 0x00007fb123c9a797 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01927063
[ 37] 0x00007fb123d05e50 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02367056
[ 38] 0x00007fb12444a6b2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00562866
_ZN8Mfh_file11dispatch_fhEiPP11mxArray_tagiS2_+00000594
[ 39] 0x00007fb123ce8256 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02245206
[ 40] 0x00007fb123c7409d /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01769629
[ 41] 0x00007fb123c9cb0e /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01936142
[ 42] 0x00007fb123c99993 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01923475
[ 43] 0x00007fb123c9a797 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01927063
[ 44] 0x00007fb123d05e50 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02367056
[ 45] 0x00007fb12444a6b2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_dispatcher.so+00562866
_ZN8Mfh_file11dispatch_fhEiPP11mxArray_tagiS2_+00000594
[ 46] 0x00007fb123cd4dcb /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+02166219
[ 47] 0x00007fb123c927cc /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01894348
[ 48] 0x00007fb123c8ee1d /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01879581
[ 49] 0x00007fb123c8f255 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwm_interpreter.so+01880661
[ 50] 0x00007fb11ad44fae /usr/local/MATLAB/R2013a/bin/glnxa64/libmwbridge.so+00139182
[ 51] 0x00007fb11ad45111 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwbridge.so+00139537
[ 52] 0x00007fb11ad45ce5 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwbridge.so+00142565
_Z8mnParserv+00000725
[ 53] 0x00007fb1246e23d2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00447442
_ZN11mcrInstance30mnParser_on_interpreter_threadEv+00000034
[ 54] 0x00007fb1246c19ac /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00313772
[ 55] 0x00007fb1246c1b88 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00314248
[ 56] 0x00007fb1182595c6 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwuix.so+00480710
[ 57] 0x00007fb118266df2 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwuix.so+00536050
[ 58] 0x00007fb124dac862 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwservices.so+01845346
[ 59] 0x00007fb124dad50f /usr/local/MATLAB/R2013a/bin/glnxa64/libmwservices.so+01848591
_Z25svWS_ProcessPendingEventsiib+00001615
[ 60] 0x00007fb1246c25ef /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00316911
[ 61] 0x00007fb1246c2f5c /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00319324
[ 62] 0x00007fb1246bc592 /usr/local/MATLAB/R2013a/bin/glnxa64/libmwmcr.so+00292242
[ 63] 0x00007fb122850182 /lib/x86_64-linux-gnu/libpthread.so.0+00033154
[ 64] 0x00007fb12257cfbd /lib/x86_64-linux-gnu/libc.so.6+01028029 clone+00000109
感谢您的帮助,如果您需要发布更多详细信息,请告诉我。亚历山德罗
最佳答案
我找到了问题所在,可能只是 Stackoverflow 的积极影响对我来说就足够了。基本上问题在于浮点异常的启用:feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
注释掉这一行解决了这个问题。可能这也影响了 MATLAB 解释器的行为,它无法像往常一样处理浮点异常。为了在我的函数中启用浮点异常(我不希望 nan 通过我的代码传播)我在调用 MyFunction
之前和之后启用然后禁用浮点异常,所以最后mex 文件的工作版本是:
void mexFunction( int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[] )
{
size_t mrows,ncols;
/* Check for proper number of arguments. */
if(nrhs!=4) {
mexErrMsgIdAndTxt( "HYPRO:invalidNumInputs",
"4 input required.");
}
if(nlhs>2) {
mexErrMsgIdAndTxt( "HYPRO:invalidNumOutputs",
"Too many output arguments");
}
/* The input must be a noncomplex scalar double.*/
for(int i=0;i<nrhs;i++){
mrows = mxGetM(prhs[i]);
ncols = mxGetN(prhs[i]);
if( !mxIsDouble(prhs[i]) || mxIsComplex(prhs[i]) ||
!(mrows==1 && ncols==1) ) {
mexErrMsgIdAndTxt( "HYPRO:inputNotRealScalarDouble",
"Input must be a noncomplex scalar double.");
}
}
/* Create matrix for the return argument. */
plhs[0] = mxCreateDoubleMatrix((mwSize)mrows, (mwSize)ncols, mxREAL);
/* Assign pointers to each input and output. */
const double t = *mxGetPr(prhs[0]);
const double p = *mxGetPr(prhs[1]);
const double T = *mxGetPr(prhs[2]);
const double U = *mxGetPr(prhs[3]);
double& Thrust = *mxGetPr(plhs[0]);
Foam::List<double> Mfr;
try{
//enable floating point exception
//it has to be disabled when exiting from this function!!
feenableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
MyFunction(t,p,T,U,Thrust,Mfr);
fedisableexcept(FE_DIVBYZERO | FE_INVALID | FE_OVERFLOW);
}catch (std::exception& e){
mexErrMsgIdAndTxt( "HYPRO:error", e.what());
}
plhs[1] = mxCreateDoubleMatrix((mwSize)mrows, Mfr.size(), mxREAL);
double* point = mxGetPr(plhs[1]);
for (mwSize i = 0; i < Mfr.size(); i++) {
point[i] = Mfr[i];
}
}
非常感谢您的关注,希望这对其他人有帮助。
亚历山德罗
关于c++ - 使用 mex 文件时 libmwm_interpreter.so 中的 matlab 浮点异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25723374/
我在网上搜索但没有找到任何合适的文章解释如何使用 javascript 使用 WCF 服务,尤其是 WebScriptEndpoint。 任何人都可以对此给出任何指导吗? 谢谢 最佳答案 这是一篇关于
我正在编写一个将运行 Linux 命令的 C 程序,例如: cat/etc/passwd | grep 列表 |剪切-c 1-5 我没有任何结果 *这里 parent 等待第一个 child (chi
所以我正在尝试处理文件上传,然后将该文件作为二进制文件存储到数据库中。在我存储它之后,我尝试在给定的 URL 上提供文件。我似乎找不到适合这里的方法。我需要使用数据库,因为我使用 Google 应用引
我正在尝试制作一个宏,将下面的公式添加到单元格中,然后将其拖到整个列中并在 H 列中复制相同的公式 我想在 F 和 H 列中输入公式的数据 Range("F1").formula = "=IF(ISE
问题类似于this one ,但我想使用 OperatorPrecedenceParser 解析带有函数应用程序的表达式在 FParsec . 这是我的 AST: type Expression =
我想通过使用 sequelize 和 node.js 将这个查询更改为代码取决于在哪里 select COUNT(gender) as genderCount from customers where
我正在使用GNU bash,版本5.0.3(1)-发行版(x86_64-pc-linux-gnu),我想知道为什么简单的赋值语句会出现语法错误: #/bin/bash var1=/tmp
这里,为什么我的代码在 IE 中不起作用。我的代码适用于所有浏览器。没有问题。但是当我在 IE 上运行我的项目时,它发现错误。 而且我的 jquery 类和 insertadjacentHTMl 也不
我正在尝试更改标签的innerHTML。我无权访问该表单,因此无法编辑 HTML。标签具有的唯一标识符是“for”属性。 这是输入和标签的结构:
我有一个页面,我可以在其中返回用户帖子,可以使用一些 jquery 代码对这些帖子进行即时评论,在发布新评论后,我在帖子下插入新评论以及删除 按钮。问题是 Delete 按钮在新插入的元素上不起作用,
我有一个大约有 20 列的“管道分隔”文件。我只想使用 sha1sum 散列第一列,它是一个数字,如帐号,并按原样返回其余列。 使用 awk 或 sed 执行此操作的最佳方法是什么? Accounti
我需要将以下内容插入到我的表中...我的用户表有五列 id、用户名、密码、名称、条目。 (我还没有提交任何东西到条目中,我稍后会使用 php 来做)但由于某种原因我不断收到这个错误:#1054 - U
所以我试图有一个输入字段,我可以在其中输入任何字符,但然后将输入的值小写,删除任何非字母数字字符,留下“。”而不是空格。 例如,如果我输入: 地球的 70% 是水,-!*#$^^ & 30% 土地 输
我正在尝试做一些我认为非常简单的事情,但出于某种原因我没有得到想要的结果?我是 javascript 的新手,但对 java 有经验,所以我相信我没有使用某种正确的规则。 这是一个获取输入值、检查选择
我想使用 angularjs 从 mysql 数据库加载数据。 这就是应用程序的工作原理;用户登录,他们的用户名存储在 cookie 中。该用户名显示在主页上 我想获取这个值并通过 angularjs
我正在使用 autoLayout,我想在 UITableViewCell 上放置一个 UIlabel,它应该始终位于单元格的右侧和右侧的中心。 这就是我想要实现的目标 所以在这里你可以看到我正在谈论的
我需要与 MySql 等效的 elasticsearch 查询。我的 sql 查询: SELECT DISTINCT t.product_id AS id FROM tbl_sup_price t
我正在实现代码以使用 JSON。 func setup() { if let flickrURL = NSURL(string: "https://api.flickr.com/
我尝试使用for循环声明变量,然后测试cols和rols是否相同。如果是,它将运行递归函数。但是,我在 javascript 中执行 do 时遇到问题。有人可以帮忙吗? 现在,在比较 col.1 和
我举了一个我正在处理的问题的简短示例。 HTML代码: 1 2 3 CSS 代码: .BB a:hover{ color: #000; } .BB > li:after {
我是一名优秀的程序员,十分优秀!