计算数字导数

时间:2017-11-18 22:11:33

标签: matlab derivative

所以我对如何构建我的问题感到有些困惑。

所以赋值如下:

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

时计算 f'( - 3)

在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中运行程序,那么使用句柄是否会使它变得多余?

3 个答案:

答案 0 :(得分:1)

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

考虑以下问题

  

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

     
      
  1. 函数句柄表示的函数f,它接受​​一个参数,
  2.   
  3. 和点x,可以假设在f的域中。
  4.         

    fdiff,使其返回值f(x) - f(x-1)

解决方案(将在名为fdiff.m的文件中)

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

您使用fdiff创建的内容是一个将另一个函数作为输入的函数。正如您所看到的,它不仅适用于3*x^2 /(log(1-x)),而且适用于您要定义的任何函数。

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

注意

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

答案 1 :(得分:0)

当你把它作为一个函数文件并在MATLAB中运行时没有任何输入参数,即' f'和' x',它会给你错误:'没有足够的输入参数'。为了运行文件,你必须输入类似数字衍生(3x ^ 2 /(ln(1-x)),5)的东西,它给出x = 5处的数值导数的值。

答案 2 :(得分:0)

函数和MATLAB函数文件是DRY编程方法的简单实现。您被要求创建一个带有句柄和x文件的函数,然后返回该函数句柄的衍生物和该x值。函数文件的要点是能够使用多个函数句柄或多个x值重用您的函数。这很有用,因为它只涉及将函数句柄和数值传递给函数。

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

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

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