Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладное программирование КР.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.92 Mб
Скачать

3 Обработка экспериментальных данных

На практике часто приходится сталкиваться с задачей сглаживания экспериментальных данных – задача аппроксимации.

Основная задача аппроксимации – построение приближенной (аппроксимирующей) функции наиболее близко проходящей около данных точек или около данной непрерывной функции [8].

Аппроксимация – процесс подбора эмпирической функции для установления из опыта функциональной зависимости

Эмпирические формулы служат для аналитического представления опытных данных.

3.1 Метод наименьших квадратов

Суть метода наименьших квадратов заключается в нахождении коэффициентов линейной зависимости, при которых функция двух переменных а и b принимает наименьшее значение. То есть, при данных а и b сумма квадратов отклонений экспериментальных данных от найденной прямой будет наименьшей.

Таким образом, решение примера сводится к нахождению экстремума функции двух переменных.

Метод наименьших квадратов широко используется для обработки экспериментальных данных, которые измерены с заметной погрешностью [9].

Метод наименьших квадратов заключается в решении системы, составленной следующим образом [10]: находим частные производные функции по переменным а и b, приравниваем эти производные к нулю.

, (3.1.1)

где и (i = 1, 2, ... n) – величины, полученные в результате эксперимента, – количество испытаний.

Решаем полученную систему уравнений любым методом и получаем формулы для нахождения коэффициентов по методу наименьших квадратов (МНК).

Выразим параметры a и b из системы (3.1.1), получим следующие формулы:

(3.1.2)

Схема алгоритма вычисления параметров линейной корреляции методом наименьших квадратов приведена на рисунке 3.1.2.

Рисунок 3.1.2 – Схема алгоритма метода наименьших квадратов

3.2 Реализация метода наименьших квадратов

Для аппроксимации экспериментальных данных в системе MathCAD решаем систему уравнений методом Крамера. Проведем проверку с помощью функции Givin-Find.

Введем эксперементальные данные, где i - количество х и y

Составим систему из двух уравнений с двумя неизвестными

Вычислим суммы в уравнениях

Подставим полученные значения обратно в уравнения

Полученную систему уравнений решим методом Крамера.

Cоставим матрицу

Найдем определитель матрицы

Найдем определитель а

Найдем определитель b

Определим коэффициенты а и b (значения округлим до десятых)

Искомая линейная функция

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

Печатаем ключевое слово Given. Оно указывает Mathcad , что далее следует система уравнений.

Печатаем ключевое слово

Mathcad возвращает решение системы. Число аргументов должно быть равно числу неизвестных.

Изобразим графически линейную функцию в зависимости от эксперементальных данных

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

Рисунок 3.2.1 – Проверка результатов

Метод наименьших квадратов, реализованный на языке программирования C#, выглядит следующим образом:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Наим.квадраты /*Данная программа находит аппроксимирующую зависимость табличных данных*/

{ /*в виде линейной функции методом наименьших квадратов*/

class Program

{

static void Main()

{ /*Используем двумерный массив для ввода зксперементальных данных */

/*Первая строка будет соответствовать значениям Х, вторая - Y*/

double[,] XY = { {1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7}, {0, 0.07, 0.32, 1.12, 1.87, 2.62, 4.81} };

/*Подсчитываем суммы всех значений Х и Y, а также суммы Х^2 и X*Y*/

double summaXY = 0, summaX = 0, summaX2 =0, summaY = 0;

int j;

int i=0;

for (j = 0; j <= 6; j++)

{

summaX += XY[i, j];

summaX2 += XY[i, j] * XY[i, j];

summaY += XY[i + 1, j];

summaXY += XY[i, j] * XY[i + 1, j];

}

Console.WriteLine("Итого сумма summaX =\t {0:f3}", summaX);

Console.WriteLine("Итого сумма summaX^2 =\t {0:f3}", summaX2);

Console.WriteLine("Итого сумма summaY =\t {0:f3}", summaY);

Console.WriteLine("Итого сумма summaXY =\t {0:f3}\n", summaXY);

/*Из стандартной формулы выражаем сразу коэффициенты*/

/*Используя метод подстановки, находим сначала коэффициент а, потом коэффициент b*/

double n = j; // где n - общее количество значений Х или Y

double a = (n*summaXY - summaX*summaY)/(n*summaX2 - Math.Pow(summaX,2));

double b = (summaY - a * summaX) / n;

Console.WriteLine("Кэффициент а =\t {0:f1}",a);

Console.WriteLine("Кэффициент b =\t {0:f1}\n", b);

Console.WriteLine("Искомая функция y = {0:f1}x{1:f0}", a, b);

return;

}

}

}

