бесплано рефераты

Разделы

рефераты   Главная
рефераты   Искусство и культура
рефераты   Кибернетика
рефераты   Метрология
рефераты   Микроэкономика
рефераты   Мировая экономика МЭО
рефераты   РЦБ ценные бумаги
рефераты   САПР
рефераты   ТГП
рефераты   Теория вероятностей
рефераты   ТММ
рефераты   Автомобиль и дорога
рефераты   Компьютерные сети
рефераты   Конституционное право
      зарубежныйх стран
рефераты   Конституционное право
      России
рефераты   Краткое содержание
      произведений
рефераты   Криминалистика и
      криминология
рефераты   Военное дело и
      гражданская оборона
рефераты   География и экономическая
      география
рефераты   Геология гидрология и
      геодезия
рефераты   Спорт и туризм
рефераты   Рефераты Физика
рефераты   Физкультура и спорт
рефераты   Философия
рефераты   Финансы
рефераты   Фотография
рефераты   Музыка
рефераты   Авиация и космонавтика
рефераты   Наука и техника
рефераты   Кулинария
рефераты   Культурология
рефераты   Краеведение и этнография
рефераты   Религия и мифология
рефераты   Медицина
рефераты   Сексология
рефераты   Информатика
      программирование
 
 
 

Численные методы решения типовых математических задач

 begin

 Setcolor(9);

 line(320,0,320,480);

 line(0,240,640,240);

 settextstyle(smallfont,horizdir,3);

 setcolor(10);

 outtextxy(320,245,'0');

 a1:=0;

 b1:=480;

 z:=-10;

for i:=0 to 20 do

 begin

 if z<>0 then


3. Среднеквадратическое приближение функции

3.1 Постановка задачи

Разработать схему алгоритма и написать программу на языке Turbo Pascal 7.0 для выполнения среднеквадратического приближения функции, заданной в узлах.

3.2 Математическая формулировка задачи

Пусть имеется множество функций , принадлежащих линейному пространству функций. Под близостью в среднем интерполируемой и интерполирующей функций будем понимать результат оценки интеграла

 , (3.1)

где  - весовая функция.

Такое приближение называют среднеквадратичным.

3.3 Обзор существующих численных методов решения задачи

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

Когда уровень неопределенности в задании приближаемой функции f(xi), i=1..m, достаточно велик, что характерно для обработки экспериментальных данных, бессмысленно требовать выполнения условий интерполирования; кроме того, число точек задания функции f(xi) часто весьма велико. Все это делает применение интерполирования мало перспективным по причинам плохой обусловленности задачи высокой размерности и проблем сходимости процесса интерполяции

Одной из наиболее простых и, поэтому, широко используемых приближающих функций является алгебраический полином

Метод среднеквадратичного приближения обеспечивает построение полинома Pn(x), исходя из минимизации величины

Рассмотренный метод приближения минимизирует среднеквадратичное уклонение аппроксимирующего полинома от аппроксимируемой функции, но не гарантирует от значительных локальных ошибок. Для предотвращения подобной возможности используют полиномы наилучшего равномерного приближения.

в пространстве параметров a0 , a1 ,...,an. Существуют различные подходы к решению задачи минимизации функции D(a). Простейший из них приводит к необходимости решения нормальной системы линейных алгебраических уравнений

Однако, уже при n > 5 матрица такой системы оказывается настолько плохо обусловленной, что полученные из (3.4) значения aj оказываются мало пригодными для вычисления Pn(x). Поэтому, при необходимости построения полиномов наилучшего среднеквадратичного приближения более высоких степеней применяют другие алгоритмы, например, метод сингулярного разложения.

 

3.4 Численный метод решения задачи

Можно рассмотреть две задачи:

1 - подобрать функцию  так, чтобы выполнялось неравенство

 ; (3.5)

2 - найти наилучшее приближение, т.е. такую функцию  , чтобы было справедливым соотношение

  . (3.6)

Далее займемся отысканием наилучшего приближения.

Разложим функцию  по системе линейно независимых функций :

 . (3.7)

В дальнейшем для сокращения записи будем пользоваться определением скалярного произведения в пространстве функций :

 .

Подставляя (3.7) в условие (3.6), получим

 .

Дифференцируя это выражение по  и приравнивая производные нулю, получим

 . (3.8)

