我正试图在Octave中使用此代码来评估函数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)
,但它们都不起作用,给出了一个语法或另一个错误。
该代码的主要功能是使用这些值,使用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)