Matlab简单循环用于不同的函数变量

时间:2017-03-08 10:50:01

标签: matlab

我写了一个简单的MatLab脚本来评估特定函数的一阶和二阶导数的forwardbackwardcentral差分近似值

(y = x^3-5x)

有两个不同的x

(x=0.5 and x = 1.5)

和7种不同的步长h,并将近似值与分析导数的相对误差进行比较。

但是,我每次都需要手动输入xh值。问题是,如何为7个不同的h值和2个不同的x值创建循环并将所有结果作为矩阵?

clc
clear all
close all

h = 0.00001;
x1 = 0.5;

y = @(x) x.^3 - 5*x;
dy = @(x) 3*x.^2 - 5;
ddy = @(x) 6*x;
d1 = dy(x1);
d2 = ddy(x1);

%Forward Differencing

f1 = (y(x1+h) - y(x1))/h;
f2 = (y(x1+2*h) - 2*y(x1+h) + y(x1))/(h.^2);

%Central Differencing

c1 = (y(x1+h)-y(x1-h))/(2*h);
c2 = (y(x1+h)-2*y(x1)+y(x1-h))/(h.^2);

% Backward Differencing

b1 = (y(x1) - y(x1-h))/h;
b2 = (y(x1)-2*y(x1-h)+y(x1-2*h))/(h.^2);

% Relative Errors

ForwardError1 = (f1 - dy(x1))/dy(x1);
ForwardError2 = (f2 - ddy(x1))/ddy(x1);

CentralError1 = (c1 - dy(x1))/dy(x1);
CentralError2 = (c2 - ddy(x1))/ddy(x1);

BackwardError1 = (b1 - dy(x1))/dy(x1);
BackwardError2 = (b2 - ddy(x1))/ddy(x1);

1 个答案:

答案 0 :(得分:1)

你不需要循环。您可以使用meshgrid创建参数的所有组合(在您的案例中为xh),并将其用作函数的输入。

要获得x = [0.5, 1.5]h=0.00001:0.00001:0.00007的组合(我假设您没有在问题中指定h值),您可以这样做:

[x, h] = meshgrid([0.5, 1.5], 0.00001:0.00001:0.00007);
y = @(x) x.^3 - 5*x;
f1 = (y(x1+h) - y(x1))./h;

此处x,h是大小为7x2的矩阵,结果f1也是如此。请注意,/已更改为./,因为h是一个矩阵,我们需要按元素操作。