使用quadgk与Matlab编码器的多个输入

5次浏览(过去30天)
嗨,我想从我的Matlab文件中创建一个C文件。在我的Matab文件中,我必须做一些积分,这就是我使用quadgk函数的方式。我现在的问题是,生成C代码的Matlab Coder不允许函数句柄。
我想对函数积分
函数val=integrand1(x,c,d) val=x*c+d;结束
通过下面的项
Integral = quadgk('integrand1',z(1),z(2),-1,z(2))
所以积分从z(1)到z(2)对于参数c和d,我想使用值-1和z(2)。如果我这样做,Matlab编码器给出了errow ??第一个输入参数必须是一个函数句柄。
但是如何使用quadgk呢?非常感谢你的帮助。
向安东尼娅致意

接受的答案

迈克何西阿书
迈克何西阿书 2014年2月20日
编辑:迈克何西阿书 2014年2月20日
我没有很多时间打这个。希望如果不清楚的话,我可以回来补充一些细节。
我们在MATLAB中做这个的方法不是用字符串来表示被积函数。这已经过时了。标准的方法是对匿名函数@(x)integrand1(x,c,d)进行积分,其中c和d将在前面定义,例如。
quadgk (@ (x) integrand1 (x, z(2))、z(1)、z (2))
不幸的是,这在MATLAB Coder中不起作用,因为MATLAB Coder不支持匿名函数。万博1manbetx所以你需要做一些更复杂的事情使用持久变量,比如
函数Val =被积(x,c,d)
持续的c_saved, d_saved
如果isempty (c_saved)
C_saved = 0;
D_saved = 0;
结束
如果Nargin >= 2
c;
结束
如果Nargin >= 3
D_saved = d;
结束
Val = x*c_saved + d_saved;
然后使用它,你只需要用你想要的c和d来调用它。
integrand1 (0, 1, z (2));
积分= quadgk(@integrand1,z(1),z(2));
如果我犯了一个错别字或其他愚蠢的错误,我道歉。我没有时间测试它,但是我们使用这种基本方法测试了QUADGK的代码生成,所以我知道它可以工作。——迈克
5个评论
通Rangaswamy
通Rangaswamy 2019年10月16日
感谢史蒂文!
我的问题也是基于匿名函数和MATLAB编码器,这似乎与前一个问题一致。不过,我现在已经单独提出了这个问题,期待得到答案。

登录评论。

更多答案(0)

类别

了解更多MATLAB编码器帮助中心而且文件交换

s manbetx 845

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!