Advertisement
Guest User

Untitled

a guest
May 6th, 2015
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. clear all;
  2. close all;
  3. clc;
  4.  
  5. opt = input('Optiune: 1 = primul set; 2 = al doilea set; ');
  6. if opt == 1
  7. xi=[-1 -0.96 -0.86 -0.79 0.22 0.5 0.93];
  8. yi=[-1 -0.151 0.894 0.986 0.895 0.5 -0.306];
  9. heval = 0.05;
  10. ni = 7;
  11. else
  12. xi = [3 5.4 8.8 12.2 14 17.8 20.6 21.3 23.6 26];
  13. yi = [1540 1535 1530 1525 1520 1515 1510 1505 1500 1495];
  14. ni = 10;
  15. heval = 0.5;
  16. end
  17.  
  18. xe = (xi(1):heval:xi(ni))';
  19. npev = length(xe);
  20. if (xe(npev) < xi(ni))
  21. npev = npev+1;
  22. xe = [xe; xi(ni)];
  23. end
  24. npev
  25. mg = input('Introdu gradul polinomului de interpolare 1<=mg<=ni-1: ');
  26. ye = zeros(npev,1);
  27. for ip = 1:npev
  28. ye(ip) = INTPL(ni,xi,yi,mg,xe(ip));
  29. fprintf('xe(%g)=%g ye(%g)=%g; \n',ip,xe(ip),ip,ye(ip));
  30. end
  31. if opt == 1
  32. plot(xi, yi, 'or', xe, ye, '-b');
  33. grid on;
  34. else
  35. p = polyfit(xi, yi, 1);
  36. ye = polyval(p, xe);
  37. plot(xi, yi, 'or', xe, ye, '-b');
  38. grid on;
  39. end
  40.  
  41.  
  42. function ye = INTPL(ni,xi,yi,mg,xe)
  43. i=1;
  44. while ((i<=ni) && (xe>xi(i)))
  45. i = i+1;
  46. end
  47. Indmax = fix(i+mg/2);
  48. if (Indmax <= mg)
  49. Indmax = mg+i;
  50. end
  51. if (Indmax > ni)
  52. Indmax = ni;
  53. end
  54. Indmin = Indmax-mg;
  55. a=1;
  56. for i = Indmin:Indmax
  57. if (xe == xi(i))
  58. ye = yi(i);
  59. return;
  60. end
  61. a = a*(xe-xi(i));
  62. end
  63. ye=0;
  64. for i = Indmin:Indmax
  65. PL = yi(i)*a/(xe-xi(i));
  66. for j = Indmin:Indmax
  67. if (i ~= j)
  68. PL = PL/(xi(i)-xi(j));
  69. end
  70. end
  71. ye = ye+PL;
  72. end
  73. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement