скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Программа для решения дифференциальных уравнений первого порядка методом Рунге-Кутта

·  Поля, свойства и методы секции protected также доступны только внутри модуля с описываемым классом. Но — и это главное — они доступны в классах, являющихся потомками данного класса, в том числе и в других модулях. Такие элементы особенно необходимы для разработчиков новых компонентов — потомков уже существующих. Оставляя свободу модернизации класса, они все же скрывают детали реализации от того, кто только пользуется объектами этого класса.

СОЗДАНИЕ НОВОГО КЛАССА

Объявление типа

Для того чтобы создать новый класс, в interface-секции кода модуля следует записать:

type

TNewClass = class(ParentClass)

end;

Каждая форма в проекте, разрабатываемом в Delphi, описывается отдельным модулем (создаваемым автоматически при создании новой формы). Этот модуль описывает новый класс для компонента Form. Первоначально по умолчанию создается класс TForml, наследуемый от класса TForm из VCL-библиотеки. Это автоматически записывается в модуле следующим образом:

type (Объявление класса}

TForml = class(TForm)

private

[Объявление private переменных и методов}

public

{Объявление общедоступных переменных и методов}

end;

var

Forml: TForml; {Создание экземпляра класса}

implementation

{Секция реализации методов)

end.

Объявление переменных и методов класса

Переменные класса указываются после модификаторов доступа (public, private, protected, published, automated), определяющих их область видимости. Свойства, указанные после модификатора доступа published, являются общедоступными и отображаются в инспекторе объектов.

После имени переменной или списка имен, разделенных через запятую, указывается символ : и тип переменной. Типом может быть как базовый тип Delphi (например. Integer, Boolean), так и производный тип, в том числе реализуемый, как некоторый класс. Такой тип иногда называется объектным типом.

При объявлении методов класса перед именем метода указывается ключевое слово function или procedure. Для функций также после имени функции через символ указывается тип возвращаемого значения.

Например:

type

TNewClass = class(ParentClass]

{Модификатор доступа public)

public

Varl: Integer;

Var2, Var3: TVarTypeClass;

procedure P1;

function F1: Integer;

end;

Объявление класса содержит только объявление переменных и методов. Реализация методов - функций и процедур - записывается в implementation-секции модуля.

Каждый модуль, создаваемый на основе разрабатываемой формы, представляет собой описание класса. Как правило, производного от класса TForm. Любой компонент, располагаемый в форме, также является экземпляром некоторого класса.

Классы в Delphi образуют иерархическое дерево. Будем называть классы из VCL-библиотеки Delphi базовыми классами. Иерархическое дерево для некоторого класса любого компонента имеет корневым элементом класс TObject. Просмотреть иерархию классов-потомков можно в окне Exploring. Для того чтобы перейти в него, достаточно выполнить команду меню View|Browser или нажать клавиши Shift+CtrL+B.

На рис.1 представлена страница Classes окна Exploring Classes. На ней отображено иерархическое дерево наследования для класса TForm 1. В правой части окна расположена панель, содержащая три страницы - Scope, Inheritance, References. Страница Scope содержит древовидную диаграмму всех объектов, переменных и методов выделенного на левой панели класса. При этом ветвь Inherited содержит имена класса-предка и класса-потомка. Страница Inheritance содержит поддерево иерархии классов, начиная с класса-предка для выделенного на левой панели класса.

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

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

Все классы VCL-библиотеки Delphi разбиты на группы, которые расположены в каталоге Delphi7\Source\VCL. Для того чтобы просмотреть файл библиотеки, достаточно выполнить File | Open и выбрать каталог и имя файла. Справа в окне кода программы (рис.2) будет показан код модуля, а слева — список всех объявленных в нем классов.

СВОЙСТВА / МЕТОДЫ И ОБРАБОТЧИКИ СОБЫТИЙ

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

Ссылка на свойство в программном модуле записывается как

Имя_объекта.Свойство;

Метод - это процедура или функция, ассоциируемая с некоторым объектом.

Ссылка на методов программном модуле записывается как

Имя_0бъекта. Метод;

