我正在尝试使用MATLAB函数spline
,
在等距点xi = i./n
,i = 0,1,...,n
和n = 2^j
,j = 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,有人可以帮忙吗?
答案 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
)是最后一个参数。