Курсовая работа: Численное дифференцирование

В современных науке и технике важную роль играет математическое моделирование, заменяющее эксперименты с реальными объектами экспериментами с их математическими моделями.


Дата добавления на сайт: 08 февраля 2025

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовой работе
по дисциплине «Вычислительная математика»
на тему «Численное дифференцирование»

Введение

В современных науке и технике важную роль играет математическое моделирование, заменяющее эксперименты с реальными объектами экспериментами с их математическими моделями. Но для практических задач довольно редко удается найти аналитическое решение уравнений, составляющих математическую модель явления. Поэтому приходится применять численные методы.
Численное решение прикладных задач всегда интересовало математиков. Резкий скачок в развития вычислительной техники положил начало бурному развитию численных методов.
Численные методы представляют собой набор алгоритмов, позволяющих получать приближенное численное решение поставленных математических задач. Как и любой другой численный метод, эти методы позволяют с заданной точностью получить нужные результаты, используя заданные алгоритмы, не прибегая к выполнению аналитических преобразований над входными данными. Одной из подзадач численных методов, является численное дифференцирование. Численное дифференцирование облегчает работу в случае, если выполнение аналитических преобразований достаточно трудоёмко или же исходные данные, то есть функция, подлежащая дифференцированию, представляет собой результаты проведения экспериментов. Кроме того, численное дифференцирование широко используется при разработке численных методов решения многих задач (решение дифференциальных уравнений, поиск решений не линейных уравнений, поиск точек экстремума функции и др.).

1. Обзор методов численного дифференцирования

.1 Вычисление производной, используя простейшие формулы

Предположим, что функция f дифференцируема в окрестности точки х достаточное количество раз[1]. Исходя из определения производной:



можно получить две простейшие приближенные формулы:




где h - малый параметр (шаг).
Эти формулы часто называют правой и левой разностными производными.
Оценка погрешностей данных формулы производится по следующей формуле:


где


где - точка, принадлежащая промежутку ).
Таким образом, формулы левых и правых разностных производных имеют первый порядок точности.
Для вычисления второй производной данным методом применяется следующая формула:



Данную величину также называют второй разностной производной.
Для вычисления погрешности, воспользуемся соответствующим разложением по формуле Тейлора:



отсюда получаем:



Тогда для оценки погрешности можно использовать следующее неравенство:



Таким образом вторая разностная производная имеет второй порядок точности.
Приведенные формулы численного дифференцирования имеют простую геометрическую интерпретацию. На рисунке 1.1 a) изображен график функции и отмечены точки N-, N0 и N+, с координатами (x-h, f(x-h)), (x,f(x)) и (x+h,f(x+h)) соответственно.


Рисунок 1.1 - Графики функций

Производная f’(x) равна tg() относительно оси Ox в точке N0. Тангенс угла наклона прямых N- N0 и N+ N0, близок к значению производной в точке х. Однако можно заметить, что тангенс прямой N- N+, которая изображена на рисунке 1.1 б), более близок к искомому значению.
Логично предположить, что можно использовать тангенс прямой N- N+ для более точного нахождения производной в указанной точке. Получившаяся формула выглядит следующим образом:



Данную формулу также называют центральной разностной производной.
Для определения погрешности используют следующую формулу:


где


Формула имеет вторую степень точности.
Таким образом можно получить формулы любой точности, однако для этого нужно знать значения функции в большем количестве точек.
Например, формула, имеющая четвертый порядок, точности имеет следующий вид:



Данный способ удобен в тех случаях, когда точка лежит на заданных узлах, но вычислить производную точки, не принадлежащей узлам, не предоставляется возможным.

.2 Численное дифференцирование, основанное на интерполяции алгебраическими многочленами

Предположим, что f(x) в окрестности точки x аппроксимируется некоторой другой функцией g(x), и производная g’(x) легко вычисляется[2]. Тогда:



