Компьютерное моделирование типовых вычислительных алгоритмов

Автор работы: Пользователь скрыл имя, 07 Декабря 2011 в 15:00, курсовая работа

Краткое описание

Применение математических методов для разработки технологии принятия решений может исключить или уменьшить значение субъективных факторов. При этом математическая модель может быть выражена в форме сложных математических структур, для решения которых используются численные методы вычислительной математики, реализация которых на ЭВМ требует соответствующего программного обеспечения. В настоящее время для обработки табличных данных принимаются наиболее распространенные методы аппроксимации и интерполяции такие, как интерполяционный многочлен Лагранжа и метод наименьших квадратов.

Содержимое работы - 1 файл

$ Курсовая.docx

— 98.07 Кб (Скачать файл)

                Другим распространенным критерием близости является следующий:

    R =

.

                Этот критерий менее  распространен в связи с аналитическими и вычислительными трудностями, связанными с отсутствием гладкости  функции и ее дифференцируемости.

                В обоих рассмотренных  случаях в качестве значения функции  yi можно брать не только абсолютные, но и относительные значения.

    Выделяют  две задачи:

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

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

    При выборе аппроксимации следует исходить из конкретной задачи исследования. Обычно, чем более простое уравнение  используется для аппроксимации, тем  более приблизительно получаемое описание зависимости. Поэтому очень важно  считывать, насколько существенны  и чем обусловлены отклонения конкретных значений от получаемого  тренда. При описании зависимости  эмпирически определенных значений можно добиться и гораздо большей  точности, используя какое – либо более сложное, много параметрическое уравнение. Однако нет никакого смысла стремиться с максимальной точностью передать случайные отклонения величин в конкретных рядах эмпирических данных. Гораздо важнее уловить общую закономерность, которая в данном случае наиболее логично и с приемлемой точностью выражается именно двухпараметрическим уравнением степенной функции.

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

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

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

    

          Запишем выражение  критерия аппроксимации при   =1 (i=1,2,…,n) для полиномиального :

    

.

          Искомые переменные aj можно найти из необходимого условия минимума R по этим переменным, т.е. dR/dap =0 (для p=0,1,2,…k). Продифференцируем по ap (p – текущий индекс): dR/dap = 2 p=0,1,2,…,k, i=1,2,..,n. Значения индексов суммирования для простоты опущены.

          После очевидных  преобразований(сокращение на два, раскрытие скобок, изменение порядка суммирования) получим 

    dR/dap =

    p=0,1,2,…к,

    перепишем последние равенства  p=0,1,2,…к, i=1,2…,n.

    Получилась  система n+1 уравнений с таким же количеством неизвестных аj , причем линейная относительно этих переменных. Эта система называется системой нормальных уравнений. Из ее решения находятся параметры аj аппроксимирующей функции, обеспечивающие minR, т.е. наилучшее возможное квадратичное приближение. Зная коэффициенты, можно (если нужно) вычислить величину R(например для сравнения различных аппроксимирующих функций). Следует помнить, что при изменении даже одного значения исходных данных(или пары значений) хi, yi, или одного из них) все коэффициенты изменяют в общем случае свои значения, так как они полностью определяются исходными данными. Поэтому при повторении аппроксимации с несколько изменившимися данными(например, вследствие погрешностей измерения, помех, влияния неучтенных факторов и т.п.) получится другая аппроксимирующая функция, отличающаяся коэффициентами. Обратим внимание на то, что коэффициенты аj полинома находятся из решения системы уравнений, т.е. они связаны между собой. Это приводит к тому, что если какой – то коэффициент вследствие его малости захочется отбросить, придется пересчитывать заново оставшиеся. Можно рассчитать количественные оценки тесноты связи коэффициентов. Существует специальная теория планирования экспериментов, которая позволяет обосновать и рассчитать значения хj, используемые для аппроксимации, чтобы получить заданные свойства коэффициентов (несвязанность, минимальная дисперсия коэффициентов и т.д.) или аппроксимирующей функции(равная точность описания реальной зависимости в различных направлениях, минимальная дисперсия предсказания значения функции и т.д.).

    В случае постановки другой задачи –  найти аппроксимирующую функцию, обеспечивающую погрешность не хуже заданной, - необходимо подбирать и структуру этой функции. Эта задача значительно сложнее  предыдущей(найти параметры аппроксимирующей функции заданной структуры, обеспечивающей наилучшую возможную погрешность) и решается в основном путем перебора различных функций и сравнения получающихся мер близости. С повышением точности аппроксимации растет и сложность функции(при полиномиальных аппроксимирующих функциях), что делает её менее удобной при  использовании.

 

  1. Текст программы 

Sub Макрос1()

'

' Макрос1 Макрос

' 

