matlabFunction,写入文件,错误处理集成变量

时间:2018-03-23 02:18:41

标签: matlab

问题

我试图象征性地区分一个函数相对于两个不同的变量,然后为每个衍生物创建一个函数文件。其中一个函数文件有效,另一个没有,因为matlabFunction错误处理了集成变量。

我的方法

生成函数文件的代码(启动函数是(非正则化)不完全beta函数)

syms x y a b fnc dFncda dFncdb
assume (a > 1);
assume (b > 1);
assume (0 < x & x < 1);
fnc(x,a,b) = int(y^(a-1)*(1-y)^(b-1),y,0,x);
dFncda(x,a,b) = diff(fnc(x,a,b),a,1);
dFncdb(x,a,b) = diff(fnc(x,a,b),b,1);
matlabFunction(dFncda(x,a,b),'File','derivA');
matlabFunction(dFncdb(x,a,b),'File','derivB');

结果

生成的derivA.m文件(不包括自动生成的注释)

function out1 = derivA(a,b,x)

out1 = integral(@(y)y.^(a-1.0).*log(y).*(-y+1.0).^(b-1.0),0.0,x);

从命令

进行测试
derivA(0.5,3,3)
ans = 
   -1.7590

接下来,对于derivB.m

也是如此
function out1 = derivB(a,b,x)

t2 = -y+1.0;
out1 = integral(@(y)t2.^(b-1.0).*y.^(a-1.0).*log(t2),0.0,x);

包含集成变量的被积函数的一部分已分配给t2。由于未在后续匿名函数之外定义集成变量,因此不出所料导致错误

derivB(0.5,3,3)
Undefined function or variable 'y'.

Error in derivB
t2 = -y+1.0;

问题

我可以做些不同的事情来防止这种情况(除了我自己编写函数文件之外)吗?这是matlabFunction处理积分的方式中的错误吗?我正在使用版本'9.2.0.556344(R2017a)'

1 个答案:

答案 0 :(得分:2)

您可以使用'optimize'标志强制MATLAB不优化您的功能。

matlabFunction(dFncdb(x,a,b),'File','derivB','optimize',false);

&#39; derivB.m&#39;的内容没有自动生成的注释现在与在您创建的衍生函数上使用disp(dFuncdb)的公式相同:

function out1 = derivB(a,b,x)

    out1 = int(y.^(a-1.0).*log(-y+1.0).*(-y+1.0).^(b-1.0),y,0.0,x);

有关文档,请参阅here

在这种情况下,&#39;优化&#39;意味着打破这个功能&#39;!所以是的,当'optimize'设置为true时(这是默认设置),这看起来像是错误/意外行为。