Результат выполнения и работы программы изображен на рисунке 3.2.2

Рисунок 3.2.2 – Выполнение программы

Вышеизложенная программа разбита на функциональные блоки – методы, отвечающие за свои операции:

  • static void Main() вызывает методы инициализации исходных данных, проверяет полученные значения и вызывает метод расчет линейной аппроксимации, выводит на экран результаты вычислений.

  • double[,] XY используем двумерный массив для ввода таблицы данных.

Также были применены методы стандартных библиотек и следующие конструкции языка программирования C# [12]:

  • Math.Pow(double x, double y) возвращает указанное число x, возведенное в указанную степень y;

  • for структура повторения автоматически контролирует все детали повторения.

Метод наименьших квадратов позволяет получать коэффициенты аппроксимации не только линейной зависимости, имеет большое практическое применение. Результат, полученный разработанным приложением, совпадает с результатом, полученным средствами MathCad.

Заключение

В ходе выполнения данной курсовой работы были изучены основные конструкции языка C#, реализованы алгоритмы средствами языка программирования C# в среде Visual Studio. Так же были освоены стандартные алгоритмы решения задач методами вычислительной математики. Были написаны ряд прикладных программ на языке программирования C# для решения поставленных задач. Проверка полученных результатов произведена в программном продукте MathCad. Сделан вывод, о широких возможностях применения численных методов для приближенного решения задач, полученные данным способом решения обладают достаточной точностью.

‎библиографический список

1. Марюшин Л.А. Методы математического моделирования в теплоэнергетических процессах. Курс лекций. – Москва:МГИУ 2010. – 114 с.

2. http://edu.dvgups.ru/METDOC/ENF/VMATEM/WM/METOD/VINOGRADOVA/

WEBUMK/frame/3.htm

3. Соколова Е.В., Заскалина Е.Н. MathCAD в технических и экономических расчетах: Учебное пособие / Е.В. Соколова, Е.Н. Заскалина. – Челябинск: Издательский центр ЮУрГУ, 2012 – 121 с.

4. http://ru.wikipedia.org/wiki/Метод_прямоугольников

5. http://dic.academic.ru/dic.nsf/ruwiki/1562004

6. Макаров Е. Г. Mathcad: учебный курс. – СПб: Питер, 2009 г – 384с.

7. Албахари Д. C# 5.0. Карманный справочник / Джо Албахари, Бен Албахари. – Издательство: Вильямс, 2012. – 288 с.

8. http://www.tgspa.ru/info/education/faculties/ffi/itimoi/programm/aproksimazia

/1.1.html

9. Калиткин Н.Н. Численные методы – М.: Наука, 1978. – 512 с.

10. http://www.cleverstudents.ru/articles/mnk.html

11. Гурский, Д. А. Вычисления в Mathcad 12 / Гурский Д. А., Турбина Е. С. – СПб: Питер, 2006. – 544с.

12. Шилдт, Г. Полный справочник по C# / Герберт Шилдт. – Издательство: Вильямс, 2004. – 752с

13. Харви Дейтел, Пол Дейтел. Как программировать на 1С: 3-е изд.Пер. с англ. –М.: Бином-Пресс, 2002 г. – 1168 с.:ил.