![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В правый верхний угол формы поместите метку 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, установите значение подсвойства goEditing – true, что даст возможность редактировать содержимое таблицы в 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!