三次样条插值函数

时间:2013-10-08 20:40:03

标签: matlab interpolation

我正在尝试使用MATLAB函数spline

插入以下函数

enter image description here

在等距点xi = i./ni = 0,1,...,nn = 2^jj = 4,5,...,14

对于每次计算,我会记录点x = 0:0.001:1的最大误差,并使用n图对loglog绘制这些错误。

以下是代码,

index=1

for j = 4:1:14;
    n = 2^j;
    i = 0:1:n;
    xi = i./n;
    yi = ((exp(3*xi))*sin(200.*(xi.^2))) ./(1+20.*(xi.^2));
    x = 0:.001:1;
    ye = ((exp(3*x))*sin(200*x.^2)) ./(1+20*x.^2);
    yp = spline(x,xi,yi);
    err = ye - yp;
    merr(index) = max(err);
    index = index+1;
end

n1 = 10:10:170;
loglog(n1, merr,'.')
xlabel('n');
ylabel('errors');
title('Cubic Splines');

但是当我运行代码时,我收到以下错误:

  

使用*内部矩阵尺寸时出错必须同意。

     

(第9行)中的错误yi =((exp(3 * xi)) sin(200。(xi。^ 2)))   ./(1 + 20 *(XI ^ 2));

我刚刚开始学习MatLab,有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您希望element-wise multiplication.*)代码的以下部分:

yi = ((exp(3*xi))*sin(200.*(xi.^2))) ./(1+20.*(xi.^2));

应该是

yi = ((exp(3*xi)).*sin(200.*(xi.^2))) ./(1+20.*(xi.^2));

计算ye时会出现同样的问题。

当你使用mtimes*)时,MATLAB会尝试进行矩阵乘法,在你的情况下(1乘n乘1)是无效的。

然后您将遇到spline命令的问题。将其更改为yp = spline(xi,yi,x);,以便您想要插入的值(x)是最后一个参数。