Matlab 符号函数在特定值上的导数

Matlab 符号函数在特定值上的导数,matlab,octave,newtons-method,Matlab,Octave,Newtons Method,我试图在倍频程中使用此代码来计算函数f,df,在特定x值下的导数: pkg load symbolic; syms x; f = @(x) sqrt(2*x+1) - sqrt(x+4); disp(f); df = diff(f,x); 例如,我尝试了df(4)和eval(df,4), 但他们都没有给出语法或其他错误 该代码的主要功能是使用这些值,然后使用牛顿-拉斐逊法在MATLAB中找到函数f的根。 通过使用matlabFunction()函数进行以下转换,可以将函数df更改为匿名函数/函

我试图在倍频程中使用此代码来计算函数
f
df
,在特定
x
值下的导数:

pkg load symbolic;
syms x;
f = @(x) sqrt(2*x+1) - sqrt(x+4);
disp(f);
df = diff(f,x);
例如,我尝试了
df(4)
eval(df,4)
, 但他们都没有给出语法或其他错误

该代码的主要功能是使用这些值,然后使用牛顿-拉斐逊法在MATLAB中找到函数
f
的根。

通过使用
matlabFunction()
函数进行以下转换,可以将函数
df
更改为匿名函数/函数句柄:

象征性→ 匿名函数/函数句柄

使用
subs()
函数也可以工作,但我发现它不够优雅

syms x
f = sqrt(2*x+1) - sqrt(x+4);
df = diff(f,x);
df = matlabFunction(df);

df(4)

将匿名函数与符号函数混淆。您的
f
是一个匿名函数。它不使用符号变量
x
,因为
x
在此函数中是局部变量,它是一个输入参数。该函数将对您提供的任何输入进行数值计算

定义一个符号函数,如下所示:

pkg加载符号
符号x
f=sqrt(2*x+1)-sqrt(x+4)
df=diff(f,x)
输出:

>f=sqrt(2*x+1)-sqrt(x+4)
f=(sym)
_______     _________
- ╲╱ x+4+╲╱ 2.⋅x+1
>>df=diff(f,x)
df=(sym)
1             1
─────────── - ───────────
_________       _______
╲╱ 2.⋅x+12⋅╲╱ x+4
要评估给定
x
的函数,可以使用
subs
并将结果转换为
double

double(潜艇(df,x,4))

这将返回值0.15656。

(1)您将匿名函数与符号函数混淆。您需要将
f
定义为符号函数。(2) MATLAB还是倍频程?你说MATLAB,但你的代码是八度的。两者是不同的,特别是对于象征性的东西。如果你想要一个倍频程的解决方案,不要说MATLAB,也不要标记MATLAB。或者,如果在工作区上
x=4
,你可以简单地调用
eval(df)
@Tasos:这是文档中说的,但它给了我一条错误消息。也许我需要升级Octave或Python之类的东西,我不知道。具有八度音阶的机器在Ubuntu 18上卡住了,因此无法使用较旧版本的软件:/这也与八度音阶兼容。符号包包括
@sym/matlabFunction
作为
@sym/function\u handle
的别名,以与matlab兼容。