'

    Dim i As Integer

    Dim x(1 To 10) As Double

    Dim y(1 To 10) As Double

    Dim a, b, a1, b1, a2, b2 As Double

    Dim Sx, Sx2, Sy, Sxy As Double

    Range("A1").Select

    ActiveCell.FormulaR1C1 = "Объем, т.шт."

    Range("B1").Select

    ActiveCell.FormulaR1C1 = "0.5"

    Range("C1").Select

    ActiveCell.FormulaR1C1 = "1"

    Range("D1").Select

    ActiveCell.FormulaR1C1 = "1.5"

    Range("E1").Select

    ActiveCell.FormulaR1C1 = "2"

    Range("F1").Select

    ActiveCell.FormulaR1C1 = "2.5"

    Range("G1").Select

    ActiveCell.FormulaR1C1 = "3"

    Range("H1").Select

    ActiveCell.FormulaR1C1 = "3.5"

    Range("I1").Select

    ActiveCell.FormulaR1C1 = "4"

    Range("J1").Select

    ActiveCell.FormulaR1C1 = "4.5"

    Range("K1").Select

    ActiveCell.FormulaR1C1 = "5"

    Range("A2").Select

    ActiveCell.FormulaR1C1 = "Переменные издержки, т.р."

    Range("B2").Select

    ActiveCell.FormulaR1C1 = "32"

    Range("C2").Select

    ActiveCell.FormulaR1C1 = "57"

    Range("D2").Select

    ActiveCell.FormulaR1C1 = "82"

    Range("E2").Select

    ActiveCell.FormulaR1C1 = "114"

    Range("F2").Select

    ActiveCell.FormulaR1C1 = "123"

    Range("G2").Select

    ActiveCell.FormulaR1C1 = "163"

    Range("H2").Select

    ActiveCell.FormulaR1C1 = "200"

    Range("I2").Select

    ActiveCell.FormulaR1C1 = "243"

    Range("J2").Select

    ActiveCell.FormulaR1C1 = "278"

    Range("K2").Select

    ActiveCell.FormulaR1C1 = "372"

    Range("A3").Select

    ActiveCell.FormulaR1C1 = "Постоянные издержки, т.р."

    Range("B3").Select

    ActiveCell.FormulaR1C1 = "1001"

    Range("C3").Select

    ActiveCell.FormulaR1C1 = "1011"

    Range("D3").Select

    ActiveCell.FormulaR1C1 = "1024"

    Range("E3").Select

    ActiveCell.FormulaR1C1 = "1034"

    Range("F3").Select

    ActiveCell.FormulaR1C1 = "1043"

    Range("G3").Select

    ActiveCell.FormulaR1C1 = "1037"

    Range("H3").Select

    ActiveCell.FormulaR1C1 = "1008"

    Range("I3").Select

    ActiveCell.FormulaR1C1 = "1066"

    Range("J3").Select

    ActiveCell.FormulaR1C1 = "1040"

    Range("K3").Select

    ActiveCell.FormulaR1C1 = "1017"

    Range("A4").Select

    ActiveCell.FormulaR1C1 = "Прибыль,убыток, т.р."

    Range("B4").Select

    ActiveCell.FormulaR1C1 = "5"

    Range("C4").Select

    ActiveCell.FormulaR1C1 = "35"

    Range("D4").Select

    ActiveCell.FormulaR1C1 = "108"

    Range("E4").Select

    ActiveCell.FormulaR1C1 = "240"

    Range("F4").Select

    ActiveCell.FormulaR1C1 = "455"

    Range("G4").Select

    ActiveCell.FormulaR1C1 = "755"

    Range("H4").Select

    ActiveCell.FormulaR1C1 = "1158"

    Range("I4").Select

    ActiveCell.FormulaR1C1 = "1739"

    Range("J4").Select

    ActiveCell.FormulaR1C1 = "2376"

    Range("K4").Select

    ActiveCell.FormulaR1C1 = "3154"

    Range("A5").Select

    ActiveCell.FormulaR1C1 = "Суммарные издержки т.р."

    Range("B5").Select

    ActiveCell.FormulaR1C1 = "1033"

    Range("C5").Select

    ActiveCell.FormulaR1C1 = "1068"

    Range("D5").Select

    ActiveCell.FormulaR1C1 = "1106"

    Range("E5").Select

    ActiveCell.FormulaR1C1 = "1148"

    Range("F5").Select

    ActiveCell.FormulaR1C1 = "1166"

    Range("G5").Select

    ActiveCell.FormulaR1C1 = "1200"

    Range("H5").Select

    ActiveCell.FormulaR1C1 = "1208"

    Range("I5").Select

    ActiveCell.FormulaR1C1 = "1309"

    Range("J5").Select

    ActiveCell.FormulaR1C1 = "1318"

    Range("K5").Select

    ActiveCell.FormulaR1C1 = "1389"

 Range("L4").Select

    For i = 1 To 10

    x(i) = Cells(1, i + 1).Value

    y(i) = Cells(5, i + 1).Value

    Next i

    Range("A6").Select

    ActiveCell.FormulaR1C1 = "Линейная функция по издержкам"

    Sx = 0

    Sy = 0

    Sxy = 0

    Sx2 = 0

    For i = 1 To 10

    Sx = Sx + x(i)

    Sy = Sy + y(i)

    Sxy = Sxy + x(i) * y(i)

    Sx2 = Sx2 + (x(i)) ^ 2

    Next i

    a1 = (10 * Sxy - Sx * Sy) / (10 * Sx2 - (Sx) ^ 2)

    b1 = (Sy - a1 * Sx) / 10

    Range("A7").Select

    ActiveCell.FormulaR1C1 = "a="

    Range("B7").Select

    ActiveCell.FormulaR1C1 = a1

    Range("C7").Select

    ActiveCell.FormulaR1C1 = "b="

    Range("D7").Select

    ActiveCell.FormulaR1C1 = b1

    For i = 1 To 10

    Cells(8, i + 1).Value = a1 * x(i) + b1

    Skv = Skv + (y(i) - a1 * x(i) + b1)

    Next i

    Skv = Sqr(Skv)

    Range("A9").Select

    ActiveCell.FormulaR1C1 = "Среднеквадратическое значение"

    Range("E9").Select

    ActiveCell.FormulaR1C1 = Skv

    For i = 1 To 10

    x(i) = Cells(1, i + 1).Value

    y(i) = Cells(4, i + 1).Value

Информация о работе Компьютерное моделирование типовых вычислительных алгоритмов