Определитель этой системы есть определитель Грама функций . В силу их линейной независимости этот определитель не равен нулю. Следовательно, из системы (3.8) можно найти коэффициенты , определяющие функцию  согласно (3.6) и минимизирующие интеграл от погрешности  . Таким образом, наилучшее среднеквадратичное приближение существует и оно единственно.

При использовании ортонормированной системы функций  система (3.8) упрощается:

,

т.е.  являются коэффициентами Фурье, а наилучшее приближение есть ряд Фурье, обрываемый на каком-то члене.

Доказано, что в любом линейно нормированном пространстве при линейной аппроксимации вида (3.4) наилучшее приближение существует, хотя оно может быть не единственным.

В тех случаях, когда функции  не ортогональны, при  определитель Грама уменьшается, приближаясь к нулю. Тогда система становится плохо обусловленной и ее решение дает большую погрешность. В этой ситуации обычно берут не более пяти-шести членов в сумме (3.7).

В качестве  чаще всего используют полиномы Лежандра, Чебышева, Лагерра, Эрмита, ортогональные с заданным весом.

Рассмотрим частный случай, когда необходимо найти наилучшее приближение функции, заданной таблично. Для вещественных функций, заданных на конечном множестве точек, скалярное произведение определяется формулой

 , (3.9)

где - число заданных узлов.

Условие наилучшего среднеквадратичного приближения записывается следующим образом:

  . (3.10)

Полагая , где , и подставляя этот многочлен в (3.10), придем к системе (3.8), в которой скалярные произведения вычисляют согласно (3.9). Описанная процедура аппроксимации носит название метода наименьших квадратов.

Наиболее употребительный вариант метода наименьших квадратов соответствует случаю степенного вида функций , т.е. , причем .

Система уравнений (3.8) при этом принимает вид

 ,  , (3.11)

где .


3.5 Схема алгоритма

Рис. 3.1 Основная программа


Рис. 3.2 Процедура ввода данных


Рис 3.3 Процедура среднеквадратичного приближения


program srpribl; {$R+}

uses graph;

label 1,2,3,4;

const m=2;

type mas= array [1..21] of real;

         mas1= array [1..m] of real;

         mas2= array [1..m,1..m+1] of real;

var i,j:byte;

 y1,x1:mas;

 xx1:mas1;

 a1:mas2;

procedure vvod (x,y: mas);

begin

 x[1]:=0;y[1]:=0.290234387293458; x[2]:=0.25;y[2]:=0.201247759722173;

 x[3]:=0.5;y[3]:=0.0712686786428094;x[4]:=0.75; y[4]:=0.044294935464859;

 x[5]:=1;y[5]:=-0.0745576142333448; x[6]:=1.25;y[6]:=-0.0807833694852889;

 x[7]:=1.5;y[7]:=-0.233371530473232;x[8]:=1.75;y[8]:=-0.283957027737051;

 x[9]:=2;y[9]:=-0.308697660081089;x[10]:=2.25;y[10]:=-0.42091366359964;

 x[11]:=2.5;y[11]:=-0.516991161741316;x[12]:=2.75;y[12]:=-0.427710095947851;

 x[13]:=3;y[13]:=-0.374748698528856;x[14]:=3.25;y[14]:=-0.229905794281513;

 x[15]:=3.5;y[15]:=-0.205365492492496639;x[16]:=3.75;y[16]:=-0.129155068378896;

 x[17]:=4;y[17]:=-0.0438349825330079;x[18]:=4.25;y[18]:=0.0294586319476366;

 x[19]:=4.5;y[19]:=0.132592592108995;x[20]:=4.75;y[20]:=0.206369574274868;

 x[21]:=5;y[21]:=0.26959548862651;

end;

procedure srpribl (xx:mas1;a:mas2);

var l:real;

 s,z,k1:integer;

begin

 for s:=1 to m-1 do

 for z:=s+1 to m do

 begin

 a[z,s]:=-a[z,s]/a[s,s];

 for k1:=s+1 to m+1 do a[z,k1]:=a[z,k1]+a[z,s]*a[s,k1]

 end;

 xx[m]:=a[m,m+1]/a[m,m]; writeln(' xx[',m,']=',xx[m]:2:3);

 for i:=m-1 downto 1 do

 begin

 l:=a[i,m+1];

 for j:=i+1 to m do l:=l-xx[j]*a[i,j];

 xx[i]:=l/a[i,i]; writeln(' xx[',i,']=',xx[i]:2:3)

 end

