Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Выделите форму, щелкнув на ней левой кнопкой мыши, и в свойство Caption (надпись) впишите методы интегрирования дифференциальных уравнений.






В правый верхний угол формы поместите метку Label1 (страница Стандарт). Выделив метку щелчком на ней, установите свойство Font – жирный, размер 10. В свойство Caption метки впишите уравнение.

4. Ниже метки Label1 расположите на форме метку LabeledEdit1 (страница Дополнительно). В свойство Text впишите значение 0, 01. Раскрыв свойство EditLabel, установите подсвойство Font – жирный, размер 8, а в подсвойстве Caption впишите соответственно шаг интегрирования.

 

 

Рис.8.9 – форма по окончании проектирования (вид 1)_

 

Рис.8.10 – форма по окончании проектирования (вид 2)

 

Рис.8.11 – результаты в виде таблиц

 

 

Рис.8.12 – результаты в виде графиков

 

5. Для размещения исходных данных используйте в качестве таблицы компонент StringGrid1 (страница Дополнительно). Установите следующие значения свойств компонента StringGrid1: ColCount – 6, DefaultColWidth - 48, FixedCols – 0, FixedRows – 1, Font – черный, обычный, размер 8, RowCount – 2. Раскрыв свойство Options, установите значение подсвойства goEditingtrue, что даст возможность редактировать содержимое таблицы в StringGrid1.

6. Для вывода результатов в таблицы и графики перенесите на форму многостраничную панель – компонент PageControl1 (страница Win32). Щелкните на нем правой кнопкой мыши и во всплывшем меню дважды используйте команду Новая страница. В свойство Caption первой страницы впишите Таблицы, второй – Графики. Установите свойства компонента PageControl1: MultiLine false, Style tsTabs, TabPosition tpTop. Перенесите на первую страницу (Таблицы) метки Label1 и Label2, в свойство Caption которых впишите соответственно метод РК3 и метод Адамса+РК4, и компоненты StringGrid2 и StringGrid3 (страница Дополнительно), в которых установите: ColCount – 22, DefaultColWidth - 48, FixedCols – 1, FixedRows – 0, Font – черный, обычный, размер 8, RowCount – 3. Перенесите на вторую страницу (Графики) компоненты Chart1 и Chart2 (страница Additional). Свойства компонентов задайте согласно рис.8.10.

7. Перенесите на форму (в правый верхний угол) компонент MainMenu (страница Стандарт), двойным щелчком на нем перейдите в Проектировщик Меню (окно Form1-> MainMenu1) и сконструируйте меню с указанными головными разделами и подразделами; названия записываются в свойство Caption разделов и подразделов:

исходные данные шаг интегрирования методы выход

методы h/2 РК3

2*h Адамс+РК4

исходный шаг

8. Не выходя из Проектировщика Меню (окно Form1-> MainMenu1), выделите головной раздел исходные данные и в свойство Name впишите icx_dan. В обработчик щелчка на этом разделе впишите (курсив):

void __fastcall TForm1:: icx_danClick(TObject *Sender)

{

Series1-> Clear();

Series2-> Clear();

Series3-> Clear();

Series4-> Clear();

StringGrid1-> Cells[0][0]=" x0";

StringGrid1-> Cells[1][0]=" y(x0)";

StringGrid1-> Cells[2][0]=" y`(x0)";

StringGrid1-> Cells[3][0]=" xk";

StringGrid1-> Cells[4][0]=" dx";

StringGrid1-> Cells[5][0]=" h";

StringGrid1-> Cells[0][1]=FloatToStr(0);

StringGrid1-> Cells[1][1]=FloatToStr(0);

StringGrid1-> Cells[2][1]=FloatToStr(1);

StringGrid1-> Cells[3][1]=FloatToStr(2.0);

StringGrid1-> Cells[4][1]=FloatToStr(0.1);

StringGrid1-> Cells[5][1]=FloatToStr(0.01);

LabeledEdit1-> Text=StringGrid1-> Cells[5][1];

metod-> Enabled=false;

for(int j=0; j< StringGrid2-> ColCount; j++)

for(int i=0; i< StringGrid2-> RowCount; i++){

StringGrid2-> Cells[j][i]=" ";

StringGrid3-> Cells[j][i]=" "; }

}

Выделите подраздел методы и в свойство Name впишите na_metod. В обработчик щелчка на этом разделе впишите (курсив):

void __fastcall TForm1:: na_metodClick(TObject *Sender)

{

metod-> Enabled=true;

StringGrid2-> Cells[0][0]=" x";

StringGrid2-> Cells[0][1]=" y";

StringGrid2-> Cells[0][2]=" y'";

StringGrid3-> Cells[0][0]=" x";

StringGrid3-> Cells[0][1]=" y";

StringGrid3-> Cells[0][2]=" y'";

}

9. Заданные имена остальных разделов меню и обработчики щелчков на них нетрудно видеть из приведенного ниже файла LR8.cpp; но следует отметить, что раздел методы имеет имя metod, его свойству Enabled присвоено значение false, а обработчик щелчка на нем отсутствует.

//---------------------------------------------------------------------------

 

