![]() |
Задачка по численному анализу
Цитирую:
Составить программу вычисления производной функции, заданной набором экспериментальных значений xi и yi; имитируя их по формуле y=2*x^2+3*x-5. Провести приближение функции y(x) полиномом второй степени на всем интервале х. Экспериментальные точки строить при 999<=x<=1000 c шагом 0.1 Производную y'(x) напечатать в тех же точках х Конец цитаты. Язык: Паскаль Есть идеи? |
С точки зрения программирования - лехко!
Над матчастью только подумай (я матан еще года 4 назад сдал+забыл) А с матчастью, кстати, непонятно. Исходя из условия: Цитата:
Цитата:
|
dr-evil
Действительно! Ты хоть сам понял условие задачи? |
denver
как я понимаю есть некая функция, которую мы имитируем выражением y=2*x^2+3*x-5. Добавлено через 1 минуту: YAS я его седня открыл... :-) |
dr-evil
Цитата:
Сорри с матаном я не помогу. А программировать тут и нечего. Добавлено через 3 минуты: хотя может только алгоритмы относятся к прогаммированию, скорее всего алгоритмы вычисления производной и приближения есть у Кнута. |
denver
если есть инф по теме... то плз линки... или выкройки.... мне энто сдавать придется....:( |
Эх, давно я методами вычислений не занимался!
dr-evil У тебя какой ВУЗ? И еще в каком виде нужен результат (текст, график)? |
dr-evil :
Заглянул я в книгу по численным методам, а там... Короче, понял я одно, где начинаются формулы, там заканчивается смысл. Тем неменее попытка не пытка. Для начала разберемся, что все-таки требуется в задании. Я понял так: Заполнить массив значениями полученными по формуле: y=2*x^2+3*x-5 , по полученным значениям, затем получить приблизительный вид функции y(x) и найти ее производные в каждой точке из диаппазона от 999 до 1000. Но тогда вопрос зачем все это делать, если функция итак известна? Т.е., почему бы просто не взять производную от y=2*x^2+3*x-5: dy=2*2*x+3 и вывести ее значения в каждой точке x на заданном интервале. Если нужна такая программа, то пожалуста: i:=999; c:=1; while i<>1000 do begin x[c]:=i; y[c]:=2*sqr(x[c])+3*x[c]-5; dy[c]:=2*2*x[c]+3; writeln('x:',x[c],'y(x):'y[c],'dy(x):',dy[c]); i:=i+0.1; inc(c); end; Если все-таки первый вариант нужен, то как будет время, можно будет подумать, это не должно быть слишком сложно. Насчет линков, пока что, нашлось только это : http://www.num-meth.srcc.msu.su http://www.srcc.msu.su/num-anal/index.htm |
Заглянув в эту книгу еще раз, вот что я там нашел:
"Если функция задана таблично, то для нахождения ее производной необходимо построить какой-нибудь интерполяционный многочлен..." Пусть это будет например, dY[k](x)=(Y[k+1] - Y[k-1])/(2*h). Тогда, программа будет выглядеть так: {заполняем таблицу значениями функции} k:=998; c:=1; h:=0.1; while k<>1001 do begin y[c]:=2*sqr(x)+3*x-5; k:=k+h; inc(c); end; {находим полином в каждой точке, это и будет искомая производная} for j:=1 to c-1 do begin dy[c]:=(y[c+1]-y[c-1])/(2*h); writeln(dy[c]); end; Вот оказывается как все просто. "Повысить точность можно использовав более сложный интерполяционный многочлен Лагранжа ".:) |
YAS
Политех питерский, результат ждут в виде проги =) CEO пасиба, стало яснее |
CEO
увы нужен только первый вариант |
dr-evil :так, яже, вроде и описал в следующем посте первый вариант. Хотя, я в этих численных методах слаб, не нужно мне это пока открыл книгу почитал, ну ни написал как понял, может я и не прав конечно, но больше ничем помочь не могу, извини, может кто-нибудь другой.
|
Совершенно случайно нашел сайт с исходниками по численным методам, там похоже есть ответы на любые вопросы по данной теме:
http://alglib.manual.ru/ |
Re: Задачка по численному анализу
Цитата:
http://alglib.manual.ru/functions/in...n/lagrange.php То получится что произведение в средней точке вычисляется приближенно по формуле y`(x[n])= (y[n+1]-y[n-1])/(x[n+1]-x[n-1]), где x[n-1], x[n], x[n+1] и y[n-1], y[n], y[n+1] соответствующие последовательные значения. В данном случае т.к. исходная функция сама является полиномом второй степени, то в результате должна получатся точная производная, если функция более сложная то некое приближение. Думаю дальше программу составить уже несложно, но если что пиши. |
короче препод кое-что разъяснил и выдал....
что нужно получив точки (xi, yi) по ним получить коэффициенты квадратного уравнения.... и все энто методом наименьших квадратов.... вот... если кому не в лом, объясните доступно что есть этот метод, как его применить в условиях данной задачи, и хотелось бы алгоритм этих действий. |
не "уравнения" а полинома формы: р(х)=а0+а1*х+а2*х*х, где а0,а1,а2 коеффициенты то есть числа которые надо наити, тут я говорю о полиноме 2 степени его форму и привел. Метод наименьших квадратов - метод найти ети коеффициенты так чтобы квадраты ошибок(квадрат разницы между данными Y что препод тебе дал и Y посчитанными из нашего полинома р(х)) были минимальны.
Решается задача в 2 хода: 1) составляется система линейных уравнений минимизируяшая ети квадраты; 2) решая ету систему любым (если не оговорено специально) методом получаем ети коеффициенты. 1) входные данные:вектора х и y состояшие из w елементов, форма полинома который приблизит ети вектора р(х)=а0+а1*х+а2*х*х (тут 2й степени вполне хватит) система уравнений для етого случая: w*А0+Б1*А1+Б2*А2 = С1 Б1*А0+Б2*А1+Б3*А3 = С2 Б2*А0+Б3*А1+Б4*А3=С3 где:w - кол-во елементов в х или y Б1 = х1+х2+х3+...+хw ,сумма всех елементов х (учитывая знаки) Б2 =х1*х1+х2*х2+х3*х3+...+хw*хw , сумма квадратов елементов в х Б3 = х1*х1*х1+х2*х2*х2...+хw*хw*хw , сумма кубов в х Б4 = х1^4+х2^4+...+хw^4 , сумма 4х степеней в х С1 = y1+y2+y3+...yw , summa vsex chisel v y C2 = x1*y1+x2*y2+...xw*yw C3 = x1*x1*y1+x2*x2*y2+...xw*xw*yw А0,А1,А2 те самые коеффицииенты в полином. 2) Решив ету систему получаешь А0,А1,А2 подставляешь их в формулу р(х) и дальше для 999<х<1000 с шагом считаешь значения р и сравниваешь с данными преподом значениями Y. Производную тебе уже сказали СЕО. С Паскалем помочь не могу забыл со школы на прочь. Но вообше, етот способ есть в Матлабе в одной функции: p = polyfit(x,y,n) где р ето вектор етих самых коеффизиентов. Eсли будут вопросы по нумерике спрашивай. |
Aluf
с паскалем нет проблем у меня. =) огромное пасиба. 5! домой приеду попробую.... |
Пожалуста,u
не забудь потом проверить результат на Matlab или Mathcad, если нет ни того ни другого можешь послать мне текст фаил с х и y dannymi в две строки я проверю на Матлаб yuriz at inbox.ru |
| Часовой пояс GMT +4, время: 08:18. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.