Facebook
From Walloping Zebra, 5 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 242
  1. clear all
  2. close all
  3. clc
  4.  
  5. x=linspace(-1,1,101);
  6. y =sqrt(1-x.^2); %funkcja
  7. figure;
  8. plot(x,y(x))
  9. hold on;
  10.  
  11. xn = [-1 -0.5 0 0.5 1];
  12. y = [y(xn)];
  13.  
  14. ylgr = [];
  15. ynwt = [];
  16.  
  17. for i=1:length(x)
  18. ylgr = [ylgr lagrange_int(xn,y,x(i))];
  19. end
  20.  
  21.  
  22.  
  23.  function xv = lagrange_int(xn,yn,x)
  24. licznik = 1;
  25.  mianownik = 1;
  26.  sum = 0;
  27.   N = length(xn);
  28.      for j = 1:N
  29.          for k = 1:N
  30.              if (j~=k)
  31.                mianownik = mianownik*(xn(j)-xn(k));
  32.                  licznik = licznik*(x-xn(k));
  33.              end
  34.          end
  35.          sum = sum+yn(j)*licznik/mianownik;
  36.          licznik = 1;
  37.          mianownik = 1;
  38.      end
  39.      xv = sum;
  40.    end
  41.    
  42.    ____________________________________________________________________________________________
  43.    
  44.    clear all
  45. close all
  46. clc
  47.   % policzyć błędy bezwzględne i względne dla poszczególnych funkcji
  48.   % wyrysować błędy (w razie potrzeby zastosować skalę
  49.   % logarytmiczną w osi rzędnych)
  50.  
  51.   % efekt rungego - oscylacje na krańcach przedziału
  52. y = @(x) 1./(1+25*x.^2);
  53.  
  54.  % moduł x, brak ciągłej pochodnej
  55. y1 = @(x) abs(x);
  56.  
  57.  % nieograniczona pochodna na krańcach przedziału
  58. y2 = @(x) sqrt(1-x.^2);
  59.  
  60.   % nieróżniczkowalna dla x=0
  61. y3 = @(x) x.*exp(x);
  62. x = linspace(-1,1,100);
  63. figure;
  64. plot(x,y(x),'r')
  65. hold on;
  66.  
  67. xn = [-1 -0.5 0 0.5 1];
  68. yn = [y(xn)];
  69.  
  70. ylgr = [];
  71. ynwt = [];
  72. blad_bzwzg=0;
  73. blad_wzg=0;
  74. for i=1:length(x)
  75.       ylgr = [ylgr lagrange_int(xn,yn,x(i))];
  76. %       ynwt = [ynwt newton_int(xn,yn,x(i))];
  77. end
  78. %  plot(x,ylgr,'b',x,ynwt,'g');
  79. plot(x,ylgr,'b');
  80. % plot(x,ynwt,'g')
  81.  
  82. %blad bezwzgl
  83. figure
  84. for i=1:length(x)
  85.           blad_bzwzg=abs(ylgr-y(x))
  86. end
  87. plot(x,blad_bzwzg,'-.g');
  88.  
  89.  
  90. %blad wzgledny
  91. figure
  92. for i=1:length(x)
  93.    
  94.           blad_wzg=[abs((ylgr-y(x))./y(x))]
  95.           if y(x)==0
  96.               blad_wzg=0;
  97.           end
  98. end
  99. plot(x,blad_wzg,'r');
  100.  
  101.  
  102. %  Lagrange
  103.  
  104.  function xv = lagrange_int(xn,yn,x)
  105. licznik = 1;
  106.  mianownik = 1;
  107.  sum = 0;
  108.   N = length(xn);
  109.      for j = 1:N
  110.          for k = 1:N
  111.              if (j~=k)
  112.                mianownik = mianownik*(xn(j)-xn(k));
  113.                  licznik = licznik*(x-xn(k));
  114.              end
  115.          end
  116.          sum = sum+yn(j)*licznik/mianownik;
  117.          licznik = 1;
  118.          mianownik = 1;
  119.      end
  120.      xv = sum;
  121.    end
  122.  
  123. % Newton
  124. %    function xv = newton_int(xn,yn,x)
  125. %        xes = 1;
  126. %        suma = yn(1);
  127. %        N = length(xn);
  128. %  
  129. %        for j=1:N-1
  130. %            ynew = [];
  131. %            xes = xes*(x-xn(j));
  132. %           for i=1:N-j
  133. %               ynew=[ynew(yn(i+1)-yn(i))/(xn(i+j)-xn(i))];
  134. %           end
  135. %           yn = ynew;
  136. %           suma = suma+ynew(1)*xes;
  137. %       end
  138. %       xv = suma;
  139. %    end
  140.  
  141. -------------------------------------------------------------------------------------------------------
  142.    clear all
  143.    clc
  144.    
  145.    % policzyć błędy bezwzględne i względne dla poszczególnych funkcji
  146.    % wyrysować błędy (w razie potrzeby zastosować skalę
  147.    % logarytmiczną w osi rzędnych)
  148.    
  149.    % efekt rungego - oscylacje na krańcach przedziału
  150.    y = @(x) 1./(1+25*x.^2);
  151.    
  152.   % moduł x, brak ciągłej pochodnej
  153.   %y = @(x) abs(x);
  154.  
  155.   % nieograniczona pochodna na krańcach przedziału
  156.   %y = @(x) sqrt(1-x.^2);
  157.  
  158.   % nieróżniczkowalna dla x=0
  159.   %y = @(x) x.*exp(x);
  160.  
  161.  
  162.   x = linspace(-1,1,100);
  163.  
  164.   figure(1);
  165.   plot(x,y(x),'r')
  166.   grid on
  167.  
  168.   hold on;
  169.  
  170.   xn = [-1 -0.5 0 0.5 1];
  171.   yn = [y(xn)];
  172.  
  173.   ylgr = [];
  174.   ynwt = [];
  175.   for j=1:length(x)
  176.       ylgr = [ylgr lagrange_int(xn,yn,x(j))];
  177.      % ynwt = [ynwt newton_int(xn,yn,x(j))];
  178.   end
  179.  
  180.   %figure()
  181.  % plot(x,ylgr,'b',x,ynwt,'g');
  182.    plot(x,ylgr,'black',x,y(x),'red');
  183.    title('Funkcja interpolujaca(czarna) i interpolowana(czerwona)')
  184.    grid on
  185.    hold off
  186.    
  187.    blad_b = 0;
  188.    blad_w = 0;
  189.    
  190.   %%blad bezwzgledny
  191.   figure(3)
  192.  
  193.   for j=1:length(x)
  194.      
  195.       blad_b = abs(ylgr - y(x));
  196.      
  197.   end
  198.   plot(x,blad_b,'black');
  199.   title('Blad bezwzgledny')
  200.   grid on
  201.  
  202.   %%blad wzgledny
  203.   figure(4)
  204.  
  205.   for j=1:length(x)
  206.      
  207.       if y(x) == 0 % zabezpieczam przed dzieleniem przez 0      
  208.       blad_w = 0 % wartosc dla zachowania ciaglosci przebiegu
  209.       %(chociaz matlab chyba sam przyjmuje wtedy f(x)=0)
  210.       else
  211.       blad_w = (abs(ylgr - y(x))./y(x));
  212.       end
  213.   end
  214.   plot(x,blad_w,'black');
  215.   title('Blad wzgledny')
  216.   grid on
  217.  
  218.   %%funkcje
  219.  
  220.     function xv = lagrange_int(xn,yn,x)
  221.      licznik = 1;
  222.      mianownik = 1;
  223.      sum = 0;
  224.      N = length(xn);
  225.      for j = 1:N,
  226.          for k = 1:N,
  227.              if (j~=k)                              
  228.                  licznik = licznik * (x-xn(k));
  229.                  mianownik = mianownik * (xn(j)-xn(k));        
  230.             end
  231.          end
  232.          sum = sum + yn(j) * (licznik/mianownik);
  233.          licznik = 1;
  234.          mianownik = 1;
  235.      end
  236.      xv = sum;
  237.   end
  238.  
  239.  
  240. %    function xv = newton_int(xn,yn,x)
  241. %        xes = ...;
  242. %       suma = yn(1);
  243. %       N = length(xn);
  244. %  
  245. %        for j=1:N-1,
  246. %           ynew = [];
  247. %            xes = ...;
  248. %           for i=1:N-j,
  249. %               ynew=[...];
  250. %           end
  251. %           yn = ...;
  252. %           suma = ...;
  253. %       end
  254. %       xv = suma;
  255. %    end
  256.  
  257.  --------------------------------------------------------------------
  258.