Численные методы
Сущность методики аппроксимации, последовательность действий при работе в среде Еxcel. Решение дифференциального уравнения первого порядка аналитико-сеточным методом с постоянным воздействием Yас и методом трапеций. Реализация численных решений в Excel.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 02.12.2014 |
Размер файла | 564,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
ОГЛАВЛЕНИЕ
1. АППРОКСИМАЦИЯ
1.1 Основы методики
1.2 Последовательность действий при работе в среде Excel
1.3 Результаты аппроксимации
2. РЕШЕНИЕ ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ПЕРВОГО ПОРЯДКА
2.1 Постановка задачи
2.2 Решение ОДУ1 разностным методом (первая разностная схема)
2.3 Решение ОДУ1 разностным методом (вторая разностная схема)
2.4 Реализация численных решений в среде Excel
2.5 Блок-схема программы решения уравнения
2.6 Графики в среде Delphi
2.7 Листинг файла OutPut.txt
ВЫВОД
СПИСОК ЛИТЕРАТУРЫ
ПРИЛОЖЕНИЕ
1. АППРОКСИМАЦИЯ
1.1 Основы методики
Аппроксимация - приближенное выражение математических объектов через другие, более простые (например, алгебраические или трансцендентные функции). Чаще всего для аппроксимации заданных табулированных функций используют формулы получаемые методом наименьших квадратов. Вид формулы задается, а коэффициенты формулы подбираются путем минимизации функционала, представляющего собой сумму квадратов невязок (квадратов разностей заданных значений функции и значений, полученных по аппроксимирующей формуле).
Суть аппроксимации заключается в том, что заданную таблично (табулированную) функциональную зависимость y=f(x) приближенно отражают (аппроксимируют) другой функцией (как правило, в виде аналитической зависимости), проходящей возможно ближе к точкам с координатами (xi, yi), но не требуют совпадения значений аппроксимирующей и табулированной функций в точках (xi, yi). При подобной аппроксимации чаще всего используется метод наименьших квадратов и надстройку «Поиск решения».
1.2 Последовательность действий при работе в среде Excel.
1. Подлежащая обработке выборка экспериментальных данных представляется на диаграмме набором точек с координатами X, Y (строится точечная диаграмма);
2. Анализируя вид представленной на диаграмме зависимости, можно подобрать аналитическое выражение для аппроксимирующей функции Ya=f(X) и выбрать в первом приближении значения ее коэффициентов;
3. Для уточнения значений коэффициентов аппроксимирующей функции следует организовать таблицу, в колонках которой содержатся: экспериментальные значения Xi, Yi; значения, полученные для аппроксимирующей функции Yai и квадраты невязок (Yi-Yai)2. В отдельных ячейках размещаются значения коэффициентов для аппроксимирующей функции и значение суммы квадратов невязок для всей выборки д. Для удобства точки со значениями значений Xi и Yi на диаграмме следует отображать маркерами, а зависимость Ya=f(X) - сплошной линией.
4. При уточнении значений коэффициентов аппроксимирующей функции следует обратиться к пункту меню Сервис Поиск решения. В открывшемся диалоговом окне Поиск решения в качестве целевой ячейки указывается ячейка содержащая значение д, а переключатель Равной: устанавливается на минимальное значение. В окне Изменяя ячейки указывается перечень ячеек, в которых находятся значения коэффициентов аппроксимирующей функции. Если необходимо установить ограничения на значения коэффициентов следует обратиться к списку ограничения. Для проведения уточнения надо нажать кнопку Выполнить.
Для оценки состоятельности проведенной аппроксимации используется относительная оценка R2:
(1.1)
Чем ближе значение R2 к единице, тем лучше график аппроксимирующей функции согласуется с экспериментальными данными.
1.3 Результаты аппроксимации
Таблица 1.1 Аппроксимация МНК
i |
X |
Y |
Y2 |
Ya |
(Ya-Y)2 |
|
1 |
0,0 |
0,5000 |
0,250 |
0,497 |
0,000 |
|
2 |
0,3 |
1,2457 |
1,552 |
1,213 |
0,001 |
|
3 |
0,6 |
1,7430 |
3,038 |
1,731 |
0,000 |
|
4 |
0,9 |
1,9070 |
3,636 |
1,923 |
0,000 |
|
5 |
1,2 |
1,7244 |
2,973 |
1,774 |
0,002 |
|
6 |
1,5 |
1,3915 |
1,936 |
1,389 |
0,000 |
|
7 |
1,8 |
0,9696 |
0,940 |
0,954 |
0,000 |
|
8 |
2,1 |
0,6847 |
0,469 |
0,674 |
0,000 |
|
9 |
2,4 |
0,6940 |
0,482 |
0,700 |
0,000 |
|
10 |
2,7 |
1,0719 |
1,149 |
1,074 |
0,000 |
|
11 |
3,0 |
1,7131 |
2,935 |
1,719 |
0,000 |
|
12 |
3,3 |
2,4452 |
5,979 |
2,461 |
0,000 |
|
13 |
3,6 |
3,0913 |
9,556 |
3,094 |
0,000 |
|
14 |
3,9 |
3,4490 |
11,896 |
3,450 |
0,000 |
|
15 |
4,2 |
3,4288 |
11,757 |
3,455 |
0,001 |
|
16 |
4,5 |
3,1522 |
9,937 |
3,162 |
0,000 |
|
17 |
4,8 |
2,7360 |
7,486 |
2,724 |
0,000 |
|
18 |
5,1 |
2,3523 |
5,533 |
2,348 |
0,000 |
|
19 |
5,4 |
2,2078 |
4,874 |
2,216 |
0,000 |
|
20 |
5,7 |
2,3999 |
5,760 |
2,429 |
0,001 |
|
21 |
6,0 |
2,9239 |
8,549 |
2,963 |
0,002 |
|
22 |
6,3 |
3,6804 |
13,545 |
3,684 |
0,000 |
|
23 |
6,6 |
4,3991 |
19,352 |
4,394 |
0,000 |
|
24 |
6,9 |
4,9183 |
24,190 |
4,896 |
0,000 |
|
25 |
7,2 |
5,0627 |
25,631 |
5,068 |
0,000 |
|
26 |
7,5 |
4,9186 |
24,193 |
4,902 |
0,000 |
|
27 |
7,8 |
4,5286 |
20,508 |
4,508 |
0,000 |
|
28 |
8,1 |
4,0899 |
16,727 |
4,077 |
0,000 |
|
29 |
8,4 |
3,8183 |
14,580 |
3,811 |
0,000 |
|
30 |
8,7 |
3,8472 |
14,801 |
3,857 |
0,000 |
|
31 |
9,0 |
4,2724 |
18,254 |
4,249 |
0,001 |
|
32 |
9,3 |
4,9439 |
24,442 |
4,905 |
0,002 |
|
33 |
9,6 |
5,6608 |
32,045 |
5,647 |
0,000 |
|
34 |
9,9 |
6,2909 |
39,576 |
6,268 |
0,001 |
|
35 |
10,2 |
6,5982 |
43,536 |
6,604 |
0,000 |
|
36 |
10,5 |
6,5961 |
43,508 |
6,590 |
0,000 |
|
37 |
10,8 |
6,2913 |
39,581 |
6,283 |
0,000 |
|
38 |
11,1 |
5,8154 |
33,819 |
5,843 |
0,001 |
|
39 |
11,4 |
5,4989 |
30,238 |
5,477 |
0,000 |
|
40 |
11,7 |
5,3589 |
28,718 |
5,363 |
0,000 |
|
41 |
12,0 |
5,6177 |
31,558 |
5,596 |
0,000 |
|
42 |
12,3 |
6,1542 |
37,874 |
6,145 |
0,000 |
|
43 |
12,6 |
6,8631 |
47,102 |
6,872 |
0,000 |
|
44 |
12,9 |
7,5923 |
57,643 |
7,574 |
0,000 |
|
45 |
13,2 |
8,0615 |
64,988 |
8,060 |
0,000 |
|
46 |
13,5 |
8,1995 |
67,233 |
8,212 |
0,000 |
|
47 |
13,8 |
8,0255 |
64,408 |
8,028 |
0,000 |
|
48 |
14,1 |
7,6299 |
58,215 |
7,627 |
0,000 |
|
49 |
14,4 |
7,1736 |
51,461 |
7,200 |
0,001 |
|
50 |
14,7 |
6,9607 |
48,452 |
6,949 |
0,000 |
|
51 |
15,0 |
7,0126 |
49,176 |
7,014 |
0,000 |
|
52 |
15,3 |
7,3837 |
54,519 |
7,426 |
0,002 |
|
53 |
15,6 |
8,0728 |
65,170 |
8,091 |
0,000 |
|
54 |
15,9 |
8,8547 |
78,406 |
8,832 |
0,001 |
|
55 |
16,2 |
9,4336 |
88,993 |
9,440 |
0,000 |
|
56 |
16,5 |
9,7239 |
94,554 |
9,757 |
0,001 |
|
57 |
16,8 |
9,7270 |
94,614 |
9,724 |
0,000 |
|
58 |
17,1 |
9,4122 |
88,590 |
9,405 |
0,000 |
|
59 |
17,4 |
8,9712 |
80,483 |
8,963 |
0,000 |
|
60 |
17,7 |
8,6055 |
74,055 |
8,606 |
0,000 |
Принята аппроксимирующая функция
Полученные коэффициенты функции
a= |
0,5 |
|
b= |
0,5 |
|
c= |
1,002 |
|
d= |
2,000 |
Оценка эффективности аппроксимации
S=0,02
R2=1
где S- сумма квадратов невязок,
R2 - оценка.
Результаты аппроксимации представлены на рис. 1.1.
аппроксимация дифференциальный численный
2. РЕШЕНИЕ ОБЫКНОВЕННОГО ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ПЕРВОГО ПОРЯДКА
2.1 Постановка задачи
Решению подлежит обыкновенное дифференциальное уравнение первого порядка (ОДУ1) (2.1).
, (2.1)
где - время,
X - безразмерное значение воздействия,
Y - безразмерное значение реакции объекта,
А. К - коэффициенты отражающие свойства объекта.
Воздействие описывается синусоидой со сдвигом по фазе (2.2).
(2.2)
Аналитическое решение уравнения (2.1) при воздействии (2.2) имеет вид (2.3).
C1= |
1 |
|
C2= |
0,42842 |
|
C3= |
0,89502 |
(2.3)
где:
2.2 Решение ОДУ1 разностным методом (первая разностная схема)
(2.4)
D1= |
0,3679 |
|
D2= |
0,3161 |
Абсолютное условие устойчивости 0<D<1
2.3 Решение ОДУ1 разностным методом (вторая разностная схема)
(2.5)
D3= |
0,33333 |
|
D4= |
0,33333 |
Абсолютное условие устойчивости 0< D<1
2.4 Реализация численных решений в среде Excel
Результаты решения уравнения (2.1) при воздействии (2.2) представлено в таблице 2.2. и на рис. 2.1.
Для тестирования правильности выполнения вычислений приняты следующие значения исходных данных (Таблица 2.1).
Таблица 2.1 Исходные данные
A= |
0,5 |
a0= |
1 |
|
K= |
1 |
a1= |
1 |
|
Y0= |
0 |
a2= |
-0,25 |
|
Dt= |
0,5 |
a3= |
1 |
Таблица 2.2 Результаты решения
i |
t |
X |
Ya |
Yтр |
Yac |
DYac |
DYтр |
dYac, % |
dYтр, % |
|
1 |
0 |
1,8415 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
2 |
0,5 |
1,7675 |
1,137 |
1,203 |
1,141 |
0,003 |
0,066 |
0,201 |
4,143 |
|
3 |
1 |
1,6816 |
1,505 |
1,551 |
1,510 |
0,005 |
0,046 |
0,318 |
2,908 |
|
4 |
1,5 |
1,5851 |
1,582 |
1,606 |
1,588 |
0,006 |
0,024 |
0,401 |
1,534 |
|
5 |
2 |
1,4794 |
1,545 |
1,557 |
1,553 |
0,007 |
0,011 |
0,467 |
0,723 |
|
6 |
2,5 |
1,3663 |
1,462 |
1,467 |
1,471 |
0,008 |
0,005 |
0,521 |
0,322 |
|
7 |
3 |
1,2474 |
1,358 |
1,360 |
1,367 |
0,009 |
0,002 |
0,565 |
0,142 |
|
8 |
3,5 |
1,1247 |
1,243 |
1,244 |
1,253 |
0,010 |
0,001 |
0,601 |
0,064 |
|
9 |
4 |
1,0000 |
1,122 |
1,123 |
1,132 |
0,010 |
0,001 |
0,626 |
0,032 |
|
10 |
4,5 |
0,8753 |
0,999 |
0,999 |
1,009 |
0,010 |
0,00 |
0,642 |
0,019 |
|
11 |
5 |
0,7526 |
0,876 |
0,876 |
0,886 |
0,010 |
0,00 |
0,648 |
0,014 |
|
12 |
5,5 |
0,6337 |
0,754 |
0,754 |
0,764 |
0,010 |
0,00 |
0,644 |
0,011 |
|
13 |
6 |
0,5206 |
0,636 |
0,636 |
0,646 |
0,010 |
0,00 |
0,629 |
0,010 |
|
14 |
6,5 |
0,4149 |
0,524 |
0,524 |
0,533 |
0,010 |
0,00 |
0,605 |
0,010 |
|
15 |
7 |
0,3184 |
0,419 |
0,419 |
0,428 |
0,009 |
0,00 |
0,571 |
0,009 |
|
16 |
7,5 |
0,2325 |
0,323 |
0,323 |
0,332 |
0,008 |
0,00 |
0,529 |
0,008 |
|
17 |
8 |
0,1585 |
0,238 |
0,238 |
0,246 |
0,008 |
0,00 |
0,478 |
0,007 |
|
18 |
8,5 |
0,0977 |
0,165 |
0,165 |
0,171 |
0,007 |
0,00 |
0,420 |
0,007 |
|
19 |
9 |
0,0510 |
0,104 |
0,105 |
0,110 |
0,006 |
0,00 |
0,355 |
0,005 |
|
20 |
9,5 |
0,0191 |
0,058 |
0,058 |
0,063 |
0,005 |
0,00 |
0,285 |
0,004 |
Условные обозначения:
Ya, Yас, Yтр - соответственно решения уравнения (2.1):
Yас, Yтр - соответственно абсолютная погрешность решения уравнения (2.1)
Yас, Yтр- соответственно относительная погрешность решения уравнения (2.1)
Значение относительной погрешности определялось по формуле (2.6).
. (2.6)
2.5 Блок-схема программы решения уравнения
2.6 Графики в среде Delphi
Рисунок 2.3 Аналитическое и численные решения
Рисунок 2.4 Относительные погрешности решения
2.7 Листинг файла OutPut.txt
A= 0.5000
K= 1.0000
Y0= 0.0000
Im= 20
DT= 0.50
a0= 1.0000
a1= 1.0000
a2=-0.2500
a3= 1.0000
ВЫВОДЫ
Численное решение уравнения ОДУ1 (2.1) аналитико-сеточным методом с постоянным воздействием и методом трапеций, проведенное в среде Excel и Delphi практически совпадает и хорошо соотносится с аналитическим решением уравнения.
СПИСОК ЛИТЕРАТУРЫ
1. Методические указания разработанные кафедрой “Техническая кибернетика” и электронные документы - методуказания к лабораторным работам по курсам “Численные методы” и “Моделирование систем”.
2. Волков Е.А. Численнные методы: Учебное пособие. - М.: Наука. Главная редакция физико-математической литературы, 1982. - 256 с.
3. Вычислительная техника и программирование. Часть 3 «Основы алгоритмизации, программирования и решения инженерных и экономических задач на ЭВМ». Учебное пособие / Под общей редакцией проф. Меркта Р.В. - Одесса: ОГМУ,2001. -86 с.
4. Годунов С.К., Рябенький В,С. Разностные схемы (введение в теорию). Учебное пособие. -М: Наука, 1973.- 400 с.
5. Лебедев А.Н. Моделирование в научно-технических исследованиях. -М.: Радио и связь. 1989. -224 с.
6. Львовский Е.Н. Статистические метода построения змпирических формул: Учеб. пособие для втузов. - 2-е изд. ,перераб. и доп. -М.:Вьісш. шк., 1988. -239 с.
7. Турчак Л.И. Основи численних методов: Учеб. Пособие. - М.: Наука, Гл. ред. физ.-мат. лит., 1987. - 320 с.
ПРИЛОЖЕНИЕ
program ODU1;
{$APPTYPE CONSOLE}
uses
SysUtils,
MyType,
Math,
classes, Graphics,
Graphik in 'Graphik.pas' {GraphikFm};
var
Im,I,Key: Ir;
A,K,Y0,DT,a0,a1,a2,a3,Start: Db;
D1,D2,D3,D4,C0,C1,C2,C3,Yamax,Yamin: Db;
T,X,Ya,Yac, Ytr, DYtr, DYac, ddYtr, ddYac: Vec;
F1,F2:TextFile;
begin
AssignFile(F1,'Input1.txt');
Reset(F1);
Readln(F1,A,K,Y0,Im,Dt,a0,a1,a2,a3,Start);
CloseFile(F1);
Writeln('A=', A:7:4, ' K=', K:7:4, ' Y0=', Y0:7:4);
Writeln(' Im=', Im:3, ' Dt=', Dt:5:2);
Writeln(' a0=', a0:7:4, ' a1=', a1:7:4, ' a2=', a2:7:4, ' a3=', a3:7:4);
Readln;
D1:=exp(-Dt/A);
D2:=K/2-K/2*exp(-Dt/A);
D3:=(2*A-Dt)/(2*A+Dt);
D4:=K*Dt/(2*A+Dt);
C1:=K*a0;
C2:=(K*a1*(cos(a3)+A*a2*sin(a3)))/((A*a2)*(A*a2)+1);
C3:=(K*a1*(sin(a3)-A*a2*cos(a3)))/((A*a2)*(A*a2)+1);
T[1]:=Start;
X[1]:=a0+a1*sin(a2*T[1])*cos(a3)+a1*cos(a2*T[1])*sin(a3);
Ya[1]:=(Y0-c1-c3)*exp(-T[1]/A)+c1+c2*sin(a2*T[1])+c3*cos(a2*T[1]);
Yac[1]:=Y0;
Ytr[1]:=Y0;
Yamin:=Ya[1];
Yamax:=Ya[1];
for I := 2 to Im do
begin
T[i]:=Start+Dt*(I-1);
X[i]:=a0+a1*sin(a2*T[i])*cos(a3)+a1*cos(a2*T[i])*sin(a3);
Ya[i]:=(Y0-c1-c3)*exp(-T[i]/A)+c1+c2*sin(a2*T[i])+c3*cos(a2*T[i]);
Yac[i]:=D1*Yac[i-1]+D2*(x[i-1]+X[i]);
Ytr[i]:=D3*Ytr[i-1]+D4*(X[i]+X[i-1]);
end;
for I := 1 to Im do
begin
if Ya[i]>Yamax then Yamax:=Ya[i] else
if Ya[i]<Yamin then Yamin:=Ya[i];
end;
for I := 1 to Im do
begin
DYac[i]:=Yac[i]-Ya[i];
DYtr[i]:=Ytr[i]-Ya[i];
ddYac[i]:=DYac[i]/(Yamax-Yamin)*100;
ddYtr[i]:=DYtr[i]/(Yamax-Yamin)*100;
end;
Writeln('T',#9,'X',#9,'Ya',#9,'Yac',#9,'Ytr'#9,'DYac',#9,'DYtr',#9,'ddYtr',#9,'ddYac');
for I := 1 to Im do
Writeln(T[i]:3:2,X[i]:8:2,Ya[i]:8:2, Yac[i]:8:2, Ytr[i]:8:2, DYac[i]:8:2, DYtr[i]:8:2, ddYtr[i]:8:2, ddYac[i]:8:2);
GrProp.Line1Color := clRed;
GrProp.Line2Color := clBlack;
GrProp.Line3Color := clBlue;
GrProp.Line4Color := clGreen;
GrProp.Point1Color := clRed;
GrProp.Point2Color := clBlack;
GrProp.Point3Color := clBlue;
GrProp.Point4Color := clGreen;
GrProp.GridDigitsY := 3;
GrProp.GridDigitsX := 3;
GrProp.Line1Caption := 'X(t)';
GrProp.Line2Caption := 'Ya(t)';
GrProp.Line3Caption := 'Yac(t)';
GrProp.Line4Caption := 'Ytr(t)';
ShowGraphik (T, X, T, Ya, T, Ytr, T, Yac, Im,Im,Im,Im);
GrProp.Line1Caption := 'dYac(t)';
GrProp.Line2Caption := 'dYtr(t)';
GrProp.Line3Caption := '';
GrProp.Line4Caption := '';
ShowGraphik (T, ddYac, T, ddYtr, T, Yac, T, Ytr, Im,Im,0,0);
AssignFile(F2,'Output1.txt');
ReWrite(F2);
Writeln(F2,'A=', A:7:4, ' K=', K:7:4, ' Y0=', Y0:7:4);
Writeln(F2,' Im=', Im:3, ' DT=', DT:5:2);
Writeln(F2,' a0=', a0:7:4, ' a1=', a1:7:4, ' a2=', a2:7:4, ' a3=', a3:7:4);
Writeln(F2, 'T',#9,'X',#9,'Ya',#9,'Yac'#9,'Ytr',#9,'DYac',#9,'DYtr',#9,'dYtr',#9,'dYac');
for I := 1 to Im do
Writeln(F2, T[i]:3:2,X[i]:8:4,Ya[i]:8:4, Yac[i]:8:4, Ytr[i]:8:4, DYac[i]:8:4, DYtr[i]:8:4, ddYtr[i]:8:4, ddYac[i]:8:4 );
CloseFile(F2);
readln;
end.
Текст модуля MyType
unit MyType;
interface
type
Ir = Integer;
Db = Double;
Vec = array[1..200] of Double;
implementation
end.
Текст модуля Graphik
unit Graphik;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,MyType, ToolWin, ComCtrls, Menus, ExtCtrls;
type
TGraphikFm = class(TForm)
VectGraphPB: TPaintBox;
PaintBox1: TPaintBox;
procedure PaintBox1Paint(Sender: TObject);
procedure VectGraphPBPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
ScaleX: Double;
ScaleY: Double;
// MScale: Double;
function GrToScrX(V: Double):Integer;
function GrToScrY(V: Double):Integer;
procedure DrawFizPnt(X,Y: Double);
procedure DrawFizLine( Cnv: TCanvas; X1,Y1,X2,Y2: Double);
public
PaintLock : Boolean;
VX1,VY1,VX2,VY2,VX3,VY3,VX4,VY4 : Vec;
VN1,VN2,VN3,VN4: Integer;
end;
TGrProp = record
Caption: String;
TopOff: Integer;
BottomOff: Integer;
LeftOff: Integer;
RightOff: Integer;
PointSize: Integer;
GridXCount: Integer;
GridYCount: Integer;
GridDigitsX : Integer;
GridDigitsY : Integer;
GridTextOff : Integer;
GridTextSize : Integer;
Line1Color: TColor;
Line2Color: TColor;
Line3Color: TColor;
Line4Color: TColor;
Point1Color: TColor;
Point2Color: TColor;
Point3Color: TColor;
Point4Color: TColor;
Point5Color: TColor;
Point6Color: TColor;
Line1Caption: string;
Line2Caption: string;
Line3Caption: string;
Line4Caption: string;
GridColor: TColor;
BacckgraundColor: TColor;
TextColor: TColor;
end;
var
GrProp : TGrProp;//Настройки графика
procedure ShowGraphik( VX1,VY1,VX2,VY2,VX3,VY3,VX4,VY4 : Vec; VN1,VN2,VN3,VN4: Integer);
implementation
{$R *.dfm}
uses IniFiles;
type
TGraphRange = record
MinX: Double;
MaxX: Double;
MinY: Double;
MaxY: Double;
NX : Integer;
NY : Integer;
end;
var
R : TGraphRange;
procedure LoadProp(FName: String);
var
Ini : TIniFile;
begin
Ini := TIniFile.Create(FName);
GrProp.TopOff := Ini.ReadInteger('Offset','Top',10);
GrProp.BottomOff := Ini.ReadInteger('Offset','Bottom',25);
GrProp.LeftOff := Ini.ReadInteger('Offset','Left',50);
GrProp.RightOff := Ini.ReadInteger('Offset','Right',10);
GrProp.GridTextOff := Ini.ReadInteger('Offset','Text',5);
GrProp.PointSize := Ini.ReadInteger('Size','Point',3);
GrProp.GridTextSize := Ini.ReadInteger('Size','Text',10);
GrProp.GridXCount := Ini.ReadInteger('Grid','XCount',10);
GrProp.GridYCount := Ini.ReadInteger('Grid','YCount',7);
GrProp.GridDigitsX := Ini.ReadInteger('Grid','XDigits',0);
GrProp.GridDigitsY := Ini.ReadInteger('Grid','YDigits',0);
GrProp.Line1Color := Ini.ReadInteger('Color','Line1',$008000);
GrProp.Line2Color := Ini.ReadInteger('Color','Line2',$008000);
GrProp.Line3Color := Ini.ReadInteger('Color','Line3',$008000);
GrProp.Line4Color := Ini.ReadInteger('Color','Line4',$008000);
GrProp.Point1Color := Ini.ReadInteger('Color','Point1',$0000FF);
GrProp.Point2Color := Ini.ReadInteger('Color','Point2',$0000FF);
GrProp.Point4Color := Ini.ReadInteger('Color','Point3',$0000FF);
GrProp.Point4Color := Ini.ReadInteger('Color','Point4',$0000FF);
GrProp.GridColor := Ini.ReadInteger('Color','Grid',$C0C0C0);
GrProp.BacckgraundColor := Ini.ReadInteger('Color','Backgraund',$FFFFFF);
GrProp.TextColor := Ini.ReadInteger('Color','Text',$000000);
GrProp.Line1Caption := '';
GrProp.Line2Caption := '';
GrProp.Line3Caption := '';
GrProp.Line4Caption := '';
Ini.Free;
end;
procedure MinMax(var Range: TGraphRange; X,Y:Vec; N:Integer; NewData: Boolean=False);
var
I : Integer;
K : Integer;
begin
if NewData then begin
K := 2;
Range.MinX := X[1];
Range.MaxX := X[1];
Range.MinY := Y[1];
Range.MaxY := Y[1];
end else begin
K := 1;
end;
for I := K to N do begin
if X[I] < Range.MinX then Range.MinX := X[I];
if X[I] > Range.MaxX then Range.MaxX := X[I];
if Y[I] < Range.MinY then Range.MinY := Y[I];
if Y[I] > Range.MaxY then Range.MaxY := Y[I];
end;
end;
procedure Normalize(var Range: TGraphRange);
begin
end;
procedure ShowGraphik( VX1,VY1,VX2,VY2,VX3,VY3,VX4,VY4 : Vec; VN1,VN2,VN3,VN4: Integer);
var
GraphikFm: TGraphikFm;
I : Integer;
begin
R.NX := GrProp.GridXCount;
R.NY := GrProp.GridYCount;
MinMax(R,VX1,VY1,VN1,True);
MinMax(R,VX2,VY2,VN2);
MinMax(R,VX3,VY3,VN3);
MinMax(R,VX4,VY4,VN4);
Normalize(R);
GraphikFm := TGraphikFm.Create(Application);
GraphikFm.PaintLock := True;
if GrProp.Caption <> '' then
GraphikFm.Caption := GrProp.Caption;
GraphikFm.VN1 := VN1;
for I := 1 to VN1 do begin
GraphikFm.Vx1[I] := Vx1[I];
GraphikFm.Vy1[I] := Vy1[I];
end;
GraphikFm.VN2 := VN2;
for I := 1 to VN2 do begin
GraphikFm.Vx2[I] := Vx2[I];
GraphikFm.Vy2[I] := Vy2[I];
end;
GraphikFm.VN3 := VN3;
for I := 1 to VN3 do begin
GraphikFm.VX3[I] := Vx3[I];
GraphikFm.VY3[I] := Vy3[I];
end;
GraphikFm.VN4 := VN4;
for I := 1 to VN4 do begin
GraphikFm.VX4[I] := Vx4[I];
GraphikFm.VY4[I] := Vy4[I];
end;
GraphikFm.Color := GrProp.BacckgraundColor;
GraphikFm.ShowModal;
GraphikFm.Free;
end;
procedure TGraphikFm.DrawFizLine(Cnv: TCanvas; X1, Y1, X2, Y2: Double);
var
PX1, PY1, PX2, PY2: Integer;
begin
PX1 := GrToScrX(X1);
PY1 := GrToScrY(Y1);
PX2 := GrToScrX(X2);
PY2 := GrToScrY(Y2);
with Cnv do begin
MoveTo(PX1, PY1);
LineTo(PX2, PY2);
end;
end;
procedure TGraphikFm.DrawFizPnt(X, Y: Double);
var
PX,PY: Integer;
LinePntSize : Integer;
begin
LinePntSize := GrProp.PointSize;
PX := GrToScrX(X);
PY := GrToScrY(Y);
with VectGraphPB.Canvas do begin
Ellipse(PX-LinePntSize, PY-LinePntSize, PX+LinePntSize, PY+LinePntSize);
MoveTo(PX, PY-LinePntSize);
LineTo(PX, PY+LinePntSize);
MoveTo(PX-LinePntSize, PY);
LineTo(PX+LinePntSize, PY);
end;
end;
function TGraphikFm.GrToScrX(V: Double): Integer;
begin
Result := Round(ScaleX*(V-R.MinX))+GrProp.LeftOff;
end;
function TGraphikFm.GrToScrY(V: Double): Integer;
begin
Result := Round(ScaleY*(R.MaxY-V))+GrProp.TopOff;
end;
procedure TGraphikFm.PaintBox1Paint(Sender: TObject);
var
T,Y: Integer;
begin
T:=90;
Y := 18;
PaintBox1.Canvas.Pen.Width := 2;
if GrProp.Line1Caption <> '' then
with PaintBox1.Canvas do begin
PaintBox1.Canvas.Pen.Color := GrProp.Line1Color;
MoveTo(T, Y);
T := T+20;
LineTo(T, Y);
T := T+10;
TextOut(T,Y-7,GrProp.Line1Caption);
end;
if GrProp.Line2Caption <> '' then
with PaintBox1.Canvas do begin
PaintBox1.Canvas.Pen.Color := GrProp.Line2Color;
T := T+50;
MoveTo(T, Y);
T := T+20;
LineTo(T, Y);
T := T+10;
TextOut(T,Y-7,GrProp.Line2Caption);
end;
if GrProp.Line3Caption <> '' then
with PaintBox1.Canvas do begin
PaintBox1.Canvas.Pen.Color := GrProp.Line3Color;
T := T+50;
MoveTo(T, Y);
T := T+20;
LineTo(T, Y);
T := T+10;
TextOut(t,Y-7,GrProp.Line3Caption);
end;
if GrProp.Line4Caption <> '' then
with PaintBox1.Canvas do begin
PaintBox1.Canvas.Pen.Color := GrProp.Line4Color;
T := T+50;
MoveTo(T, Y);
T := T+20;
LineTo(T, Y);
T := T+10;
TextOut(T,Y-7,GrProp.Line4Caption);
end;
end;
procedure TGraphikFm.VectGraphPBPaint(Sender: TObject);
var
I,tmp : Integer;
Vt,dt : Double;
StrT : string;
Xt,Yt : Integer;
begin
if PaintLock then Exit;
VectGraphPB.Canvas.Font.Size := GrProp.GridTextSize;
dt := (R.MaxX-R.MinX)/R.NX;
Vt := R.MinX;
for I := 0 to R.NX do begin
VectGraphPB.Canvas.Pen.Color := GrProp.GridColor;
DrawFizLine(VectGraphPB.Canvas,Vt,R.MinY,Vt,R.MaxY);
StrT := FloatToStrF(Vt,ffFixed,8,GrProp.GridDigitsX);
Xt := GrToScrX(Vt) - VectGraphPB.Canvas.TextWidth(StrT) div 2;
Yt := GrToScrY(R.MinY)+ GrProp.GridTextOff;
VectGraphPB.Canvas.Pen.Color := GrProp.TextColor;
VectGraphPB.Canvas.TextOut(Xt,Yt,StrT);
Vt := Vt + dt;
end;
dt := (R.MaxY-R.MinY)/R.NY;
Vt := R.MinY;
for I := 0 to R.NX do begin
VectGraphPB.Canvas.Pen.Color := GrProp.GridColor;
DrawFizLine(VectGraphPB.Canvas,R.MinX, Vt, R.MaxX,Vt);
StrT := FloatToStrF(Vt,ffFixed,8,GrProp.GridDigitsY);
Xt := GrToScrX(R.MinX) - GrProp.GridTextOff - VectGraphPB.Canvas.TextWidth(StrT);
Yt := GrToScrY(Vt)- VectGraphPB.Canvas.TextHeight(StrT) div 2;
VectGraphPB.Canvas.Pen.Color := GrProp.TextColor;
VectGraphPB.Canvas.TextOut(Xt,Yt,StrT);
Vt := Vt + dt;
end;
VectGraphPB.Canvas.Pen.Color := GrProp.Line1Color;
for I := 1 to VN1-1 do
DrawFizLine(VectGraphPB.Canvas,Vx1[I],Vy1[I],Vx1[I+1],Vy1[I+1]);
VectGraphPB.Canvas.Pen.Color := GrProp.Line2Color;
for I := 1 to VN2-1 do
DrawFizLine(VectGraphPB.Canvas,Vx2[I],Vy2[I],Vx2[I+1],Vy2[I+1]);
VectGraphPB.Canvas.Pen.Color := GrProp.Line3Color;
for I := 1 to VN3-1 do
DrawFizLine(VectGraphPB.Canvas,Vx3[I],Vy3[I],Vx3[I+1],Vy3[I+1]);
VectGraphPB.Canvas.Pen.Color := GrProp.Line4Color;
for I := 1 to VN4-1 do
DrawFizLine(VectGraphPB.Canvas,Vx4[I],Vy4[I],Vx4[I+1],Vy4[I+1]);
VectGraphPB.Canvas.Pen.Color := GrProp.Point1Color;
for I := 1 to VN1 do
DrawFizPnt(Vx1[I],Vy1[I]);
VectGraphPB.Canvas.Pen.Color := GrProp.Point2Color;
for I := 1 to VN2 do
DrawFizPnt(Vx2[I],Vy2[I]);
VectGraphPB.Canvas.Pen.Color := GrProp.Point3Color;
for I := 1 to VN3 do
DrawFizPnt(Vx3[I],Vy3[I]);
VectGraphPB.Canvas.Pen.Color := GrProp.Point4Color;
for I := 1 to VN4 do
DrawFizPnt(Vx4[I],Vy4[I]);
tmp := VectGraphPB.Canvas.Pen.Width;
VectGraphPB.Canvas.Pen.Width := 2;
VectGraphPB.Canvas.Pen.Color := clBlack;
DrawFizLine(VectGraphPB.Canvas,R.MinX, R.MinX, R.MaxX,R.MinX);
DrawFizLine(VectGraphPB.Canvas,R.MinX, R.MinY, R.MinX,R.MaxY);
VectGraphPB.Canvas.Pen.Width := tmp;
end;
procedure TGraphikFm.FormResize(Sender: TObject);
begin
PaintLock := True;
ScaleX := (VectGraphPB.Width-GrProp.LeftOff-GrProp.RightOff)/(R.MaxX-R.MinX);
ScaleY:= (VectGraphPB.Height-GrProp.TopOff-GrProp.BottomOff)/(R.MaxY-R.MinY);;
PaintLock := False;
end;
initialization
LoadProp(GetCurrentDir+'\Graphic.ini');
GrProp.Caption := '';
end.
Размещено на Allbest.ru
...Подобные документы
Решение дифференциального уравнения N-го порядка методом интегрирования при помощи характеристического уравнения, методом интегрирования и операторным методом для значений аргументов при заданных начальных условиях и нулевых уравнения 4–го порядка.
практическая работа [806,9 K], добавлен 05.12.2009Построение аппроксимирующей зависимости методом наименьших квадратов. Расчет интеграла по Ричардсону. Последовательность действий при аппроксимации экспоненциальной зависимостью. Определение корня уравнения методом простых итераций и решение задачи Коши.
курсовая работа [550,5 K], добавлен 13.03.2013Анализ предметной области объектно-ориентированного программирования. Языки Delphi, Object Pascal - объектно-ориентированная среда программирования. Основные алгоритмические решения. Решение дифференциального уравнения методом Рунге-Кутта в среде Excel.
курсовая работа [1,5 M], добавлен 02.04.2011Численный метод для решения однородного дифференциального уравнения первого порядка методом Эйлера. Решение систем дифференциальных уравнений методом Рунге–Кутта. Решение краевой задачи. Уравнения параболического типа, а также Лапласа и Пуассона.
курсовая работа [163,5 K], добавлен 27.05.2013Численное решение задачи Коши для обыкновенного дифференциального уравнения первого и второго порядка методом Эйлера и Рунге-Кутты и краевой задачи для ОДУ второго порядка с применением пакета MathCad, электронной таблицы Excel и программы Visual Basic.
курсовая работа [476,2 K], добавлен 14.02.2016Рассмотрение двух методов нахождения приближенного корня дифференциального уравнения, применение их на практике. Графическая интерпретация метода Эйлера. Решение задачи усовершенствованным методом Эйлера. Программная реализация, блок-схемы и алгоритм.
курсовая работа [246,8 K], добавлен 17.06.2013Изучение численных методов решения нелинейных уравнений, используемых в прикладных задачах. Нахождение корня уравнения методом простой итерации и методом касательных (на примере уравнения). Отделение корней графически. Программная реализация, алгоритм.
курсовая работа [1,7 M], добавлен 15.06.2013Решение уравнения методом половинного деления. Программа в Matlab для уравнения (x-2)cos(x)=1. Решение нелинейных уравнений методом Ньютона. Интерполяция заданной функции. Решение системы линейных алгебраических и обыкновенных дифференциальных уравнений.
курсовая работа [1,4 M], добавлен 15.08.2012Численные методы решения нелинейных уравнений, используемых в прикладных задачах. Составление логической схемы алгоритма, таблицы индентификаторов и программы нахождения корня уравнения методом дихотомии и методом Ньютона. Ввод программы в компьютер.
курсовая работа [220,0 K], добавлен 19.12.2009Математическое описание задачи решения обыкновенного дифференциального уравнения численным явным методом Рунге-Кутта, разработка схемы алгоритма и написание программы в среде программирования Microsoft Visual Studio 2010. Тестирование работы программы.
курсовая работа [1,1 M], добавлен 22.01.2014Основы работы в MS EXCEL. Элементы двумерной диаграммы. Особенность работы с матричными формулами. Построение диаграмм в MS EXCEL. Решение системы линейных уравнений методом обратной матрицы и методом Крамера. Инструменты и меню для работы с диаграммой.
реферат [5,0 M], добавлен 19.01.2011Программа вычисления интеграла методом прямоугольников. Решение задачи Коши для дифференциальных уравнений. Модифицированный метод Эйлера. Методы решения краевой задачи для обыкновенного дифференциального уравнения. Задачи линейного программирования.
методичка [85,2 K], добавлен 18.12.2014Идея численного интегрирования. Создание программы, вычисляющей определенный интеграл методом трапеций. Листинг программы, результаты работы. Проверка в среде Mathcad. Зависимость точности вычисления от количества отрезков разбиения, расчет погрешности.
отчет по практике [106,8 K], добавлен 28.04.2013Изучение численных методов решения нелинейных уравнений. Построение годографа АФЧХ, графиков АЧХ и ФЧХ с указанием частот. Практическое изучение численных методов интегрирования дифференциальных уравнений высокого порядка, метод Рунге-Кутта 5-го порядка.
курсовая работа [398,3 K], добавлен 16.06.2009Аппроксимация линейной, степенной и квадратичной функции. Определение корней уравнения вида f(x)=0 методом половинного деления. Вычисление определенного интеграла методом прямоугольников, трапеций, парабол и Эйлера. Интерполяция формулой Лагранжа.
курсовая работа [1,3 M], добавлен 21.09.2011Анализ методов объектно-ориентированного программирования на примере численных. Детальная характеристика модулей и связь их в одну общую программу. Принципы интегрирования по общей формуле трапеции и решение дифференциального уравнения методом Эйлера.
курсовая работа [511,6 K], добавлен 25.03.2015Разработка программы, которая вычисляет определенный интеграл методом трапеций для подынтегральной функции и моделирует задачу вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi. Решение задачи с помощью пакета MathCAD.
курсовая работа [738,8 K], добавлен 24.05.2013Обзор существующих методов по решению нелинейных уравнений. Решение нелинейных уравнений комбинированным методом и методом хорд на конкретных примерах. Разработка программы для решения нелинейных уравнений, блок-схемы алгоритма и листинг программы.
курсовая работа [435,8 K], добавлен 15.06.2013Отделение корней методом простых интеграций. Дифференцирование и аппроксимация зависимостей методом наименьших квадратов. Решение нелинейного уравнения вида f(x)=0 методом Ньютона. Решение системы линейных уравнений методом Зейделя и методом итераций.
курсовая работа [990,8 K], добавлен 23.10.2011Особенности точных и итерационных методов решения нелинейных уравнений. Последовательность процесса нахождения корня уравнения. Разработка программы для проверки решения нелинейных функций с помощью метода дихотомии (половинного деления) и метода хорд.
курсовая работа [539,2 K], добавлен 15.06.2013