end;

procedure Grafik (var x,y:mas;xx:mas1)

var ec,gd,gm:integer;

begin

gd:=detect;

initgraph (gd,gm,' ');

ec:=graphresult;

if ec<>grok then begin

writeln ('Oshibka v inicializacii grafika');

halt (1);

end;

setcolor(white);

line (0,420,620,420);

line (0,0,0,420);

setcolor (white);

for i:=1 to 21 do begin

circle (round (x[i]*150),round (y[i]*100),1);

end;

setcolor (yellow);

for i:=1 to m do begin

circle (round (x[i]*150),round (xx[i]*100),1);

end;

setcolor (green);

for i:=2 to m do begin

line (round (x[i-1]*150),round(xx[i-1]*100),round (x[i]*150),

round (xx[i]*100));

end;

end;

begin

 vvod(x1,y1);

 for i:=1 to 2 do

 for j:=1 to 3 do a[i,j]:=0;

 a[1,1]:=21;

 for i:=1 to 21 do

 begin

 a[1,2]:=a[1,2]+x[i];

 a[2,1]:=a[2,1]+x[i];

 a[2,2]:=a[2,2]+x[i]*x[i];

 a[1,3]:=a[1,3]+y[i];

 a[2,3]:=a[2,3]+y[i]*x[i]

 end;

 srpribl(xx1,a1);

 for i:=1 to 21 do

 writeln(y[i]:2:3,' ',xx[1]+xx[2]*x[i]:2:3);

Grafik(x1,y1,xx1);

end.

 

3.7 Тестовый пример

Найти тригонометрический многочлен наилучшего среднеквадратичного приближения наименьшей степени со среднеквадратичным отклонением меньшим [Graphics:1.gif]для функции [Graphics:2.gif]

Введем функцию [Graphics:3.gif]

[Graphics:4.gif]

Вычислим коэффициенты Фурье

[Graphics:5.gif]

Вычислим частичные суммы ряда Фурье

[Graphics:6.gif]

Вычислим среднеквадратичное отклонение

[Graphics:7.gif]

Найдем минимальное [Graphics:8.gif], при котором [Graphics:9.gif]будет меньше [Graphics:10.gif]

[Graphics:11.gif]

[Graphics:12.gif]

Следовательно многочлен степени [Graphics:13.gif]является наименьшим многочленом, удовлетворяющим нашим условиям. Построим график этого многочлениа и исходной функции

[Graphics:14.gif]

[Graphics:15.gif]

[Graphics:16.gif]

Построим график среднеквадратичного отклонения

[Graphics:17.gif]

[Graphics:18.gif]

[Graphics:19.gif]

[Graphics:20.gif]

Найдем минимальное [Graphics:8.gif], при котором [Graphics:9.gif]будет меньше [Graphics:10.gif]

[Graphics:11.gif]

[Graphics:12.gif]

Следовательно, многочлен степени [Graphics:13.gif]является наименьшим многочленом, удовлетворяющим нашим условиям. Построим график этого многочлениа и исходной функции

[Graphics:14.gif]

[Graphics:15.gif]

[Graphics:16.gif]

Построим график среднеквадратичного отклонения

[Graphics:17.gif]


[Graphics:18.gif]

[Graphics:19.gif]

[Graphics:20.gif]


4. Численное интегрирование функций методом Гаусса

 

4.1 Постановка задачи

Разработать схему алгоритма и написать программу на языке Turbo Pascal 7.0 для вычисления интегралов функции, используя метод Гаусса.

 

4.2 Математическая формулировка задачи

Пусть функция задана на стандартном интервале . Задача состоит в том, чтобы подобрать точки  и коэффициенты  так, чтобы квадратурная формула

 

была точной для всех полиномов наивысшей возможной степени.

 

4.3 Обзор существующих численных методов решения задачи

Одномерный случай

Основная идея большинства методов численного интегрирования состоит в замене подынтегральной функции на более простую, интеграл от которой легко вычисляется аналитически. При этом для оценки значения интеграла получаются формулы вида

I \approx \sum_{i=1}^{n} w_i\, f(x_i),

где n\,\!— число точек, в которых вычисляется значение подынтегральной функции. Точки x_i\,\! называются узлами метода, числа w_i\,\!— весами узлов. При замене подынтегральной функции на полином нулевой, первой и второй степени получаются соответственно методы прямоугольников, трапеций и парабол (Симпсона). Часто формулы для оценки значения интеграла называют квадратурными формулами.

