【问题标题】:Numerical integration of symbolic differentiation - MATLAB符号微分的数值积分 - MATLAB
【发布时间】:2015-02-13 22:12:45
【问题描述】:

以下是一个 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 = integral(Df , 0 , 1),

但我收到以下错误。

Error using integral (line 82) First input argument must be a function handle.

谁能帮我写这段代码?

【问题讨论】:

  • 一般来说,当软件抛出错误时,最好阅读它,因为它会告诉你错误的原因是什么以及它在哪里。你应该试试看。此外,如果您需要其他人的帮助,告诉他们您遇到的错误也很有帮助!
  • @Ander Biguri 问题已更新!
  • 我得到的是“diff 不是函数句柄支持的类”。这意味着您不能在 f=@ 中使用 diff ...也许 aMatlab 版本不同?我的是 2013b
  • 嗯,奇怪。这可能是因为 MATLAB 正在访问旧的“diff”函数,nf.nci.org.au/facilities/software/Matlab/techdoc/ref/diff.html
  • “老”是什么意思? uk.mathworks.com/help/matlab/ref/diff.html 这是 2014b 文档。

标签: matlab function integration calculus differentiation


【解决方案1】:

为了解决这个问题,matlabFunction 是必需的。解决方案如下所示:

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

【讨论】:

  • 这是一个答案还是你想澄清你的问题?
  • @rayryeng 这是一个答案。
  • 一种更简洁的方法可能是避免在matlabFunction 中调用subs,并简单地将Df 设为x 和y 的函数,然后设置你的积分integral(@(x) Df(x,2),0,1)。但是matlabFunction 正是在这里使用的正确函数。
【解决方案2】:

使用sym/int:

syms x y;
f = @(x, y) x.*y.^2;
Df = diff(f,y);
s = int(Df,x,0,1)

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

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

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 2023-03-08
    • 2014-11-28
    • 2014-08-07
    • 1970-01-01
    • 2021-07-20
    • 2013-05-14
    • 2015-08-14
    相关资源
    最近更新 更多