Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >(MATLAB/ C++ )是否可以将函数作为参数传递给C++ MEX函数?

(MATLAB/ C++ )是否可以将函数作为参数传递给C++ MEX函数?
EN

Stack Overflow用户
提问于 2021-02-12 09:01:13
回答 2查看 234关注 0票数 2

我只使用了几个星期的mex函数,现在正在编写一个Runge,4阶求解器作为一个C++ mex函数。我想知道是否可以将一个函数作为输入。实际上,用MATLAB编写我的动力学函数并将其直接传递给我的RK4 mex函数是很好的。例如,如果动力学由Duffing方程控制,则用MATLAB编写:

代码语言:javascript
运行
AI代码解释
复制
function xdot = Duffing(t,x)
xdot = [x(2); 0.3*cos(t)-0.22*x(2)+x(1)-x(1)^3];
end

(我知道这可以写成Duffing = @(t,x) (随便什么))

是否有一种方法可以从mex函数中调用动态函数,还是inputs[]仅被限制为数值类型?我尝试了以下几点:

代码语言:javascript
运行
AI代码解释
复制
class MexFunction : public matlab::mex::Function {
public:
    void operator()(ArgumentList outputs, ArgumentList inputs) {
        
//     Access the dynamics function
        typedef TypedArray<double> xdot_type (TypedArray<double>, TypedArray<double>);
        xdot_type xdot;
        xdot = inputs[0];

当然,这不起作用,因为输入不能分配给“TypedArray<double> (TypedArray<double>, TypedArray<double>)”,因为我认为ArgumentList认为输入应该是纯数字的。有人能想到解决这个问题的方法吗,或者我只需要用C++编写我的动态函数?期待一些建议!托马斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-12 10:33:37

只需快速浏览MATLABEngine::feval接口,您就可以使用MATLAB::C++::MATLABEngine::feval界面完成此操作:

723048 aa12 e22f-4 4bfb a12-47b8007da774

也就是说,将函数名作为字符串传递到C++ mex文件中,您可以通过matlab::ArgumentList语法获得该字符串:

代码语言:javascript
运行
AI代码解释
复制
void operator()(matlab::mex::ArgumentList outputs, matlab::mex::ArgumentList inputs) {
    matlab::data::CharArray fname = inputs[0];
    etc.

然后将fname转换为std::u16字符串,并在feval接口中使用它。

票数 2
EN

Stack Overflow用户

发布于 2021-02-12 15:10:25

除了@James的答案之外,还可以使用coder.extrinsic在位于C++ Mex和Matlab函数之间的一个瘦代码生成的包装层中使用。

代码语言:javascript
运行
AI代码解释
复制
              calls                                                     calls
C++ Mex layer ----> Code-Generated Matlab wrapper lib (coder.extrinsic) ----> Matlab function

然而,可能不是一个好的设计。我假设您使用C++是出于性能原因。暂停程序的执行,将数据从C++编组到Matlab是很慢的。如果您正在运行时间步进模拟,您可能会发现互操作代码成为性能瓶颈。更好的设计可能是调整您的动力学方程Matlab代码,使其成为代码生成,然后您可以直接从生成的C代码调用C++。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66175990

复制
相关文章
C++对象模型_Class Obj作为函数参数
开发环境 VC6.0 编辑器 Cmd Markdown 关于C/C++中基本类型(如:int,int*等)作为函数参数时,是通过将该变量的值压栈来进行参数传递;本文通过C++反汇编代码分析了当对象作为函数参数时(该形参非引用或指针),参数如何传递以及此时栈帧的结构。 对象作为函数参数时,参数传递过程(如:函数的声明为:void show(class Object obj);该函数的调用的为show(arg);其中实参arg的类型为class Object):1,在栈顶上为obj对象分配内存空间,然
chinchao.xyz
2022/04/25
1.2K0
C++对象模型_Class Obj作为函数参数
C++ 引用与引用作为函数的参数
对一个数据建立一个“引用”,他的作用是为一个变量起一个别名。这是C++对C语言的一个重要补充。
chaibubble
2022/05/07
2.2K0
C++ 引用与引用作为函数的参数
C++函数参数传递
当形参是非引用类型时,实参的值会被拷贝给形参,实参和形参是两个完全不同的对象,函数对形参做的所有操作都不会影响实参。
TOMOCAT
2021/05/11
1.8K0
Vue 中,如何将函数作为 props 传递给组件
作者:Michael Thiessen 译者:前端小智 来源:medium 点赞再看,养成习惯本文 GitHub https://github.com/qq44924588... 上已经收录,更多往
前端小智@大迁世界
2020/05/18
8.4K0
【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 )
" 拷贝构造函数 " 又称为 " 赋值构造函数 " , 该类型构造函数有 4 种调用时机 ;
韩曙亮
2023/10/15
3160
【C++】拷贝构造函数调用时机 ② ( 对象值作为函数参数 | 对象值作为函数返回值 )
【小白学习C++ 教程】六、C++内置函数和函数传参
函数是一组一起执行一个任务的语句。每个 C++ 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。
润森
2022/08/18
9440
【小白学习C++ 教程】六、C++内置函数和函数传参
C++返回vector/将vector作为参数传递
在C++里很多时候我们会遇到函数想返回两个以上结果的情况,这时候可以用数组(vector)、类来作为容器返回,也可以声明一个全局变量的数组,将数值存放在数组里解决。
vincentbbli
2021/08/18
5.6K0
c++构造函数是否可以抛出异常_什么叫抛出异常
从语法上来说,构造函数可以抛出异常。但从逻辑上和风险控制上,构造函数中尽量不要抛出异常。万不得已,一定要注意防止内存泄露。
全栈程序员站长
2022/09/22
1.7K1
C++内联函数,默认参数,占位参数
之前讲过宏定义会经过预处理器进行文本替换,缺点就在于没有类型检查,没有任何编译过程,编译器根本不知道类型是什么.
诺谦
2019/05/24
1.4K0
函数(四)(数组作为函数参数)
一是数组元素作为函数参数,这种情况下与简单变量作为函数的参数完全一样,数组元素的值被单向传递给形参变量。
pigeon
2022/04/11
1.6K0
函数(四)(数组作为函数参数)
js匿名函数作为函数参数
继承,多态,甚至指针,c能实现,c++,java有,javascript(和java是雷锋和雷峰塔的区别,名字上不知道坑了多少人)也能变通实现。
全栈程序员站长
2022/11/10
5.4K0
c++ findwindow函数_matlab中怎么查找函数的用法
FindWindow 用来根据类名和窗口名来得到窗口句柄的。但是这个函数不能查找子窗口,也不区分大小写。
全栈程序员站长
2022/09/21
1.1K0
C++之函数参数的扩展
函数参数的默认值 C++中可以在函数声明时为参数提供一个默认值 当函数调用时没有提供参数的值,则使用默认值 参数的默认值必须在函数声明中指出 int mul(int x = 0); int main(int argc, char *argv[]) { printf("%d\n",mul()); // mul(0) return 0; } int mul() { return x + x; } 函数默认参数的规则 设计函数时参数的默认值必须从右向左提供 函数调用时使用了默认值,则后续参数必须使用默认值
程序手艺人
2018/05/18
9330
C++如何禁止函数的传值调用
按照参数形式的不同,C++应该有三种函数调用方式:传值调用、引用调用和指针调用。对于基本数据类型的变量作为实参进行参数传递时,采用传值调用与引用调用和指针调用的效率相差不大。但是,对于类类型来说,传值调用和引用调用之间的区别很大,类对象的尺寸越大,这种差别越大。
恋喵大鲤鱼
2019/02/22
2.5K0
python函数可以按照参数名称方式传递参数_python字符串作为函数参数
函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。
全栈程序员站长
2022/09/27
2K0
python函数可以按照参数名称方式传递参数_python字符串作为函数参数
【Python】函数进阶 ③ ( 函数作为参数传递 )
之前介绍的函数 , 都是 接收具体的 变量 或 字面量 数据 作为参数 , 如 : 数字 / 布尔值 / 字典 / 列表 / 元组 等 ;
韩曙亮
2023/10/11
5350
【Python】函数进阶 ③ ( 函数作为参数传递 )
【C++】命名空间&缺省参数&函数重载&引用&内联函数
这是将int scanf=10;放在了局部,定义int scanf的时候还是可以的,但是在使用scanf("%d",&scanf);时出现错误;
MicroFrank
2023/01/16
8440
C++带参数的构造函数 | 有参构造函数
在C++中,程序员希望对不同的对象赋予不同的初值,可以采用带参数的构造函数,在调用不同对象的构造函数时,从外面将不同的数据传递给构造函数, 以实现不同的初始化。
小林C语言
2021/01/28
4.1K0
C++带参数的构造函数 | 有参构造函数
C++函数值与参数 | 函数实现比较大小
主调函数和被调函数之间是有数据传递关系的,在调用函数时,函数是带参数的,参数分为形式参数和实际参数
小林C语言
2020/11/30
1.5K0
C++函数值与参数 | 函数实现比较大小
迟来的函数传参补充——传引用【引用调用】【c++】
函数传参,几乎一直在用简单的值传递,或者传指针,前者生成一个源结构的副本,后者链表或者树的时候用的比较多,本文补充到一个类似值传递的函数调用方式,函数定义的传参位置却是地址接收方式,这就是传引用。
来杯Sherry
2023/06/18
2050
迟来的函数传参补充——传引用【引用调用】【c++】

相似问题

不使用mex将C++回调作为函数句柄传递给matlab引擎

11

是否可以将类作为参数传递给c++中的函数?

10

将非C++函数作为参数传递给函数

710

将JS函数作为函数参数传递给C++

13

利用C++ mex函数从matlab中获取输入参数

16
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档