Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Выделите форму, щелкнув на ней левой кнопкой мыши, и в свойство 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 с.





Дата публикования: 2015-04-07; Прочитано: 240 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2025 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.009 с)...