Метод прямоугольников

Метод прямоугольников получается при замене подынтегральной функции на константу. В качестве константы можно взять значение функции в любой точке отрезка \left[a, b\right]\,\!. Наиболее часто используются значения функции в середине отрезка и на его концах. Соответствующие модификации носят названия методов средних прямоугольников, левых прямоугольников и правых прямоугольников. Формула для приближенного вычисления значения определённого интеграла методом прямоугольников имеет вид

I \approx f(x) (b-a),

где x=\frac{a+b}{2}, a\  или b\ , соответственно.

Метод трапеций

Если функцию на каждом из частичных отрезков аппроксимировать прямой, проходящей через конечные значения, то получим метод трапеций.

Площадь трапеции на каждом отрезке:

~I_i \approx \frac{f(x_{i-1})+f(x_{i})}{2} (x_{i}-x_{i-1})


Погрешность аппроксимации на каждом отрезке:

~\left| R_{i} \right| \leqslant \frac{\left( b-a \right)^3}{12n^2} M_{2,i}, где M_{2,i}=\max_{x\mathcal{2}[x_{i-1},x_i]} \left| f''(x) \right|

Полная формула трапеций в случае деления всего промежутка интегрирования на отрезки одинаковой длины h:

~I \approx h\left( \frac{f(x_{0})+f(x_{n})}{2} + \sum_{i=1}^{n-1}f(x_{i})\right),

где h=\frac{b-a}{n}

Погрешность формулы трапеций:

~\left| R \right| \leqslant \frac{\left( b-a \right)^3}{12n^2} M_{2}, где M_{2}=\max_{x\mathcal{2}[a,b]} \left| f''(x) \right|

Метод парабол (метод Симпсона)

Использовав три точки отрезка интегрирования можно заменить подынтегральную функцию параболой. Обычно в качестве таких точек используют концы отрезка и его среднюю точку. В этом случае формула имеет очень простой вид

I \approx \frac{b-a}{6}\left(f(a)+4f\left(\frac{a+b}{2}\right)+f(b)\right).

Если разбить интервал интегрирования на 2N равных частей, то имеем

I \approx \frac{b-a}{6N}\left(f_0 + 4 \left(f_1 + f_3 + ... +f_{2N-1}\right) + 2 \left(f_2 + f_4 + ... +f_{2N-2}\right) + f_{2N}\right),

где f_i = f\left(a+\frac{(b-a)i}{2N}\right).

Если разбить интервал интегрирования на 2N равных частей, то имеем

I \approx \frac{b-a}{6N}\left(f_0 + 4 \left(f_1 + f_3 + ... +f_{2N-1}\right) + 2 \left(f_2 + f_4 + ... +f_{2N-2}\right) + f_{2N}\right),

где f_i = f\left(a+\frac{(b-a)i}{2N}\right).

Увеличение точности

Приближение функции одним полиномом на всем отрезке интегрирования, как правило, приводит к большой ошибке в оценке значения интеграла.

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

При стремлении количества разбиений к бесконечности, оценка интеграла стремится к его истинному значению для любого численного метода.

Приведённые выше методы допускают простую процедуру уменьшения шага в два раза, при этом на каждом шаге требуется вычислять значения функции только во вновь добавленных узлах. Для оценки погрешности вычислений используется правило Рунге.

Метод Гаусса

Описанные выше методы используют фиксированные точки отрезка (концы и середину) и имеют низкий порядок точности (0 --- методы правых и левых прямоугольников, 1 --- методы средних прямоугольников и трапеций, 3 --- метод парабол (Симпсона)). Если мы можем выбирать точки, в которых мы вычисляем значения функции f(x)\,\!, то можно при том же количестве вычислений подынтегральной функции получить методы более высокого порядка точности. Так для двух (как в методе трапеций) вычислений значений подынтегральной функции, можно получить метод уже не 1-го, а 3-го порядка точности:

I \approx \frac{b-a}{2}\left(f\left(\frac{a+b}{2} - \frac{b-a}{2\sqrt{3}} \right)+f\left(\frac{a+b}{2} + \frac{b-a}{2\sqrt{3}} \right) \right).

В общем случае, используя n\,\!точек, можно получить метод с порядком точности 2n-1\,\!. Значения узлов метода Гаусса по n\,\!точкам являются корнями полинома Лежандра степени n\,\!.

