Azzera filtri
Azzera filtri

'Assignment between unlike types is not allowed'

4 visualizzazioni (ultimi 30 giorni)
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);
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);
%for natural spline
eqns(n-1) = A(1)==0;
eqns(n) = A(n)==0 ;
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);
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)])
hold off

Risposte (1)

Sahithi Kanumarlapudi
Sahithi Kanumarlapudi il 24 Feb 2021
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!


Scopri di più su Interpolation in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by