Matlab 计算数值导数

Matlab 计算数值导数,matlab,derivative,Matlab,Derivative,所以我对如何组织我的问题有点困惑 因此,分配说明如下: 键入执行数值推导的m文件numerical_derivative.m。使用 当f(x)=3x^2/(ln(1-x)) 在m文件中,您可以使用h=10^-6,并具有以下主要功能: function y = numericalderivative (f, x) % Calculates the numerical value in the case of f in punk x. % --- Input --- % f: function ha

所以我对如何组织我的问题有点困惑

因此,分配说明如下:

键入执行数值推导的m文件numerical_derivative.m。使用 当f(x)=3x^2/(ln(1-x))

在m文件中,您可以使用h=10^-6,并具有以下主要功能:

function y = numericalderivative (f, x)
% Calculates the numerical value in the case of f in punk x.
% --- Input ---
% f: function handle f(x)
% x: the point where the derivative is calculated
% --- output ---
% y: the numerical derivative of f on the point x

如果我想将其保存为文件并在matlab中运行程序,那么使用句柄不是多余的吗?

当您将其作为函数文件并在matlab中运行时,没有任何输入参数,即“f”和“x”,它会给您错误:“输入参数不足”。为了运行该文件,您必须键入类似于NumericalDelivative(3x^2/(ln(1-x)),5的内容,它给出x=5时的数值导数值

函数和,在MATLAB函数文件中是干式编程方法的简单实现。要求您创建一个函数,该函数接受一个句柄和一个x文件,然后返回该函数句柄和x值的导数。函数文件的要点是能够使用多个函数句柄或多个x值重用函数。这很有用,因为它只需要将函数句柄和数值传递给函数

在您的情况下,脚本文件或命令窗口代码如下所示:

func = @(x) (3*x^2)/log(1-x);
x = -3;
num_deriv = numericalderivative(func,x);

您应该编写代码使函数numericalderivative工作

我不会给你家庭作业的答案,但也许一个简单的例子会有所帮助

考虑以下问题

编写一个名为
fdiff
的函数,该函数接受以下两个参数:

  • 一个函数
    f
    ,由接受一个参数的函数句柄表示
  • 以及一个点
    x
    ,该点可以假定在
    f
    的域中
  • 写入
    fdiff
    ,使其返回值
    f(x)-f(x-1)


    解决方案(将在名为fdiff.m的文件中) 示例用例 使用
    fdiff
    创建的是一个函数,它接受另一个函数作为输入。正如您所见,它不仅适用于
    3*x^2/(log(1-x))
    ,而且适用于您想要定义的任何函数

    你的作业的目的是创建一些非常相似的东西,除了计算
    f(x)-f(x-1)
    之外,你被要求编写一个近似于
    f'(x)
    的函数。您的用例将与第一个示例几乎相同,只是将函数命名为
    numericalderivative
    ,而不是
    fdiff



    如果不清楚,第二个示例将
    my_function2
    定义为
    x^2
    。因此,
    fdiff(my_function2,5)
    返回的值是
    5^2-4^2=9

    ,但我认为他们希望我对h求导。也就是说,我应该使用导数的定义。i、 e dxdy=@(x)f(x+h)-f(x)/h;我是否可以向函数dxdy=(3*x^2)/log(1-x)?我的意思是导数=dxdy((3*x^2)/log(1-x));我现在把它写成:函数y=数值导数(f,x)h=10。^-6;func=@(x)(3*x^2)/log(1-x);x=-3;numericalderivative=@(x,h)((x+h)-(x))/h;dxdy=数值驱动(func,x);结束但仍然不起作用,我是否习惯于很少的争论?似乎我无法格式化我的代码。很抱歉,看起来您需要向函数传递另一个参数。其余部分不是基于matlab的,只是您对数值方法的理解。特别是x(分析点)vs h(步长)。
    函数y=数值导数(f,x)h=10.^-6;func=@(x)(3*x^2)/log(1-x);x=-3;numericalderivative=@(x)((x+h)-(x))/h;dxdy=数值驱动(func,x);结束
    无法格式化代码。但这似乎不起作用,但我不明白为什么?
    function result = fdiff(f, x)
        result = f(x) - f(x-1);
    end
    
    >> my_function1 = @(x) 3*x^2 /(log(1-x));
    >> fdiff(my_function1, -3)
    ans =
      -10.3477
    
    >> my_function2 = @(x) x^2;
    >> fdiff(my_function2, 5)
    ans =
       9