Error: Matrix dimensions must agree.

1 回表示 (過去 30 日間)
Kutlu Yigitturk
Kutlu Yigitturk 2020 年 12 月 26 日
コメント済み: Cris LaPierre 2020 年 12 月 26 日
% dening data points, vectors X and Y
X_VALUES=[0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5];
Y_VALUES=[0 0.247466462 0.881373587 1.550157957 2.094712547 2.532068064 2.893443986 3.200334942 3.466711038 3.70191108 3.912422766];
% dening x in range 0 to 5 with total 100 values
x = linspace(0,5,100);
ls = lagrange_self(X_VALUES,Y_VALUES,x);
sp = spline(X_VALUES,Y_VALUES,x);
plot(X_VALUES,Y_VALUES,'O',x,ls,'.',x,sp,'-')
title("Interpolating curves");
legend('Original','Cubic Polynomial Lagrange interpolating','Cubic Spline Interpolation')
% Calculate total error
% error for polynomal interpolation
ls = lagrange_self(X_VALUES,Y_VALUES,x);
% error
I get the 'Matrix dimensions must agree.' error on line 16
sp = sum(sqrt((Y_VALUES-ls).^2));
% displaying difference
fprintf("Total error for Cubic Spline Interpolation is %f\n",sp);
% error
s_cubic = sum(sqrt((Y_VALUES-y_cubic).^2));
% displaying difference
fprintf("Total error for Cubic Polynomial Lagrange interpolating is %f\n",s_cubic);
function v = lagrange_self(x,y,u)
n = 4;
v = zeros(size(u));
for k = 1:n
w = ones(size(u));
for j = [1:k-1 k+1:n]
w = (u-x(j))./(x(k)-x(j)).*w;
end
v = v+w*y(k)
end
end
Thank you in advance for your help

採用された回答

Cris LaPierre
Cris LaPierre 2020 年 12 月 26 日
編集済み: Cris LaPierre 2020 年 12 月 26 日
Y_VALUES is a 1x11 matrix while ls is 1x100. In order to subtract them, they must either both have the same size, or one must be a scalar (single number). Because they are not, MATLAB can't subtract them, and you get this error message.
The simplest fix is create to have the same number of points as Y_VALUES.
x = linspace(0,5,length(Y_VALUES));
  2 件のコメント
Kutlu Yigitturk
Kutlu Yigitturk 2020 年 12 月 26 日
Things to do is indicated as follows.
  • Use Lagrange interpolating polynomial method and cubic spline interpolation to evaluate the function f(x) at 100 equally spaced points in the interval [0,5]. Use cubic polynomial for Lagrange’s method as well. The points to be used in interpolations should include first and last point (0 and 5), other two points should be chosen such that those points would represent significant change in f(x). Show the plots for Lagrange’s method, cubic spline and the given data in one graph. Discuss which method is better.
  • Calculate the total error for both methods by using the following formula. Here yi is the given y value for xi , and f(xi) is the value of the interpolating function at point xi.
So I cannot apply a solution like you explained. I must use ''x = linspace(0,5,100);'' like this. I would appreciate if there is any other solution you can suggest.
Cris LaPierre
Cris LaPierre 2020 年 12 月 26 日
It looks like you don't compute the error using every point. Just the points that correspond to .

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeSplines についてさらに検索

製品


リリース

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by