Advertisement
Guest User

Untitled

a guest
Apr 20th, 2014
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 4.57 KB | None | 0 0
  1.   //степень многочлена:
  2.  // d=2,3,4,5,6,7,8
  3.  
  4.   //количество точек:
  5.   //n=d+1
  6.  
  7.  
  8.   a=-4 //левая граница
  9.   b=5 //правая
  10. x10=a: 9/9 :b // делаем иксы с 3, 4, 5... точками
  11. x9=a: 9/8 :b
  12. x8=a: 9/7 :b
  13. x7=a: 9/6 :b
  14. x6=a: 9/5 :b
  15. x5=a: 9/4 :b
  16. x4=a: 9/3 :b
  17. x3=a: 9/2 :b
  18.  
  19. y3=(2000./(x3.^2-9.*x3+96)) //получаем от этих точек у
  20. y4=(2000./(x4.^2-9.*x4+96))
  21. y5=(2000./(x5.^2-9.*x5+96))
  22. y6=(2000./(x6.^2-9.*x6+96))
  23. y7=(2000./(x7.^2-9.*x7+96))
  24. y8=(2000./(x8.^2-9.*x8+96))
  25. y9=(2000./(x9.^2-9.*x9+96))
  26. y10=(2000./(x10.^2-9.*x10+96))
  27.  
  28. //теперь зная хi yi - это как бы измерения, которые мы сняли
  29. // и типо мы не знаем начальную формулу
  30. // ее нужно приближенно восстановить методом наим. квадратов (м.н.к.)
  31.  
  32. //названия переменных я даю по такому принципу:
  33. //p(степень)(количество точек) , где количество точек = степень:n
  34.  
  35.  p23= polyfit(x3,y3,2) //находим корни полинома второй степени Р через м.н.к.
  36.  p24= polyfit(x4,y4,2) //для каждого 3,4,5... точек. то есть d=2, n1=d+1=3, n2=d+2=4 ...
  37.  p25= polyfit(x5,y5,2) //степень полинома оставляем пока =2
  38.  p26= polyfit(x6,y6,2)
  39.  p27= polyfit(x7,y7,2)
  40.  p28= polyfit(x8,y8,2) //тут можно продолжить: х9, х10 ит.д., но:
  41.  //обрати внимание, что если брать много точек сам октав выкинет предупреждение, мол
  42.  //слишком многа точек, результат плохой будет
  43.  
  44.  //Это мы нашли только корни полинома Р(d,n)  теперь осталось из него получить Р(х) я его называю f:
  45. // делается это как то так:
  46.  
  47.  f23=p23(1).*x3.^2+p23(2).*x3+p23(3)  //первый коэф*иксы^2 + 2 коэф*иксы +3 коэф.
  48.  f24=p24(1).*x4.^2+p24(2).*x4+p24(3) //тут квадрат, потому что многочлен второй степени
  49.  f25=p25(1).*x5.^2+p25(2).*x5+p25(3) //Соответсвенно далее будет ^3 + ^2+ ^1 +^0 степени иксов
  50.  f26=p26(1).*x6.^2+p26(2).*x6+p26(3)
  51.  f27=p27(1).*x7.^2+p27(2).*x7+p27(3)
  52.  f28=p28(1).*x8.^2+p28(2).*x8+p28(3)
  53.  //Получили. Отлично, теперь осталось посчитать тету (погрешность):
  54.  
  55. teta23=max(abs(y3-f23)) //находим максимальный модуль разности
  56. teta24=max(abs(y4-f24))
  57. teta25=max(abs(y5-f25))
  58. teta26=max(abs(y6-f26))
  59. teta27=max(abs(y7-f27))
  60. teta28=max(abs(y8-f28)) //из них находим маименьшую погрешность. (глазками)
  61. // Это количество иксов и выносим в отчет, говорим что при таком то кол-ве точек
  62. //получается многочлен наилучшего приближения Рdn
  63. //Выписываем минимальную тету
  64. //выводим график разности:
  65. plot(xn, teta2n)
  66. //и... график зависимости погрешности от кол-ва точек.
  67. //если количество точек сделать легко - создаем массив от 3х и до нужного кол-ва (пока утт максимум - 8)
  68. for i=3:8
  69. a(i)=i
  70. end
  71. //и теперь тету надо собрать в один массив, поэтому ящитаю что нужно немного переписать
  72. //тету - что бы это был массив :)
  73. //ну и вывести:
  74. plot(a, teta)
  75.  
  76. //повторить для d=3 (количество точек будет от 4-х и более
  77. //повторить для d=4 (количество точек будет от 5-х и более
  78. //и т.д. до d=8 (по заданию) ололо
  79. //Главный минус всего вышенаписанного - все вручную прописывается, проверка теты идет глазами.
  80. //Надо бы так все это переписать, что бы можно было указывать только d и начальное кол-во точек
  81. //а октав уже сам бы считал до тех пор, пока размер теты(i) будет больше теты(1)
  82. //Вроде так
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement