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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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将符号函数转换为匿名函数

参考技术A 确实没有办法直接对函数句柄求导,除非用符号函数。
我的建议是,直接给牛顿法函数传入导函数的句柄。接口如下:
function Lab_4_2(f, df, x0)

% f: 原函数句柄,例如@sin
% df: 导函数句柄,例如@cos
% x0: 初始解,例如0.1
...
参考技术B 事实上不需要传递函数进去,只需要传递一个式子进去就行(不是function),然后在Newton函数里面syms x 正常求导,需要其导数值的时候调用eval函数就行。

以上是关于matlab 用句柄传入的函数如何应用diff函数对其求导数?或者有无替代方法把一个函数传进来并且求导。的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何取消plot画的图

MATLAB中norm函数

Win32获取屏幕句柄的函数是啥?

如何在Matlab中调用afterEach后得到函数句柄的输出?

MATLAB 的函数句柄

MATLAB如何绘制三维隐函数图形