matlab报错:尝试将 SCRIPT xxx 作为函数执行 |
您所在的位置:网站首页 › 错误使用fzero › matlab报错:尝试将 SCRIPT xxx 作为函数执行 |
最近在跑matlab代码,今天在运行别人程序发现了一个错误,尝试将 SCRIPT xxx 作为函数执行, 这里记录自己的填坑指南,也方便自己和大家以后查阅。 1. 问题出现在运行某代码的时出现错误, 尝试将 SCRIPT xxx 作为函数执行 如下图所示: 经过网上的搜索,发现列举了两种可能的错误: 文件名和函数名重名所致,只需将函数重命名函数文件的第一行函数定义没有写或者编写错误,将函数定义修改规范即可参考 尝试将 SCRIPT script 作为函数执行matlab报错:尝试将 SCRIPT xxx 作为函数执行:错误但是经过具体的检查发现问题并不简单,因此我们比较笨的方法也是最原始的方法就是调试一下代码。因为我们这里的代码比较复杂,它是调用了两个外部工具包,即ompbox10以及ksvdbox13。关于matlab工具包的添加,可以参考给Matlab添加工具箱Toolbox的方法(有截图详细讲解)。 所以这里猜想问题可能出现在这两个工具包中。 3. 问题的解决 3.1 问题进一步定位经过上面的分析,我们首先定位到程序出错的地方,然后一级一级查看函数定义,最后发现我们调用函数是这番模样。 matlab默认的程序文件是.m文件,但有很多情况下需要用matlab调用C语言程序,归纳起来有以几种情况: matlab程序中的某模块非常耗时,改用C语言编写可以提高执行速度。现有成熟算法已经用C语言编写完成,但是matlab程序需要调用其中的某一算法,但不想改写成为.m程序从.m程序可以直接获取源代码,为了保护知识产权,作者希望只提供接口,和库函数,供使用者调用。类似于Windows系统动态链接库(.dll)具体的大家可以参考这一篇博客做更详细的了解matlab调用C语言程序,MEX文件使用方法,matlab与C混合编程。这里也不做过多的解释了。 3.2.2 配置matlab编译器按照作者的介绍,我们首先应该需要配置matlab编译器,如何配置呢?参考Matlab安装 MinGW-w64 编译器的方法 在matlab工作区中输入以下命令行: mex -setup 结果出现: 下载MinGW-w64 C++编译器(下载地址,安装时注意选择32位还是64位的,因为我的机器是64位的,所以需要下载64位的!如果你是32位机器,那么就下载32位的!) (1)安装时注意最好按照默认路径安装,否则后面使用时可能会报错 (2)安装时点create,窗口下面的勾选框要选上 设置其路径到环境变量 电脑->属性->高级系统设置->环境变量->系统变量->添加 在MATLAB命令行内运行命令setenv(‘MW_MINGW64_LOC’,folder),folder为TDM-GCC的安装位置,这里是'C:\TDM-GCC-64'要加单引号; 重启matlab即可使用(这里最好重启一下电脑!我是重启了matlab没有作用) 经过上面的操作,我们是完成编译器的安装,然后在matlab的命令行中,输入mex -setup,这时候就出现编译器已经安装完毕了。 在完成了之前的编译器的配置之后,我们接下来就开始编译我们的c代码。那么如何编译了? 我们首先切换当前的目录, 进入到需要编译.c程序的目录。使用mex ***.c 命令,等到编译成功之后你会发现在当前的目录下,生成.mexw64后缀名的文件。![]() ![]() ![]() ![]() 其实,我们观察工具包的目录的时候,其实是发现了.mexw32程序,到这里我们终于问题尝试将 SCRIPT xxx 作为函数执行的原因是:其实这个原生程序在32位机器是可以跑的通的,原作者也是在32位机器写的。只是现在我们换成了64位机器,却没有提供相应的.mexw64文件,导致matlab不能解析.c文件。好吧,暂时先写到这里,后面的话如果有时间的话,把这两个工具包的32/64位版本都传到我的github上了。感谢其他博主的分享。 ksvdbox13ompbox10这个应该是今年最后一个博客了,让我们迎接2020,哈哈。 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |