首页 文章

三次样条插值函数

提问于
浏览
1

我试图使用MATLAB函数 spline 插入以下函数,

enter image description here

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

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

以下是代码,

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)))./(120 . *(xi . ^ 2));

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

1 回答

  • 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 )是最后一个参数 .

相关问题