Advertisement
JOHNSKOUN

fullmegalopp

Jan 4th, 2021
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.13 KB | None | 0 0
  1. %Παρακάτω ορίζεται συνάρτηση που δημιουργεί φυσική spline με δεδομένα
  2. %τα σημεία (x,y) σε μορφή πινάκων-γραμμή. Τα σημεία χ πρέπει να ισαπέχουν.
  3. %Η συνάρτηση επιστρέφει τις τιμές s της spline στα σημεία t (σε μορφή πινάκων)
  4. function [t,s]=NaturalSpline(x,y)
  5.  
  6. n=size(x,2); %όπου n ο αριθμός των σημείων Χ
  7. h=abs(x(1)-x(2)); %υπολογίζεται το ισοδιάστημα h ως η διαφορά δύο διαδοχικών σημείων
  8.  
  9. a1=ones(n,1)-[zeros(n-2,1);1;1]; %κατασκευάζονται οι 3 στήλες που θα αποτελέσουν
  10. a2=4*ones(n,1)-3*[1;zeros(n-2,1);1]; %τις διαγώνιες του Α. Ο Α για κάθε n δίνεται
  11. a3=ones(n,1)-[1;1;zeros(n-2,1)]; %από τη θεωρία των φυσικών spline.
  12.  
  13. A=spdiags([a1 a2 a3],[-1,0,1],n,n); %κατασκευάζεται ο τριδιαγώνιος πίνακας του συστήματος
  14. %για τους συντελεστές d(i) της spline χρησιμοποιώντας την εντολή spdiags για να
  15. %αξιοποιήσουμε την τριδιαγώνια αραιή μορφή του Α.
  16.  
  17. for ii=1:n-2
  18.  
  19. b1(ii,1)=(6/(h^2))*(y(ii)-2*y(ii+1)+y(ii+2));
  20. endfor
  21. b=[0; b1; 0]; %ορίζεται ο κάθετος πίνακας b του δεξιού μέλους του συστήματος, βάσει θεωρίας
  22.  
  23. d=A\b; %επιλύεται το σύστημα
  24.  
  25. %Τέλος, χρησιμοποιούνται οι συντελεστές d(i) που υπολογίστηκαν (πίνακας d) για τον
  26. %υπολογισμό της spline στα σημεία t (20 σημεία ανά υποδιάστημα)
  27. t=linspace(x(1),x(n),20*(n-1));
  28. for ii=1:n-1
  29. for jj=1:20
  30. s(20*(ii-1)+jj)=(d(ii)/(6*h))*(x(ii+1)-t(20*(ii-1)+jj))^3+(d(ii+1)/(6*h))*(t(20*(ii-1)+jj)-x(ii))^3+((y(ii+1)/h)-((d(ii+1)*h)/6))*(t(20*(ii-1)+jj)-x(ii))+((y(ii)/h)-((d(ii)*h)/6))*(x(ii+1)-t(20*(ii-1)+jj));
  31. endfor
  32.  
  33. endfor
  34.  
  35.  
  36. endfunction
  37.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement