所以我对如何构建我的问题感到有些困惑。
所以赋值如下:
键入执行数字推导的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中运行程序,那么使用句柄是否会使它变得多余?
答案 0 :(得分:1)
我不会给你作业的答案,但也许一个更简单的例子会有所帮助。
考虑以下问题
编写一个名为
fdiff
的函数,它接受以下两个参数:
- 由函数句柄表示的函数
f
,它接受一个参数,- 和点
醇>x
,可以假设在f
的域中。写
fdiff
,使其返回值f(x) - f(x-1)
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 工作。