gpt4 book ai didi

matlab - 符号导数在旧版本的 MATLAB 中抛出错误

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

我有这段 MATLAB 代码,它使用符号函数进行某些操作,当我在服务器的 2015b 版本中运行 sym/diff 函数时,它会抛出一个非常烦人的错误。我的 2018a 笔记本电脑运行相同的代码没有问题。错误特别是:

Error using sym/diff (line 68)
Error using class
The first argument to function CLASS must be a struct.

抛出错误的代码部分的 MWE 如下:

Thrust_fcn = @(r) 5 * exp(-2*r)
syms r;
diff_fcn = diff(Thrust_fcn, r);

这是抛出错误的内置 sym/diff 函数中的代码:

try
if nargin == 1
r = class(maplemex(0,'MTM:-diff',m),'sym');
elseif nargin == 2
r = class(maplemex(0,'MTM:-diff',m,n),'sym');
else
r = class(maplemex(0,'MTM:-diff',m,n,u),'sym');
end
catch
error(lasterr);
end

我检查了 2018a 上的 sym/diff 函数的代码,完全不同,这是一段约 300 行的代码。

关于如何让它发挥作用的任何想法?非常感谢!

最佳答案

符号函数

当您使用 @(r) 时,您将生成一个 function_handle,它不是符号工具箱的一部分:

>> Thrust_fcn = @(r) 5 * exp(-2*r);
>> whos Thrust_fcn
Name Size Bytes Class Attributes
Thrust_fcn 1x1 32 function_handle

相反,先尝试创建 r,然后使用符号 r 创建 Thrust_fcn

>> syms r;
>> Thrust_fcn = 5 * exp(-2*r); %%% Not using @(r)! %%%

>> whos Thrust_fcn
Name Size Bytes Class Attributes
Thrust_fcn 1x1 8 sym

现在 Thrust_fcn 是一个符号,尝试调用 diff(Thrust_fcn, r)

调用 MuPAD 的函数(在 MATLAB 中)

如果您想继续使用函数句柄,您可以使用 MuPAD 的功能,同时保留在 MATLAB 编辑器中。 This MathWorks Documentation page解释了一些使用 MuPAD 功能的方法,但我将提供一个工作示例:

% Notice that 'syms r' is never called.
% You may want to ensure your previous variable 'r' has been cleared first.
clear r;

Thrust_fcn = @(r) 5 * exp(-2*r);
feval(symengine,'diff',Thrust_fcn,'r')

这与您在 MuPAD 中定义一个函数并使用输入 'r'Thrust_fcn 上调用 diff 的方式相同>.

关于matlab - 符号导数在旧版本的 MATLAB 中抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52882306/

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