Значения узлов метода Гаусса и их весов приводятся в справочниках специальных функций. Наиболее известен метод Гаусса по пяти точкам.

В общем случае, используя n\,\!точек, можно получить метод с порядком точности 2n-1\,\!. Значения узлов метода Гаусса по n\,\!точкам являются корнями полинома Лежандра степени n\,\!.

Значения узлов метода Гаусса и их весов приводятся в справочниках специальных функций. Наиболее известен метод Гаусса по пяти точкам.

Метод Гаусса-Кронрода

Недостаток метода Гаусса состоит в том, что он не имеет лёгкого (с вычислительной точки зрения) пути оценки погрешности полученного значения интеграла. Использование правила Рунге требует вычисления подынтегральной функции примерно в таком же числе точек, не давая при этом практически никакого выигрыша точности, в отличие от простых методов, где точность увеличивается в разы при каждом новом разбиении. Кронродом был предложен следующий метод оценки значения интеграла

I \approx \sum_{i=1}^{n} a_i\, f(x_i) + \sum_{i=1}^{n+1} b_i\, f(y_i),

где x_i\,\!— узлы метода Гаусса по n\,\!точкам, а 3n+2\,\! параметров a_i\,\!, b_i\,\!, y_i\,\!подобраны таким образом, чтобы порядок точности метода был равен 3n+1\,\!.

Тогда для оценки погрешности можно использовать эмпирическую формулу:

\Delta = \left(200 |I - I_G|\right)^{1.5},

где I_G\,\!— приближённое значение интеграла, полученное методом Гаусса по n\,\!точкам.

4.4 Численный метод решения задачи

Пусть функция задана на стандартном интервале . Задача состоит в том, чтобы подобрать точки  и коэффициенты  так, чтобы квадратурная формула

 (4.1)

была точной для всех полиномов наивысшей возможной степени.

Ввиду того, что имеется  параметров и  , а полином степени  определяется  коэффициентами, эта наивысшая степень в общем случае .

Запишем полином в виде  и подставим в (4.1). Получим

 ,

 .

Приравнивая выражения при одинаковых коэффициентах получим

 ,  ,

 ,  .

Итак, и  находят из системы  уравнений

 ,

,

 , (4.2)

 . . . . . . .

  .

Система (4.2) нелинейная, и ее решение найти довольно трудно. Рассмотрим еще один прием нахожденияи . Свойства полиномов Лежандра

 ,

таковы:

1)  ,  ;

2)  ;

3) полином Лежандра  имеет  различных и действительных корней, расположенных на интервале .

Составим по узлам интегрирования многочлен -й степени

 .

Функция  при  есть многочлен степени не выше . Значит для этой функции формула Гаусса справедлива:

 , (4.3)


так как  .

Разложим  в ряд по ортогональным многочленам Лежандра:

 ,

 ,

,

т.е. все коэффициенты  при  . Значит  с точностью до численного множителя совпадает с . Таким образом, узлами формулы Гаусса являются нули многочлена Лежандра степени .

Зная , из линейной теперь системы первых  (4.2) легко найти коэффициенты являются нули многочлена Лежандра степени .

Зная , из линейной теперь системы первых  (4.2) легко найти коэффициенты . Определитель этой системы есть определитель Вандермонда.

Формулу , в которой - нули полинома Лежандра , а  определяют из (3.3), называют квадратурной формулой Гаусса.


4.5 Схема алгоритма

 

Рис. 4.1 Основная программа метода


Рис .4.2 Интегрирование методом Гаусса


Рис 4.3 Процедура подсчета коэффициентов по методу Гаусса

4.6 Текст программы

uses crt,graph;

var aaa,bbb,kkk:real;

const

g10c1=0.9739065285/6.2012983932;

g10c2=0.8650633667/6.2012983932;

g10c3=0.6794095683/6.2012983932;

g10c4=0.4333953941/6.2012983932;

g10c5=0.1488743390/6.2012983932;

g10x1=0.0666713443/6.2012983932;

g10x2=0.1494513492/6.2012983932;

g10x3=0.2190863625/6.2012983932;

g10x4=0.2692667193/6.2012983932;

g10x5=0.2955242247/6.2012983932;

function F(x:real):real;{интегрируемая функция}

begin

 F:= ln(1+x*x*x);

end;

