- •Курсовая работа по информатике
- •Постановка задачи
- •Теоретическая часть
- •4. Метод неопределенных коэффициентов
- •5. Численное интегрирование
- •5.1. Метод левых прямоугольников
- •5.2. Метод средних прямоугольников
- •5.3. Формула средних прямоугольников
- •5.4. Метод правых прямоугольников
- •5.5. Формула правых прямоугольников
- •5.6. Метод Симпсона
- •5.7. Метод трапеций
- •6. Постановка задачи Коши
- •7. Разностные схемы Эйлера
- •8. Метод Рунге-Кутта второго порядка (Метод Эйлера-Коши)
- •9. Метод Рунге-Кутта четвертого порядка
- •Практическая часть
- •2.Численная реализация решения систем дифференциальных уравнений (2) и (3)
- •2.1. Реализация решения в пакете MathCad методом Эйлера (3 модификация).
- •1.2. Реализация решения в пакете MathCad методом Рунге-Кутта.
- •3. Решение задачи аппроксимации зависимости I(t) на интервале
- •3.1. Реализация решения в пакете Excel.
- •3.2. Реализация решения в пакете MathCad, используя алгоритм метода наименьших квадратов.
- •1 Участок
- •2 Участок
- •4. Численное интегрирование
- •4.2. Реализация решения в пакете MathCad
- •Список литературы
- •Приложения
3. Решение задачи аппроксимации зависимости I(t) на интервале
,
3.1. Реализация решения в пакете Excel.
В качестве исходной функции взяты дискретные значения тока, полученные из решения методом Эйлера системы дифференциальных уравнений с помощью программы, написанной на языке C++, и построен график (рис.5) этой зависимости:
Используя мастер диаграмм с выводом уравнения линии тренда, построим отдельно дискретную зависимость I(t) на интервале и добавим линию тренда. (см. Приложение 2). Путем предварительных пробных построений было установлено, что для лучшей аппроксимации необходимо область изменения функции разбить на 2 участка:
от 0 до 0.0003;
от 0.0003 до 0.005
Для выбранных участков были построены аппроксимирующие полиномы 3 степени (рис. 6)
.
Поиск решений был тоже проведен для двух участков
от 0 до 0.0003;
от 0.0003 до 0.005
Значения I(t) и аппроксимирующего полинома, полученного с помощью поиска решений: (см. Приложение 3)
В результате поиска решений получены коэффициенты:
коэффициенты 1 участок |
коэффициенты 2 участок |
|
||
a2 |
-1,962 |
b2 |
9682,100 |
|
а1 |
144,587 |
b1 |
-49,939 |
|
а0 |
0,007 |
b0 |
0,059 |
|
I1(t)=-1,962*x2+144,587*x+0,007 |
||||
I2(t)=9682,1*x2-49,939*x+0,059 |
Ошибка аппроксимации:
|
0,000299 |
величина достоверности аппроксимации |
0,999701 |
Рисунок 7 График I(t) и аппроксимирующего полинома, полученного с помощью поиска решения
3.2. Реализация решения в пакете MathCad, используя алгоритм метода наименьших квадратов.
В качестве исходной функции взяты дискретные значения тока, полученные из решения в пакете MathCAD методом Рунге-Кутта системы дифференциальных уравнений. Для более точного вычисления функцию разбиваем на 2 участка.
1 Участок
Рисунок
8 График
I(t)
и аппроксимирующей на 1 участке
2 Участок
вычисление достоверности
Рисунок
9 График
I(t)
и аппроксимирующей на 2 участке
Вывод: из сравнения результатов, полученных в Excel и MathCAD видно, что результат, полученный в пакете MathCAD методом наименьших квадратов, немного точнее результатов, полученных в пакете Excel.
4. Численное интегрирование
4.1. Реализация решения на языке программирования высокого уровня C++ методом трапеции.
В качестве интегрируемой функции взята аналитическая функция, полученная в пакете Excel с помощью мастера диаграмм.
Б лок-схема
Программный код:
#include <iostream.h>
#include <math.h>
//Квадрат аналитической функции I(t), полученной в пакете Excel
double I(double t)
{
double Res, It;
if {(t<0.003)
It=1Е+09*(pow(t.3))-1Е+06*pow(t,2)_+385.49*t+5Е-05
Else
{
It =-926345*t(pow(t,3)+17295*pow(t,2)-67.215*t+0.0695;
}
}
Res = pow(It, 2);
return Res;
}
void main()
{
double R4, T1, T2, h, S, Integ, Q;
int i, n;
cout << "********** METOg LEBbIX np. **********\n";
cout << "BBEguTE COnPOTuBLEHuE R4 (OM):\n";
cin >> R4;
cout << "BBEguTE T1 (c):\n";
cin >> T1;
cout << "BBEguTE T2 (c):\n";
cin >> T2;
cout << "BBEguTE KOL-BO PA36uEHuu n:\n";
cin >> n;
h = (T2 - T1) / n;
cout << "WAr h = " << h << " c.\n";
S = 0;
for (i=0; i <= (n-1); i++)
{
S += I(T1 + h * i);
}
Integ = h * S;
Q = R4 * Integ;
cout << "Integ = " << Integ;
cout << "\nKOL-BO TEnLOTbI Q = " << Q << "\n\n\n";
}
Результаты работы программы:
R4= 1.88
t1= 0.00
t2= 0.005
n= 200
shag h=0.00002500
INTEG=0.00000254
kolichestvo teploti: Q=0.00000478