matlab 用句柄传入的函数如何应用diff函数对其求导数?或者有无替代方法把一个函数传进来并且求导。

我在编写一个通用的牛顿迭代法求根的函数LAB,我想把待求根的函数f1用句柄传入,之后对其求导数,然后再进行其他步骤(此处省略)。可是diff函数不能对句柄求导数该怎么办呢?请教各位大神!
或者有无其他不用句柄的方法能够将一个外部定义的函数传入我的牛顿迭代函数并且求导数。
我的f1函数:
f1.m
function f = f1(x)
f1 = x^3/3-x;

通用牛顿迭代函数:
Lab_4_2.m
function Lab_4_2(f)
f1 = sym(f) 。。。。。。。主要是想在这里把传进来的句柄进行一些操作然后用diff求导数,可是我失败了。
f2 = diff(f1);。。。。。。。请教各位如何操作?

可通过syms将函数句柄转换为符号函数
用diff求导后
再通过matlabFunction转换为函数句柄    

clc;clear
f = @(x) x.^2 + 2.* x + 1    % 通过函数句柄建立匿名函数
syms x                       % 通过符号变量将匿名函数转换为符号函数
y = f(x)
g = matlabFunction(diff(y))  % 通过matlabFunction将符号函数转换为匿名函数

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-26
确实没有办法直接对函数句柄求导,除非用符号函数。
我的建议是,直接给牛顿法函数传入导函数的句柄。接口如下:
function Lab_4_2(f, df, x0)

% f: 原函数句柄,例如@sin
% df: 导函数句柄,例如@cos
% x0: 初始解,例如0.1
...本回答被网友采纳
第2个回答  推荐于2017-12-01
事实上不需要传递函数进去,只需要传递一个式子进去就行(不是function),然后在Newton函数里面syms x 正常求导,需要其导数值的时候调用eval函数就行。本回答被网友采纳
相似回答