IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Задачка по численному анализу (https://www.imho.ws/showthread.php?t=43123)

dr-evil 11.11.2003 13:59

Задачка по численному анализу
 
Цитирую:

Составить программу вычисления производной функции, заданной набором экспериментальных значений xi и yi; имитируя их по формуле y=2*x^2+3*x-5. Провести приближение функции y(x) полиномом второй степени на всем интервале х. Экспериментальные точки строить при 999<=x<=1000 c шагом 0.1 Производную y'(x) напечатать в тех же точках х

Конец цитаты.

Язык: Паскаль
Есть идеи?

denver 11.11.2003 14:17

С точки зрения программирования - лехко!
Над матчастью только подумай (я матан еще года 4 назад сдал+забыл)

А с матчастью, кстати, непонятно. Исходя из условия:
Цитата:

вычисления производной функции, заданной набором экспериментальных значений xi и yi; имитируя их по формуле y=2*x^2+3*x-5
Выходит что y=2*x^2+3*x-5 это и есть производная.
Цитата:

Производную y'(x) напечатать в тех же точках
Тут вообще непонятно, y'(x) это производная от y=2*x^2+3*x-5 или же ты чего-то напутал в приведенном условии.

YAS 11.11.2003 14:31

dr-evil
Действительно! Ты хоть сам понял условие задачи?

dr-evil 11.11.2003 14:36

denver
как я понимаю есть некая функция, которую мы имитируем выражением y=2*x^2+3*x-5.

Добавлено через 1 минуту:
YAS
я его седня открыл... :-)

denver 11.11.2003 14:45

dr-evil
Цитата:

...производной функции, заданной набором...
Да, ты скорее прав, я почему то прочитал "производной функции, заданной набором..." а не "производной функции, заданной набором..."
Сорри с матаном я не помогу. А программировать тут и нечего.

Добавлено через 3 минуты:
хотя может только алгоритмы относятся к прогаммированию, скорее всего алгоритмы вычисления производной и приближения есть у Кнута.

dr-evil 11.11.2003 15:40

denver
если есть инф по теме... то плз линки... или выкройки....
мне энто сдавать придется....:(

YAS 11.11.2003 18:30

Эх, давно я методами вычислений не занимался!

dr-evil
У тебя какой ВУЗ? И еще в каком виде нужен результат (текст, график)?

CEO 11.11.2003 18:44

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

CEO 12.11.2003 11:49

Заглянув в эту книгу еще раз, вот что я там нашел:
"Если функция задана таблично, то для нахождения ее производной необходимо построить какой-нибудь интерполяционный многочлен..." Пусть это будет например, 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;
Вот оказывается как все просто.

"Повысить точность можно использовав более сложный интерполяционный многочлен Лагранжа ".:)

dr-evil 12.11.2003 12:33

YAS
Политех питерский, результат ждут в виде проги =)

CEO
пасиба, стало яснее

dr-evil 20.11.2003 14:57

CEO
увы нужен только первый вариант

CEO 20.11.2003 17:02

dr-evil :так, яже, вроде и описал в следующем посте первый вариант. Хотя, я в этих численных методах слаб, не нужно мне это пока открыл книгу почитал, ну ни написал как понял, может я и не прав конечно, но больше ничем помочь не могу, извини, может кто-нибудь другой.

CEO 09.12.2003 15:42

Совершенно случайно нашел сайт с исходниками по численным методам, там похоже есть ответы на любые вопросы по данной теме:
http://alglib.manual.ru/

aleks_k2 12.12.2003 14:41

Re: Задачка по численному анализу
 
Цитата:

Первоначальное сообщение от dr-evil
Цитирую:

Составить программу вычисления производной функции, заданной набором экспериментальных значений xi и yi; имитируя их по формуле y=2*x^2+3*x-5. Провести приближение функции y(x) полиномом второй степени на всем интервале х. Экспериментальные точки строить при 999<=x<=1000 c шагом 0.1 Производную y'(x) напечатать в тех же точках х

Конец цитаты.

Язык: Паскаль
Есть идеи?

Если воспользоваться Интерполяцией полиномф Лагранжа 2-й степени см на стр.
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] соответствующие последовательные значения. В данном случае т.к. исходная функция сама является полиномом второй степени, то в результате должна получатся точная производная, если функция более сложная то некое приближение.
Думаю дальше программу составить уже несложно, но если что пиши.

dr-evil 24.12.2003 12:31

короче препод кое-что разъяснил и выдал....
что нужно получив точки (xi, yi) по ним получить коэффициенты квадратного уравнения.... и все энто методом наименьших квадратов.... вот...

если кому не в лом, объясните доступно что есть этот метод, как его применить в условиях данной задачи, и хотелось бы алгоритм этих действий.

Aluf 03.01.2004 00:47

не "уравнения" а полинома формы: р(х)=а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сли будут вопросы по нумерике спрашивай.

dr-evil 03.01.2004 11:52

Aluf
с паскалем нет проблем у меня. =)
огромное пасиба. 5! домой приеду попробую....

Aluf 03.01.2004 15:55

Пожалуста,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.