Delphi-приложение выполняется в среде Windows, и как любое Windows-приложение, получает сообщения о возникающих для него событиях. Управление приложением фактически сводится к обработке получаемых сообщений.

Методы, в которых содержится код обработки события, называются обработчиками событий (Event Handler). Delphi автоматически генерирует процедуры обработки событий – обработчики событий для любого компонента. При этом имя обработчика событий формируется из имени компонента и названия события (например, EditlClick). Имя обработчика события автоматически квалифицируется именем класса формы.

Например: TForml.ButtonlClick(Sender: TObject);.

Для каждого компонента предусмотрено одно стандартное событие. Например, для командной кнопки, флажка, списка, поля ввода - это событие Click, а для формы - событие FormCreate.

Для того чтобы автоматически добавить в модуль объявление и описание обработчика стандартного события, достаточно выполнить на компоненте формы или самой форме двойной щелчок мышью. Объявление события добавляется в interface-секцию модуля, а пустое описание события - в implementation-секцию модуля. Далее в редакторе кода внутри уже имеющегося блока begin end; следует только ввести код обработчика события.

Например:

procedure TForml.ButtonlClick(Sender: TObject);

begin

{место для введения кода}

end;

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


2. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ (ПО)

2.1 Назначение программного продукта

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

2.2 Основные задачи

Программа обеспечивает решение следующих задач:

− ввод исходных данных;

− решение ОДУ и вывод результата решения в численном и аналитическом виде;

− обнуление результатов решения ОДУ;

− контроль корректности ввода исходных данных и вывод на экран сообщение о содержании

ошибки с рекомендацией по её устранению;

− контроль возникновения в процессе вычислений ошибки «деление на ‘0’» и вывод на экран

соответствующего сообщения о содержании ошибки с рекомендацией по её устранению.

2.3 Входные и выходные данные

Входными данными для программы являются:

− начальное условие решения ОДУ − у'(х0) = у0.,

− начальное и конечное значения отрезка, в пределах которого находится решение ОДУ;

−величина шага дифференцирования,

−формула образцовой функции.

Выходными данными программы являются:

− массив (х1 ,у1 ; х2 ,у2;…; хi ,уi) − решений выбранного дифференциального уравнения на заданном

интервале;

− график функции, которая, будучи подставленной, в исходное образцовое уравнение, обращает его в

тождество и одновременно удовлетворяет начальному условию.


3. ПРОЕКТИРОВАНИЕ

3.1 Выделение основных объектов ПО

− Объект класса TRKutta (Form1) – главная окно программы.

− Объект класса TRngeKutta (Form2) – окно вывода графика функции-решения ДУ.

− Объект класса TSpravka (Form3) – окно «О программе».

− Объект класса TRungeKutta – координатная плоскость и график функции;

3.2 Описание полей и методов

Класс TRKutta (родительский класс TForm)

Поля класса:

x1 - значение x1(начало отрезка);

x2 - значение x2(конец отрезка);

yc - начальные значения (Y0) для передачи в графический модуль;

xc - начальные значения (х0)для передачи в графический модуль;

y - значение Y(x1);

h – зачение величины шага вычислений;

f - значение функции при начальных условиях

zx - массив значений аргумента;

zy - массив значений функции;

line_arr - размерность массивa;

Методы класса:

procedure Button1Click – вычисление значений функции – решения ОДУ;

procedure Button2Click – очистка полей ввода/вывода данных;

procedure Button3Click - вывод окна ГРАФИК;

procedure Button4Click - выход из программы;

procedure RadioGroup1Click - выбор образцовой функции;

procedure Button5Click - активация ввода образцовых функций;

procedure Button6Click - деактивация ввода образцовых функций;

procedure N7Click - вывод информации о программе;

Класс TRungeKutta (родительский класс TObject)

Поля класса

x0,y0 - координаты начала координатных осей;

dx,dy - шаг координатной сетки (в пикселях)

y1,y2,xP,xL - засечки по оси Y и X

dlx,dly - шаг меток (оцифровки) линий сетки по X и Y

