Guest User

Untitled

a guest
May 20th, 2018
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.70 KB | None | 0 0
  1. pkg load symbolic;
  2.  
  3. close all;
  4. clc;
  5. clear;
  6.  
  7. F='1000./(x.^2-9*x+68)'
  8. f = inline(F);
  9.  
  10. epsilon = 0.0005
  11.  
  12. LeftLimit = -2
  13. RightLimit = 7;
  14.  
  15.  
  16. XX = linspace(LeftLimit, RightLimit, (RightLimit - LeftLimit)*100);
  17.  
  18. A = 5;
  19.  
  20. qwertyu = 0;
  21. % точки Чебышева n + 2
  22. H = 0 : (A + 2 - 1);
  23. X = 0.5*((LeftLimit-RightLimit)*cos((2*H + 1)/(A + 2)*0.5*pi) + LeftLimit + RightLimit);
  24. while (1)
  25. % Формирование матрицы коэффициентов
  26. koef=[];
  27. one = ones(1, A + 2)*(-1);
  28. for i = 1 : (A + 1)
  29. koef(:, i) = X.^(i - 1);
  30. one(i) = one(i).^(i - 1);
  31. endfor
  32. one(A + 2) = one (A + 2).^(A + 1);
  33. koef(:, A + 2) = one;
  34. %***********
  35. leftexpr_1 = f(X);
  36. leftexpr = leftexpr_1';
  37. anser = koef\leftexpr;
  38. qwertyu = qwertyu + 1;
  39. Qn = anser(1 : (A + 1)); % Коэффициенты многочлена
  40. NewVar = Qn(end: -1:1);
  41.  
  42. sigma = anser(A + 2);
  43. % поиск точки глобального максимума
  44. [maxim, indx] = max(abs(f(XX) - polyval(NewVar,XX)));
  45. % Графики
  46. figure(qwertyu);
  47. grid on;
  48. hold on;
  49. plot(XX, polyval(NewVar,XX), 'b');
  50. plot(XX, f(XX), 'r');
  51. legend('polynom', 'function');
  52. plot(X, polyval(NewVar,X), 'ko');
  53. hold off;
  54.  
  55.  
  56. [leftborder, rightborder] = FNVSV(X, XX(indx));
  57. if leftborder == 0
  58. usl = (polyval(NewVar,X(1)) - f(X(1)))*(polyval(NewVar,XX(indx)) - f(XX(indx)));
  59. if usl > 0
  60. pointChang = 1;
  61. else
  62. pointChang = 0;
  63. endif
  64. else
  65. usl = (polyval(NewVar,X(leftborder)) - f(X(leftborder)))*(polyval(NewVar,XX(indx)) - f(XX(indx)));
  66. if usl > 0
  67. pointChang = leftborder;
  68. else
  69. pointChang = rightborder;
  70. endif
  71. endif
  72.  
  73.  
  74. if ((pointChang >= 1) && (pointChang <= length(X)))
  75. X(pointChang) = XX(indx);
  76. elseif pointChang > length(X)
  77. for i = 1 : length(X) - 1
  78. X(i) = X(i + 1);
  79. endfor
  80. X(length(X)) = XX(indx);
  81. pointChang = length(X);
  82. elseif pointChang < 1
  83. for i = length(X) : -1 : 2
  84. X(i) = X(i - 1);
  85. endfor
  86. X(1) = XX(indx);
  87. pointChang = 1;
  88. endif
  89.  
  90. h = abs(f(X(pointChang)) - polyval(NewVar,X(pointChang)));
  91. h - abs(sigma)
  92. if epsilon > (h - abs(sigma))
  93. break;
  94. endif
  95. endwhile
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104. function [out1 out2] = FNVSV(vector, x)
  105. out2 = 0;
  106. if vector(1) >= x
  107. out1 = 0;
  108. out2 = 1;
  109. return;
  110. endif
  111.  
  112. for i = 2 : length(vector)
  113. if vector(i) >= x
  114. out1 = i - 1;
  115. out2 = i;
  116. break;
  117. endif
  118. endfor
  119.  
  120. if out2 == 0
  121. out1 = length(vector);
  122. out2 = length(vector) + 1;
  123. endif
Add Comment
Please, Sign In to add comment