Пусть Pn(x) - интерполяционный многочлен n-ой степени с узлами интерполяции x0 mat[0, j])
{= mat[0, i]; buf2 = mat[1, i];[0, i] = mat[0, j]; mat[1, i] = mat[1, j];[0, j] = buf1; mat[1, j] = buf2;
}
}
//находим проихводную, если это возможно(dif.isSolve(mat, x1))
{
//timer для подчета тактов процессораtimer = new Stopwatch();
timer.Start();.Text = String.Format(\"f\'(x) = {0:F5}\", dif.Solve(mat, x1));.ShowAnswer();.Stop();.Text += String.Format(\"\\nTime: {0} ticks.\", timer.ElapsedTicks);.Invalidate();
}label1.Text = \"Нет решения\";
}void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
//переключаем интерфейсную ссылку на нужный режим
if (comboBox1.SelectedIndex == 0) dif = Razn;dif= Interp;
}void panel1_Paint(object sender, PaintEventArgs e)
{buffer;context;= BufferedGraphicsManager.Current;.MaximumBuffer = new System.Drawing.Size(panel1.Width + 1, panel1.Height + 1);rec = new Rectangle(0, 0, panel1.Width, panel1.Height);= context.Allocate(e.Graphics, rec);
//ТУТ ДОЛЖНА БЫТЬ ОТРИСОВКА КООДРИНАТНОЙ СЕТКИ
//И графика из точек
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++zoom = form2.trackBar1.Value;font = new System.Drawing.Font(\"Arial\", 6);
//используемые кистиpen = new Pen(Color.Black); //для секти
Pen penRed = new Pen(Color.Red);//для графика по точкам
//используемые заливки
Brush brush = new SolidBrush(Color.Black); //для сетки
//Отрисовка системы коодринат.Graphics.Clear(Color.White);Xs = (int)(form2.x*zoom);Ys = (int)(form2.y * zoom);maxX = panel1.Width / 2 ;maxY = panel1.Height / 2 ;.Graphics.TranslateTransform(maxX-Xs, maxY+Ys);
//рисуем оси Х и Y, а так же разметку
buffer.Graphics.DrawLine(pen, 0, maxY-Ys, 0, -maxY-Ys);.Graphics.DrawLine(pen, maxX+Xs, 0, -maxX+Xs, 0);
//int stepX =StepM = panel1.Width / zoom;StepMin = (int)(maxX - Xs)/zoom;(int j = 0; j points[j].X)
{= points[i];[i] = points[j];[j] = buf;
}
}(int i = 0; i 0.0000001M)
{= false;;
}(matrix[0, i] == point) PointFind = true;
}PointFind&&StepRight;
}decimal Solve(decimal[,] matrix, decimal point)
{pointInd=0;N=matrix.GetLength(1);
decimal h = matrix[0, 1] - matrix[0, 0];
//ищем номер точки для дифференцирования
for (int i=0; i 0; i--)
{.Text += String.Format(\"{0:F5}x^{1} + \", intrFunc[i], i);
}.Text += String.Format(\"{0:F5}\\n\", intrFunc[0]);.Text += \"Derivative of Polynomial:\\n\";(int i = difPolinom.Length - 1; i > 0; i--)
{.Text += String.Format(\"{0:F5}x^{1} + \", difPolinom[i], i);
}.Text += String.Format(\"{0:F5}\\n\", difPolinom[0]);
}
}
}
Модуль MathBase.cs:System;System.Collections.Generic;System.Linq;System.Text;Kursavik_sem_3
{MathBase
{
//метод копирует матрицу MatIn в матрицу MatOutvoid copy(decimal[,] MatIn, decimal[,] MatOut)
{a = MatIn.GetLength(0);b = MatIn.GetLength(1);(int i = 0; i maxVol)
{= Math.Abs(matrix[j, i]);= j;
}
}
//меняем строки местами(matrix,max,sw);kof;
//вычитаем строки.(int j = i + 1; j = 0; i--)
{resul = buffer[i, b - 1];(int j = b - 2; j > i; j--) resul -= buffer[i, j] * Solve[j];[i] = resul / buffer[i, i];
}
}
//метод берет производную от полиномаstatic void GetDifferPolinom(decimal[] inMat, decimal[] outMat)
{(int i = 0; i Grafic (рисуонк Б.7).


Рисунок Б.7 - Включение окна настройки графика

В окне настройки графика возможно:
) Задать смещение графика по осям.
) Задать масштаб графика.


Рисунок Б.8 - Настройка графика

Настройки графика.
Для настройки смещения графика по осям, необходим в поля (выделены 1 на рисунке Б.9) прописать необходимое смещения.
Для масштабирования графика необходимо двигать ползунок (выделен 2 на рисунке Б.9).


Рисунок Б.9 - Выбор параметров графика

Комментарии:

Вы не можете оставлять комментарии. Пожалуйста, зарегистрируйтесь.