#include < vcl.h>

#pragma hdrstop

 

#include " LR8.h"

#include< math.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource " *.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1:: TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: outClick(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

double h;

void __fastcall TForm1:: icx_danClick(TObject *Sender)

{

Series1-> Clear();

Series2-> Clear();

Series3-> Clear();

Series4-> Clear();

StringGrid1-> Cells[0][0]=" x0";

StringGrid1-> Cells[1][0]=" y(x0)";

StringGrid1-> Cells[2][0]=" y`(x0)";

StringGrid1-> Cells[3][0]=" xk";

StringGrid1-> Cells[4][0]=" dx";

StringGrid1-> Cells[5][0]=" h";

StringGrid1-> Cells[0][1]=FloatToStr(0);

StringGrid1-> Cells[1][1]=FloatToStr(0);

StringGrid1-> Cells[2][1]=FloatToStr(1);

StringGrid1-> Cells[3][1]=FloatToStr(2.0);

StringGrid1-> Cells[4][1]=FloatToStr(0.1);

StringGrid1-> Cells[5][1]=FloatToStr(0.01);

LabeledEdit1-> Text=StringGrid1-> Cells[5][1];

metod-> Enabled=false;

for(int j=0; j< StringGrid2-> ColCount; j++)

for(int i=0; i< StringGrid2-> RowCount; i++){

StringGrid2-> Cells[j][i]=" ";

StringGrid3-> Cells[j][i]=" "; }

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: na_metodClick(TObject *Sender)

{

metod-> Enabled=true;

StringGrid2-> Cells[0][0]=" x";

StringGrid2-> Cells[0][1]=" y";

StringGrid2-> Cells[0][2]=" y'";

StringGrid3-> Cells[0][0]=" x";

StringGrid3-> Cells[0][1]=" y";

StringGrid3-> Cells[0][2]=" y'";

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: dva_hClick(TObject *Sender)

{

LabeledEdit1-> Text=FloatToStr(2*StrToFloat(LabeledEdit1-> Text));

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: pol_hClick(TObject *Sender)

{

LabeledEdit1-> Text=FloatToStr(0.5*StrToFloat(LabeledEdit1-> Text));

}

//---------------------------------------------------------------------------

void __fastcall TForm1:: ich_hClick(TObject *Sender)

{

LabeledEdit1-> Text=StringGrid1-> Cells[5][1];

}

//-----------------------------------------------------------------------

void __fastcall TForm1:: RK3Click(TObject *Sender)

{ double y0, y1, x, xk, dx, k1, k2, k3, l1, l2, l3;

int i=1;

Series1-> Clear();

Series2-> Clear();

h=StrToFloat(LabeledEdit1-> Text);

y0=StrToFloat(StringGrid1-> Cells[1][1]);

y1=StrToFloat(StringGrid1-> Cells[2][1]);

x=StrToFloat(StringGrid1-> Cells[0][1]);

dx=StrToFloat(StringGrid1-> Cells[4][1]);

xk=StrToFloat(StringGrid1-> Cells[3][1]);

do{

if(fmod(x, dx)< h){

StringGrid2-> Cells[i][0]=FloatToStrF(x, ffFixed, 3, 2);

StringGrid2-> Cells[i][1]=FloatToStrF(y0, ffExponent, 3, 2);

StringGrid2-> Cells[i][2]=FloatToStrF(y1, ffExponent, 3, 2);

Series1-> AddXY(x, y0, " ", clBlack);

Series2-> AddXY(x, y1, " ", clBlack);

i++;

}

k1=y1;

l1=y1-16*y0+exp(-x);

k2=y1+h/2*l1;

l2=(y1+h/2*l1)-16*(y0+h/2*k1)+exp(-(x+h/2));

k3=y1-h*l1+2*h*l2;

l3=(y1-h*l1+2*h*l2)-16*(y0-h*k1+2*h*k2)+exp(-(x+h));

y0=y0+h/6*(k1+4*k2+k3);

y1=y1+h/6*(l1+4*l2+l3);

x+=h; }

while(x< =xk+h);

 

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1:: Ad_RK4Click(TObject *Sender)

{

double y0, y00, y000, y01, y1, y10, y100, y11, x, xk, dx, k1, k2, k3, k4, l1, l2, l3, l4;

int i=1, f=0;

Series3-> Clear();

Series4-> Clear();

h=StrToFloat(LabeledEdit1-> Text);

y0=StrToFloat(StringGrid1-> Cells[1][1]);

y1=StrToFloat(StringGrid1-> Cells[2][1]);

x=StrToFloat(StringGrid1-> Cells[0][1]);

dx=StrToFloat(StringGrid1-> Cells[4][1]);

xk=StrToFloat(StringGrid1-> Cells[3][1]);

StringGrid3-> Cells[i][0]=FloatToStrF(x, ffFixed, 3, 2);

StringGrid3-> Cells[i][1]=FloatToStrF(y0, ffExponent, 3, 2);

StringGrid3-> Cells[i][2]=FloatToStrF(y1, ffExponent, 3, 2);

Series3-> AddXY(x, y0, " ", clBlack);

Series4-> AddXY(x, y1, " ", clBlack);

i++;

k1=y1;

l1=y1-16*y0+exp(-x);

k2=y1+h/2*l1;

l2=(y1+h/2*l1)-16*(y0+h/2*k1)+exp(-(x+h/2));

k3=y1+h/2*l2;

l3=(y1+h/2*l2)-16*(y0+h/2*k2)+exp(-(x+h/2));

k4=y1+h*l3;

l4=(y1+h*l3)-16*(y0+h*k3)+exp(-(x+h));

y00=y0+h/6*(k1+2*k2+2*k3+k4);

y10=y1+h/6*(l1+2*l2+2*l3+l4);

x+=h;

do{

if(f){y0=y00; y1=y10; y00=y01; y10=y11; }

f=1;

if(fmod(x, dx)< h){

StringGrid3-> Cells[i][0]=FloatToStrF(x, ffFixed, 3, 2);

StringGrid3-> Cells[i][1]=FloatToStrF(y00, ffExponent, 3, 2);

StringGrid3-> Cells[i][2]=FloatToStrF(y10, ffExponent, 3, 2);

Series3-> AddXY(x, y0, " ", clBlack);

Series4-> AddXY(x, y1, " ", clBlack);

i++; }

y000=y00+h/2*(3*y10-y1);

y100=y10+h/2*(3*(y10-16*y00+exp(-x))-(y1-16*y0+exp(-(x-h))));

y01=y00+h/2*(y100+y10);

y11=y10+h/2*((y100-16*y000+exp(-(x+h)))+(y10-16*y00+exp(-x)));

x+=h; }

while(x< =xk+h);

}

10. Запустите приложение на выполнение, нажав быстрые кнопки Сохранить все и Запуск. После щелчка на разделе меню исходные данные станет доступным раздел методы и подразделы РК3 и Адамс+РК4. После щелчков на них получим результаты в виде таблиц и графиков (рис.8.11, рис.8.12).

11. Исследуйте влияние шага интегрирования на результаты, изменяя шаг с помощью меню.

12. Исследуйте влияние начальных условий и соотношения шага выдачи результатов к шагу интегрирования на результаты.

13. Щелчком на пункте меню выход завершите выполнение задания.

 

Содержание отчета

1. Задание.

2. Формулы с пояснениями.

3. Результаты выполнения задания в Mathcad ’е.

4. Блок-схема алгоритма.

5. Таблица идентификаторов.

6. Код.

7. Результаты выполнения работы в виде таблиц и графиков.

9. Библиографический список.

Контрольные вопросы

1. Как сравниваются методы интегрирования ДУ?

2. Приведите иллюстрации метода Эйлера и модифицированных методов Эйлера.

3. Приведите пример алгоритма метода РК3.

4. Приведите пример алгоритма метода РК4.

5. Приведите иллюстрацию метода прогноза и коррекции.

6. Как получить оценку ошибки ограничения в методе прогноза и коррекции?

7. Как скорректировать решение ДУ?

8. Приведите пример алгоритма метода прогноза и коррекции.

9. Сравните одношаговые и многошаговые методы интегрирования ДУ.

10. Объясните адаптивный алгоритм интегрирования ДУ методом прогноза и коррекции.

11. Как практически сравнить методы интегрирования ДУ? Что для этого нужно иметь?


 

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

 

1. Амосов А.А., Дубинский Ю.А., Копченова Н.В. Вычислительные методы для инженеров: Учеб. пособие.-2-е изд., доп. – М.: Издательство МЭИ, 2003.-596 с.

2. Вержбицкий В.М. Основы численных методов: Учебник для вузов. / В.М. Вержбицкий. - 2-е изд., перераб. - М.: Высш. шк., 2005. - 840 с.

3. Киреев В.И. Численные методы в примерах и задачах: Учеб. пособие / В.И. Киреев, А.В. Пантелеев. - М.: Высш. шк., 2004. - 480 с.

4. Турчак Л.И., Плотников Л.В. Основы численных методов: Учеб. пособие. - М.: ФИЗМАТЛИТ, 2003.- 304 с.

5. Чуркин В.В. Сборник заданий по вычислительным методам / В.В. Чуркин. - Киров: Изд-во ВятГУ, 2009. - 64 с.

6. Чуркин В.В. Лабораторные работы по вычислительным методам в среде C++ Builder 6 / В.В.Чуркин. – Киров: Изд-во ВятГУ, 2010. – 66 с.

7. Гурский Д.А. Вычисления в MathCAD / Д.А. Гурский. - Минск.: Новое знание, 2003. - 814 с.

8. Кирьянов Д.В. Самоучитель Mathcad 11. - СПб.: БХВ-Петербург, 2004. - 560 с.

9. Плис А.И., Сливина Н.А. Mathcad. Математический практикум для инженеров и экономистов: Учеб. пособие. – 2-е изд., перераб. и доп. – М.: Финансы и статистика, 2003. – 656 с.

10. Макаров Е. Инженерные расчеты в Mathcad 14 (+CD) – СПб.: Питер, 2007. – 592 с.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.