Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //степень многочлена:
- // d=2,3,4,5,6,7,8
- //количество точек:
- //n=d+1
- a=-4 //левая граница
- b=5 //правая
- x10=a: 9/9 :b // делаем иксы с 3, 4, 5... точками
- x9=a: 9/8 :b
- x8=a: 9/7 :b
- x7=a: 9/6 :b
- x6=a: 9/5 :b
- x5=a: 9/4 :b
- x4=a: 9/3 :b
- x3=a: 9/2 :b
- y3=(2000./(x3.^2-9.*x3+96)) //получаем от этих точек у
- y4=(2000./(x4.^2-9.*x4+96))
- y5=(2000./(x5.^2-9.*x5+96))
- y6=(2000./(x6.^2-9.*x6+96))
- y7=(2000./(x7.^2-9.*x7+96))
- y8=(2000./(x8.^2-9.*x8+96))
- y9=(2000./(x9.^2-9.*x9+96))
- y10=(2000./(x10.^2-9.*x10+96))
- //теперь зная хi yi - это как бы измерения, которые мы сняли
- // и типо мы не знаем начальную формулу
- // ее нужно приближенно восстановить методом наим. квадратов (м.н.к.)
- //названия переменных я даю по такому принципу:
- //p(степень)(количество точек) , где количество точек = степень:n
- p23= polyfit(x3,y3,2) //находим корни полинома второй степени Р через м.н.к.
- p24= polyfit(x4,y4,2) //для каждого 3,4,5... точек. то есть d=2, n1=d+1=3, n2=d+2=4 ...
- p25= polyfit(x5,y5,2) //степень полинома оставляем пока =2
- p26= polyfit(x6,y6,2)
- p27= polyfit(x7,y7,2)
- p28= polyfit(x8,y8,2) //тут можно продолжить: х9, х10 ит.д., но:
- //обрати внимание, что если брать много точек сам октав выкинет предупреждение, мол
- //слишком многа точек, результат плохой будет
- //Это мы нашли только корни полинома Р(d,n) теперь осталось из него получить Р(х) я его называю f:
- // делается это как то так:
- f23=p23(1).*x3.^2+p23(2).*x3+p23(3) //первый коэф*иксы^2 + 2 коэф*иксы +3 коэф.
- f24=p24(1).*x4.^2+p24(2).*x4+p24(3) //тут квадрат, потому что многочлен второй степени
- f25=p25(1).*x5.^2+p25(2).*x5+p25(3) //Соответсвенно далее будет ^3 + ^2+ ^1 +^0 степени иксов
- f26=p26(1).*x6.^2+p26(2).*x6+p26(3)
- f27=p27(1).*x7.^2+p27(2).*x7+p27(3)
- f28=p28(1).*x8.^2+p28(2).*x8+p28(3)
- //Получили. Отлично, теперь осталось посчитать тету (погрешность):
- teta23=max(abs(y3-f23)) //находим максимальный модуль разности
- teta24=max(abs(y4-f24))
- teta25=max(abs(y5-f25))
- teta26=max(abs(y6-f26))
- teta27=max(abs(y7-f27))
- teta28=max(abs(y8-f28)) //из них находим маименьшую погрешность. (глазками)
- // Это количество иксов и выносим в отчет, говорим что при таком то кол-ве точек
- //получается многочлен наилучшего приближения Рdn
- //Выписываем минимальную тету
- //выводим график разности:
- plot(xn, teta2n)
- //и... график зависимости погрешности от кол-ва точек.
- //если количество точек сделать легко - создаем массив от 3х и до нужного кол-ва (пока утт максимум - 8)
- for i=3:8
- a(i)=i
- end
- //и теперь тету надо собрать в один массив, поэтому ящитаю что нужно немного переписать
- //тету - что бы это был массив :)
- //ну и вывести:
- plot(a, teta)
- //повторить для d=3 (количество точек будет от 4-х и более
- //повторить для d=4 (количество точек будет от 5-х и более
- //и т.д. до d=8 (по заданию) ололо
- //Главный минус всего вышенаписанного - все вручную прописывается, проверка теты идет глазами.
- //Надо бы так все это переписать, что бы можно было указывать только d и начальное кол-во точек
- //а октав уже сам бы считал до тех пор, пока размер теты(i) будет больше теты(1)
- //Вроде так
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement