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



我正试图在Octave中使用此代码来评估函数fdf在特定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),但它们都不起作用,给出了一个语法或另一个错误。

该代码的主要功能是使用这些值,使用Newton-Raphson方法找到函数f的根。

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

定义符号函数如下:

pkg load symbolic
syms 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 + 1    2⋅╲╱ x + 4

要评估给定x的函数,可以使用subs并将结果转换为double:

double(subs(df,x,4))

这将返回值0.15656。

在MATLAB中

一种可能性是通过使用matlabFunction()函数从进行转换,将函数df更改为匿名函数/函数句柄

符号→匿名函数/函数句柄

使用subs()函数也可以,但我觉得它不那么优雅。

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

最新更新