function gauss_calc(a,b:real):real; {метод Гаусса}

var n,m,s,s1,s2,s3,s4,s5 :real;

begin

m:=(b+a)/2; n:=(b-a)/2;

s1:=g10c1*(f(m+n*g10x1)+f(m-n*g10x1));

s2:=g10c2*(f(m+n*g10x2)+f(m-n*g10x2));

s3:=g10c3*(f(m+n*g10x3)+f(m-n*g10x3));

s4:=g10c4*(f(m+n*g10x4)+f(m-n*g10x4));

s5:=g10c5*(f(m+n*g10x5)+f(m-n*g10x5));

s:=s1+s2+s3+s4+s5;

gauss_calc:=s*(b-a);

end;

{рекурсивная ф-ция подсчета с заданной точностью}

{ gc - ранее посчитаный интеграл на интервале (a,b)}

function gauss(a,b,eps,gc:real):real;

var t,ga,gb :real;

begin

t:=(a+b)/2; {разбиваем интервал на две половинки}

ga:=gauss_calc(a,t); {в каждой половинке считаем интеграл}

gb:=gauss_calc(t,b);

if abs(ga+gb-gc)>eps then {проверяем точность вычислений}

begin

ga:=gauss(a,t,eps/2,ga); {рекурсия для первой половинки}

gb:=gauss(t,b,eps/2,gb); {рекурсия для второй половинки}

end; {при этом точность повышаем, чтобы }

{при сложении ошибка не накапливалась}

gauss:=ga+gb; {интеграл = сумме интегралов половинок}

end;

procedure inputnum(prm:string;var num:real;lb,ub:real);

var q:boolean;

begin

 repeat

 write('Введите ',prm,' ');readln(num);

 q:=(lb>=num) or (num>ub);

 if q then writeln('Число должно быть от ', lb:0:0,' до ',ub:0:0);

 until not q;

end;

function main_menu:integer;

var i:integer;

begin

 Writeln('==========================================================');

 Writeln('0 - выход');

 Writeln('1 - решать тестовый пример a=0 b=1.2 k=10 eps = 0.0001');

 Writeln('2 - решать пример с произвольными a, b, k, eps');

 Writeln('----------------------------------------------------------');

 Write('Выбор >>> ');readln(i);

 Writeln('==========================================================');

 main_menu:=i;

end;

{Вывод графика}

procedure outputgraph(a,b,a1,b1:real;n:integer);

var i,j,j1,k:integer;t,y1,y2,x1,x2,x,y:double;s:string;

begin

 clearviewport;

 x1:=a1-1;x2:=b1+1;

 if x1<0.5 then x1:=-0.5;

 y2:=f(ln(bbb/aaa)/(bbb-aaa))*1.2;

 y1:=-y2;

 {Линия y=0}

 setcolor(15);

 y:=0;

 j:=trunc(480*(y-y2)/(y1-y2));

 line(0,j,639,j);

 {Линии x=a,x=b}

 setcolor(5);

 j:=trunc(480*(-y2)/(y1-y2));

 i:=trunc(640*(a-x1)/(x2-x1));

 j1:=trunc(480*(f(a)-y2)/(y1-y2));

 line(i,j,i,j1);

 i:=trunc(640*(b-x1)/(x2-x1));

 j:=trunc(480*(-y2)/(y1-y2));

 j1:=trunc(480*(f(b)-y2)/(y1-y2));

 line(i,j,i,j1);

 {Сам график}

 setcolor(14);

 setlinestyle(0,0,3);

 t:=(b-a)/n;

 k:=0;

 j1:=trunc(480*(-y2)/(y1-y2));

 for i:=0 to 640 do begin

 x:=(x2-x1)*i/640+x1;

 y:=f(x);

 j:=trunc(480*(y-y2)/(y1-y2));

 if j>479 then j:=479;

 if j<0 then j:=0;

 setcolor(14);

 setlinestyle(0,0,3);

 if i=0 then moveto(i,j) else lineto(i,j);

 setcolor(8);

 if (x>t*k+a) then begin

 k:=k+1;

 setcolor(15);

 end;

 k:=0;

 j1:=trunc(480*(-y2)/(y1-y2));

 for i:=0 to 640 do begin

 x:=(x2-x1)*i/640+x1;

 y:=f(x);

 j:=trunc(480*(y-y2)/(y1-y2));

 if j>479 then j:=479;

 if j<0 then j:=0;

 setcolor(14);

 setlinestyle(0,0,3);

 if i=0 then moveto(i,j) else lineto(i,j);

 setcolor(8);

 if (x>t*k+a) then begin

 k:=k+1;

 setcolor(15);

 end;

 setlinestyle(0,0,1);

 if (x>=a) and (x<=b) then line(i,j,i,j1);

 end;

 setcolor(15);

 y:=f(b);

 i:=trunc(640*(b-x1)/(x2-x1));

 j:=trunc(480*(y-y2)/(y1-y2));

 line(i,j,i,j1);

 setlinestyle(0,0,1);

 setcolor(12);

 {Подписи}

 setcolor(13);

 str(a:6:6,s);

 s:='a='+s;

 i:=trunc(640*(a-x1)/(x2-x1));

 outtextxy(i,j1+2,s);

 str(b:6:6,s);

 s:='b='+s;

 i:=trunc(640*(b-x1)/(x2-x1));

 outtextxy(i-10,j1+2,s);

 setcolor(15);

 y:=0;

 j:=trunc(480*(y-y2)/(y1-y2));

 outtextxy(5,j+3,'y=0');

 readkey;

