符号微分的数值积分&MATLAB

符号微分的数值积分&MATLAB,matlab,function,integration,calculus,differentiation,Matlab,Function,Integration,Calculus,Differentiation,下面是一个MATLAB问题 假设我定义了一个函数f(x,y)。 我想计算f对y的偏导数,以y的特定值计算,例如y=6。最后,我想在x的范围内集成这个新函数(它只是x的一个函数) 举个例子,这就是我所尝试的 syms x y; f=@(x,y)x.*y.^2; Df=subs(diff(f,y),y,2); Int=积分(Df,0,1), 但是我得到了以下错误 使用积分时出错(第82行) 第一个输入参数必须是函数 句柄。 有人能帮我写这段代码吗?要解决这个问题,需要使用matlabFunction

下面是一个MATLAB问题

假设我定义了一个函数f(x,y)。 我想计算f对y的偏导数,以y的特定值计算,例如y=6。最后,我想在x的范围内集成这个新函数(它只是x的一个函数)

举个例子,这就是我所尝试的

syms x y;
f=@(x,y)x.*y.^2;
Df=subs(diff(f,y),y,2);
Int=积分(Df,0,1)
,

但是我得到了以下错误

使用积分时出错(第82行)
第一个输入参数必须是函数
句柄。


有人能帮我写这段代码吗?

要解决这个问题,需要使用
matlabFunction
。解决方案如下所示:

syms x y
f = @(x, y) x.*y.^2;
Df = matlabFunction(subs(diff(f,y),y,2));
Int = integral(Df , 0 , 1);

使用以下方法使其具有象征意义:

返回
y
。您可以在此处或之前将
2
in替换为
y
,就像您在问题中所做的那样。这并不是说,在这种情况下,这将为您提供一个没有浮点错误的精确答案,而不是以数字方式计算积分的
integral


在用谷歌搜索Matlab中的函数时,一定要注意它们所在的工具箱以及它们支持的参数类(数据类型)。在某些情况下,会有同名的重载版本,但在另一些情况下,您可能需要四处寻找不同的方法(或设计自己的方法)。

通常,当软件抛出错误时,阅读它是一种很好的练习,因为它会告诉您错误的原因以及错误的位置。你应该试试看。此外,如果你想从别人那里得到帮助,告诉他们你犯了什么错误也会有很大帮助@Ander Biguri问题已更新!我得到的是“diff不是函数句柄支持的类”。这意味着您不能在f=@。。。也许aMatlab版本不同?我的是2013bhmm,奇怪。这可能是因为MATLAB正在访问旧的“diff”函数,您所说的“old”是什么意思?这是2014b文档。这是一个答案还是你在试图澄清你的问题?@rayreng这是一个答案。一个更简洁的方法可能是避免
matlabFunction
中的
subs
调用,只需将
Df
设置为
x
y
的函数,然后像
积分一样设置积分(@(x)Df(x,2),0,1)
。但是
matlabFunction
恰恰是这里要使用的函数。
syms x y;
f = @(x, y) x.*y.^2;
Df = diff(f,y);
s = int(Df,x,0,1)