'Assignment between unlike types is not allowed'
Afficher commentaires plus anciens
This is a code i am trying to write for cubic spline interpolation between 4 points...I want to eventually form and plot the three cubic polynomials, but I am getting the error of ' Assignment between unlike types is not allowed' in line 30 i.e when I am defining S(k) in the last for loop. What is going wrong? Would somebody comment? A, B, C are arrays of the coefficients for the 3 polynomials.
syms x X Y
X = [0 1 2 3]
Y = [0 0.5 2 1.5]
n = length(X)
A = sym('A', [1 n]);
B = sym('B', [1 n-1]);
C = sym('C', [1 n-1]);
H = [];
for i = 1:n-1
H(i) = X(i+1) - X(i);
end
for k = 1:n-2
eqns(k) = H(k)*A(k) + 2*(H(k)+H(k+1))*A(k+1) + H(k+1)*A(k+2) == (Y(k+2)-Y(k+1))/H(k+1)-(Y(k+1)-Y(k))/H(k);
end
%for natural spline
eqns(n-1) = A(1)==0;
eqns(n) = A(n)==0 ;
eqns
S = solve(eqns)
A(1) = S.A1;
A(2) = S.A2; A(3) = S.A3; A(4) = S.A4
for k = 1:n-1
B(k) = Y(k)/H(k) - A(k)*H(k);
C(k) = Y(k+1)/H(k) - A(k+1)*H(k);
end
B
C
hold on
for k = 1:n-1
S(x) = A(k)*(X(k+1)-x)^3/H(k) + A(k+1)*(x-X(k))^3/H(k) + B(k)*(X(k+1)- x) + C(k)*(x - X(k))
fplot(S(x), [X(k) X(k+1)])
end
hold off
Réponses (1)
Sahithi Kanumarlapudi
le 24 Fév 2021
0 votes
Hi,
In your code 'S' is a struct with 4 fileds and 'A(k)*(X(k+1)-x)^3/H(k) + A(k+1)*(x-X(k))^3/H(k) + B(k)*(X(k+1)- x) + C(k)*(x - X(k))' is a symbolic expression. You may assign the expression to another filed of S but not to S(x) as 'S' is struct.
Hopen this helps!
Catégories
En savoir plus sur Splines dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!