end;

procedure equateit(eps:real);

var integral,a,b:real;i,j:integer;

begin

 a:=0;b:=1;

 Integral:=gauss(a,b,eps,gauss_calc(a,b));

 writeln('Интеграл = ',integral:0:6);

 readkey;

 i:=vga;j:=vgahi;

 initgraph(i,j,'..\bgi');

 outputgraph(a,(b+a)/2,a,b,1);

 outputgraph((b+a)/2,b,a,b,1);

 outputgraph(a,b,a,b,1);

 closegraph;

end;

var sel:integer;

 eps:real;

begin

 repeat

 clrscr;

 sel:=main_menu;

 case sel of

 1:begin

 aaa:=0.1;bbb:=1.2;kkk:=10;

 eps:=1e-4;

 equateit(eps);

 end;

 2:begin

 inputnum('a',aaa,0,1000);

 inputnum('b',bbb,-1000,1000);

 inputnum('k',kkk,-1000,1000);

 inputnum('точность',eps,0.000000001,1);

 equateit(eps);

 end;

 end;

 until sel=0;

end.

 i:=vga;j:=vgahi;

 initgraph(i,j,'..\bgi');

 outputgraph(a,(b+a)/2,a,b,1);

 outputgraph((b+a)/2,b,a,b,1);

 outputgraph(a,b,a,b,1);

 closegraph;

end;

var sel:integer;

 eps:real;

begin

 repeat

 clrscr;

 sel:=main_menu;

 case sel of

 1:begin

 aaa:=0.1;bbb:=1.2;kkk:=10;

 eps:=1e-4;

 equateit(eps);

 end;

 2:begin

 inputnum('a',aaa,0,1000);

 inputnum('b',bbb,-1000,1000);

 inputnum('k',kkk,-1000,1000);

 inputnum('точность',eps,0.000000001,1);

 equateit(eps);

 end;

 end;

 until sel=0;

end.

4.7 Тестовый пример

Используя семиточечную формулу вычислить интеграл .

(Точное решение - 2,3201169227)


Заключение

В данной работе описаны и реализованы с помощью блок-схем и языка программирования Turbo Pascal базовые задачи вычислительной математики: решение систем линейных алгебраических уравнений, полиномиальная интерполяция, среднеквадратичное приближение функции, численное интегрирование функций. Представленные методы и реализованные алгоритмы достаточно просты, но в тоже время эффективны для большого количества задач.


Список использованных источников

1.  Бахвалов Н., Жидков Н., Кобельков Г. Численные методы. М.: Лаборатория базовых знаний, 2001. 632 с.

2.  Вержбицкий В.М., Численных методы. Линейная алгебра и нелинейные уравнения. М.: Высшая школа, 2000. 266 с.

3.  Вержбицкий В.М., Основы численных методов. М.: Высшая школа, 2002. 840 с.

4.  Пирумов У.Г. Численные методы . М.: Дрофа, 2003. 224 с.

5.  Буслов В.А., Яковлев С.Л. Яисленные методы и решение уравнений. Санкт-Петербург, 2001. 44 с.

6.  Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. – М.: Нолидж, 1997. – 616 с.


Страницы: 1, 2


© 2010 САЙТ РЕФЕРАТОВ