на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Численное интегрирование методом Гаусса
акже в задачах такого рода активно используются интерполяционные методы нахождения значений функции.

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

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

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

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

3.1. Разработка алгоритма решения задачи и описание его особенностей

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

(1.1)

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

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

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

,

.

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

, ,

, .

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

,

,

, (1.2)

... ... .

.

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

,

таковы:

1) , ;

2) ;

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

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

.

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

, (4.3)

так как .

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

,

,

,

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

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

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

Таким образом, алгоритм решения нашей задачи будет таким:

Ввод данных - пределы интегрирования, количество узлов, точность и подынтегральная функция

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

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

3.2 Разработка программы по схеме алгоритма

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

Подпрограммы реализованы в виде функций. Существует главная функция, которая вызывается из основной программы и которая выполняет основные действия (подсчет значения интеграла и вывод на экран результата, вывод графика на экран), вызывая другие подпрограммы.

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

3.3 Разработка инструкции пользования программой

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

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

3.4 Распечатка программы

{$N+}

{ Вычисление интегpала десятиточечным методом Гаусса }

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: = kkk*(exp(-aaa*x) - exp(-bbb*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;

procedure titul; {Вывод титульного листа}

var f: text; s: string;

i: integer;

begin

clrscr;

assign(f,'f42. txt');

reset(f);

while not eof(f) do begin

readln(f,s);

while length(s) <79 do s: =' '+s+' ';

writeln(s);

end;

close(f);

end;

function main_menu: integer; {Главное меню}

var i: integer;

begin

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

Writeln('Что будем делать? ');

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

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

Writeln('1 - решать тестовый пример a=1,5 b=6 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;

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(a,b: real; eps: real); {процедура подсчета значения интеграла и вывода графика на экран}

var integral: real; i,j: integer;

begin

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) /3,a,b,1);

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

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

closegraph;

end;

var sel: integer;

eps: real;

begin

titul;

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

readkey;

repeat

clrscr;

sel: =main_menu;

case sel of

1: begin

aaa: =1.5; bbb: =6; kkk: =10;

eps: =1e-4;

equateit(aaa,bbb,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(aaa,bbb,eps);

end;

end;

until sel=0;

end.

3.5 Распечатка исходных данных и результатов решения контрольного примера

Заключение

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

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

Список использованной литературы

Малыхина М.П. Программирование на языке высокого уровня Turbo Pascal. - Спб.: БХВ-Петербург, 2006, 544 с.

Немнюгин С.А. Turbo Pascal. - Спб.: Питер, 2002. - 496 с.

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

Гусева А.И. Учимся программировать: PASCAL 7.0. Задачи и методы их решения. - М.: Диалог-МИФИ, 1997. - 256 с.

Дьяконов В.П. Справочник по алгоритмам и программам на языке бейсик для персональных ЭВМ: Справочник. - М.: Наука. Гл. ред. физ. -мат. лит., 1987. - 240 с.

Сапаров В.Е., Максимов Н.А. Системы стандартов в электросвязи и радиоэлектронике: Учебное пособие для вузов. - М. - Радио и связь, 1985. - 248 с.

ГОСТ 19.701-90 (ИСО 5807-85). “Единая система программной документации. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения”/ Cб. ЕСПД. - М.: Изд-во стандартов, 1996. - 157 с.

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

Форсайт Дж., Малькольм М., Моулер К. Машинные методы математических вычислений / Пер. с англ. М.: Мир, 1980.177с.

Самарский А.А., Гулин А.В. Численные методы: Учебное пособие для ВУЗов. М.: Наука, 1989.432с.

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.