Advertisement
Guest User

Untitled

a guest
Oct 5th, 2018
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scilab 3.18 KB | None | 0 0
  1. //Феномен Рунге
  2. function y=my_func(x)
  3. y = 1./(1 + x.^2)
  4. endfunction
  5.  
  6. function y=newton_method(xCount, x, xInterpolCount, Xn, Yn)
  7. //заполняем нулями и высчитываем диагональ
  8.     for i=1:xInterpolCount
  9.         for j=1:xInterpolCount
  10.             if i==j then
  11.                 M(i,j) = Yn(i);
  12.             else
  13.                 M(i,j) = 0;
  14.             end;
  15.         end;
  16.     end;
  17.  
  18. //высчитываем разделённые разности
  19.     for i=1:+1:xInterpolCount-1
  20.         for j=1:xInterpolCount-i
  21.             M(j,j+i)=(M(j+1,j+i) - M(j,j+i-1)) / (Xn(j+i)-Xn(j));
  22.         end
  23.     end;
  24.  
  25.     for i = 1:xCount
  26.         y(i) = Yn(1);
  27.         if (xInterpolCount > 1)
  28.         then
  29.         p=1;
  30.             for u=2:+1:xInterpolCount
  31.                 p = p*(x(i) - Xn(u-1));
  32.                 y(i) = y(i) + (M(1,u)*p);
  33.             end
  34.         end
  35.     end
  36. endfunction
  37.  
  38. function p=PolyLagr(m,n,x,xt,ft)
  39.     // m кол-во Х  n- кол-во узлов
  40.     //x-наши задаваемые Х     xt-узлы
  41.     // ft - знач в узлах
  42.     for k=1:m
  43.         sum=0
  44.         for i=1:n
  45.             w(i)=1
  46.             for j=1:n
  47.                 if (j ~= i)
  48.             w (i) =w(i) * (x (k) - xt (j)) / (xt (i) - xt (j));
  49.                 end
  50.             end
  51.         sum = sum + ft(i) * w(i);
  52.     end
  53.     p(k) =sum;
  54.     end
  55. endfunction
  56.  
  57. function RP=RealP(n,f,f1)
  58.     // f-данная функция   f1- интерполяц. полином
  59.     for i=1:n
  60.     RP(i)= abs(f(i)-f1(i))
  61.     end
  62. endfunction
  63.  
  64. // M- максимум в 10 производной
  65. function Pr=Proizv(x,n) //n - степень
  66.    
  67.    i=0
  68.    for  j=1:2:n //четные
  69.        d1(j)=%i*((-1)^(j+i))*(factorial (j-1)./(1+%i*x)^(j+1)
  70.        d2(j)=%i*((-1)^(j+i+1))*(factorial (j-1)./(1-%i*x)^(j+1)
  71.        i=i+1
  72.    end
  73.    c=0
  74.    for
  75.        j=2:2:n //нечетное
  76.        d1(j)=((-1)^(j+c))*(factorial (j-1)./(1+%i*x)^(j+1)
  77.        d2(j)=((-1)^(j+c+1))*(factorial (j-1)./(1-%i*x)^(j+1)
  78.        
  79.      c=c+1
  80.    end
  81.    for i=1:n
  82.    Pr(i)=0.5*d1(i)+0.5*d2(i)
  83.    end
  84. endfunction
  85.    
  86. function ()
  87.     i=1:
  88.     endfunction
  89.    
  90.  
  91. xCount = 100;
  92. xInterpolCount = 10;
  93. a = -5;
  94. b = 5;
  95. h1 = (b-a)/(xCount - 1); //шаг для иксов функции
  96. h2 = (b-a)/(xInterpolCount - 1); //шаг для узлов функции
  97.  
  98. x1 = [a:h1:b]; //иксы функции
  99. x2 = [a:h2:b]; //узлы интерполяции
  100.  
  101. f1 = my_func(x1); //функция в иксах
  102. F1 = my_func(x2); //функция в узловых точках
  103. fN = newton_method(xCount, x1, xInterpolCount, x2, F1);//полином Ньютона
  104. fL=PolyLagr(xCount,xInterpolCount,x1,x2,F1)
  105. RealN=RealP(xCount,f1,fN)
  106. RealL=RealP(xCount,f1,fL)
  107. subplot(3,4,1)
  108. plot(x1,f1,"r",x1,fN,"b");
  109. xtitle('кр.-исходная функция, Син.-Ньютон')
  110.  
  111. subplot(3,4,2)
  112. plot(x1,f1,"r",x1,fL,"g");
  113. xtitle('кр.-исходная функция, зел.-Лагранж')
  114.  
  115. subplot(3,4,3)
  116. plot(x1,RealN,"g");
  117. xtitle('реал. погр. пол.Ньютона')
  118.  
  119. subplot(3,4,4)
  120. plot(x1,RealL,'r');
  121. xtitle('реал. погр. пол.Лагранжа')
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement