可通过syms将函数句柄转换为符号函数
用diff求导后
再通过matlabFunction转换为函数句柄
clc;clear
f = @(x) x.^2 + 2.* x + 1 % 通过函数句柄建立匿名函数
syms x % 通过符号变量将匿名函数转换为符号函数
y = f(x)
g = matlabFunction(diff(y)) % 通过matlabFunction将符号函数转换为匿名函数
确实没有办法直接对函数句柄求导,除非用符号函数。
我的建议是,直接给牛顿法函数传入导函数的句柄。接口如下:
function Lab_4_2(f, df, x0)
% f: 原函数句柄,例如@sin
% df: 导函数句柄,例如@cos
% x0: 初始解,例如0.1
...
事实上不需要传递函数进去,只需要传递一个式子进去就行(不是function),然后在Newton函数里面syms x 正常求导,需要其导数值的时候调用eval函数就行。