Matlab调用函数

时间:2017-01-27 03:00:01

标签: matlab

所以这是我想在matlab中解决的问题,

确定变化Δx对二阶导数的计算结果的影响,函数f(x)= 5 + 10x - 4x ^ 2 + 6x ^ 3。二阶导数在x = 1处确定。使用matlab,计算x = 1时的二阶导数,其中Δx= 0.5,0.1,0.05和0.01。将获得的结果与28的确切值进行比较

由于我是Matlab的新手,这里是我想要做的步骤,

1)要求用户输入del x

2)二阶导数方程是[f(x + del x)-2f(x)+ f(x-del x)] /(del x)^ 2

3)因为x = 1,我基本上想要在二阶导数方程中调用f(x)eqn(在语句中给出)并根据del x的输入求解

我还想保留所有的sig figs,因为我们正在将28与计算值进行比较,预计为28.0000001

1 个答案:

答案 0 :(得分:2)

你的职能:

f = @(x) 5 + 10*x - 4*x.^2 + 6*x.^3;

1)要求用户输入del x

dx = input('Enter Value for del x: ')

2)二阶导数方程为[f(x+del x)-2f(x)+f(x-del x)] / (del x)^2

d2fdx2 = @(x) ( f(x + dx) - 2 * f(x) + f(x - dx) ) ./ (dx^2);

我已经包含了元素操作符(./),因此您可以输入向量。

3)自x=1以来,我基本上想在二阶导数方程中调用f(x)方程,并根据del x的输入求解。

您可以随时评估这些功能:

f(1)
% ans = 17

% When dx = 0.5,
d2fdx2(1)
% ans = 28

把这一切放在一起:

dx = input('Enter Value for del x: ')
f = @(x) 5 + 10*x - 4*x.^2 + 6*x.^3;
d2fdx2 = @(x) ( f(x + dx) - 2 * f(x) + f(x - dx) ) ./ (dx.^2);

% Long decimal expansion
format long

% Evaluate result
d2fdx2(1)

虽然给出了您的问题,但我不确定您确实需要用户输入?如果它只是您指定的值,您可以这样做:

clear;clc;

k = 1;
derivatives = zeros(4,1);

f = @(x) 5 + 10*x - 4*x.^2 + 6*x.^3;

for dx = [0.5, 0.1, 0.05, 0.01]

    d2fdx2 = @(x) ( f(x + dx) - 2 * f(x) + f(x - dx) ) ./ (dx^2);
    derivatives(k) = d2fdx2(1);
    k = k + 1;

end

% derivatives = [28.000000000000000
%                28.000000000000107
%                28.000000000000107
%                28.000000000041325]

请注意,这些方法/实现似乎在这些值上存在一些有趣的不稳定性,因为对于较小的dx,您会期望它更准确。例如,如果您从dx=0.5开始并重复一半,则答案仍为28.000...