gpt4 book ai didi

matlabFunction,写入文件,错误处理积分变量

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:22 25 4
gpt4 key购买 nike

问题

我试图用符号区分一个函数与两个不同的变量,然后为每个导数创建一个函数文件。一个函数文件有效,另一个无效,因为 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。由于 integration 的变量没有在后续的匿名函数之外定义,这不出所料地导致了错误

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

Error in derivB
t2 = -y+1.0;

问题

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

最佳答案

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

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

没有自动生成注释的 'derivB.m' 的内容现在与在您创建的导数函数上使用 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 .

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

关于matlabFunction,写入文件,错误处理积分变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com