cross - счетчик неоцифрованных линий сетки

dcross - количество неоцифрованных линий между оцифрованными

razm – размер массивов;

uzx - Динамический массив координат-X

uzy - Динамический массив координат-Y

uxc,uyc - Оцифровка по осям

mx, my - масштабы по осям X и Y;

BaseMasht_X,BaseMasht_Y - МАХ значения элементов в массивах

Методы класса

function MaxAbsElementArray – определяет MAX элемент массива по модулю;

procedure UstanovkaParametrov – вычисляет исходные параметры необходимые для построения декартовой плоскости;

procedure KoordPloskost – вычерчивает координатную плоскость;

Конструктор

constructor TRungeKutta.CreateGr - создание объекта (график функции, координатная сетка, координатные оси)

Класс Form2 (родительский класс TForm)

Поле класса (private)

RungeKutta - переменная-объект класса TRungeKutta ;

Методы класса

procedure N4Click - вывод графика функции в окне 'График';

procedure N5Click - закрытие окна 'График';

Класс Form3 (родительский класс TForm)

Метод класса

procedure Button1Click – процедура вывода информации о программе

3.3 Иерархия классов на основе выделенных объектов


4. ОСНОВНЫЕ ФОРМЫ И КОМПОНЕНТЫ, ИСПОЛЬЗУЕМЫЕ ДЛЯ РЕАЛИЗАЦИИ ПРОГРАММЫ. ОСНОВНЫЕ АЛГОРИТМИЧЕСКИЕ РЕШЕНИЯ РЕЗУЛЬТАТЫ РАБОТЫ ПРОГРАММЫ




 




РУКОВОДСТВО

Теоретический материал

1. Решение дифференциальных уравнений

Пусть дано дифференциальное уравнение первого порядка:

у' = f(x)

и начальное условие его решения:

у'(х0) = у0..

Тогда решить уравнение — это значит найти такую функцию у — φ(х), которая, будучи подставленной, в исходное уравнение, обратит его в тождество и одновременно будет удовлетворено начальное условие. Задача отыскания функции у = φ (х) называется в математике задачей Коши. При решении дифференциального уравнения порядка n задача Коши формулируется следующим образом.

Дано дифференциальное уравнение порядка n:

у(n) = f(x, y, у'’,…,yn-1)

Необходимо найти такую функцию у = φ (х), которая, будучи подставленной в исходное уравнение, обратит его в тождество и одновременно будут удовлетворены следующие п начальных условий:

у(х0) = у0

у'(х0) = у'0

. . .

уn-1(х0) = уn-10


4.1 Метод Рунге-Кутта

Метод Рунге-Кутта обладает более высокой точностью, чем методы Эйлера за счет снижения методических ошибок. Идея метода состоит в следующем.

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

yi+1 = yi + Δyi;

где Δyi = hf (хi, yi) = hу' (хi, yi).

Тогда приращение Δyi, может быть найдено путем интегрирования:

Или окончательно

Вычислим теперь интеграл по методу прямоугольников:

yi+1 = yi + (xi+1 - xi)f(xi, yi) = yi + hf(xi, yi).

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

Вычислим интеграл по формуле трапеций:


yi+1 = yi +0,5h(f(xi, yi)+ f(xi+1, yi+1))

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

где Pi — некоторые числа, зависящие от q ; Ki(h) — функции, зависящие от вида подынтегральной функции f(x,y) и шага интегрирования h, вычисляемые по следующим формулам:

K1(h) = hf(x, y);

K2(h) = hf(x + a2h, y + β21K1(h));

K3(h) = hf(x + a3h, y + β 31K1(h) + β 32K2(h));

Kn(h) = hf(x + aqh, , y + β q1K1(h) + ... + β q,q-1Kq-1(h)).

Значения p, α, β получают из соображений высокой точности вычислений. Формулы Рунге-Кутта третьего порядка (q= 3) имеют следующий вид:

K1=hf(xi, yi);

K2=hf(xi + 0,5h, yi+0,5 K1);

K3=hf(xi+h, yi+K1+2K2).

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


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.