User Tools

Site Tools


courses:computational_mathematics:prac2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
courses:computational_mathematics:prac2 [2021/02/06 11:28]
andrey.suchkov [Основные теоретические положения]
courses:computational_mathematics:prac2 [2022/07/04 05:42]
andrey.suchkov removed
Line 1: Line 1:
-====== Практическая работа №2: Изучение понятия обусловленности вычислительной задачи ​======+====== Практическая работа №2: Интерполирование ​функций ====== 
 ===== Цель работы ===== ===== Цель работы =====
-Исследование обусловленности задачи нахождения корня уравнения на примере линейной функции. +Научиться применять интерполирование ​функции для решения ​практических задачовладеть навыками применения интерполяционных ​формул ​Лагранжа заданной степени, многочленов ​Ньютона. Научиться оценивать погрешности интерполяционных ​формул и работать в программных пакетах ​с целью проверки полученных результатов.
- +
-===== Основные теоретические положения ===== +
-Под обусловленностью вычислительной задачи понимают чувствительность ее решения к малым ​погрешностям входных данных. +
- +
-Задачу называют хорошо обусловленной,​ если малым погрешностям ​входных данных отвечают малые погрешности решения, и плохо обусловленной, если возможны сильные изменения решения. Количественной мерой степени обусловленности вычислительной ​задачи является число обусловленности, которое можно интерпретировать ​как коэффициент возможного возрастания погрешностей в решении ​по отношению к вызвавшим их погрешностям входных данных. Пусть между абсолютными погрешностями входных данных $x$ и решения $y$ установлено неравенство:​ +
-\[ +
-  \Delta(y^*) \leqslant \nu_{\Delta}\Delta(x^*),​ +
-\] +
-где $ x^* $ и $ y^* $ -- приближённые входные данные и приближённое решение соответственно. Тогда величина $ \nu_{\Delta} $ называется ​абсолютным числом обусловленности. +
- +
-Если же установлено неравенство +
-\[ +
-  \delta(y^*) \leqslant \nu_{\delta}\delta(x^*), +
-\] +
-между относительными ошибками данных и решения, то величину $ \nu_{\delta} $ называют относительным числом обусловленности. Для плохо обусловленной задачи $ \nu \gg 1 $. Грубо говоря, если $ \nu = 10^N $, где $ \nu $ -- относительное число обусловленности, то порядок $ N $ показывает число верных цифр, которое может быть утеряно в результате ​по сравнению с числом верных ​цифр входных данных+
- +
-Ответ на вопрос о том, при каком значении $ \nu $ задачу следует признать ​плохо обусловленной,​ зависит,​ с одной стороны,​ от предъявляемых требований к точности решения и, с другой, -- от уровня обеспечиваемой точности исходных ​данных. Например, если требуется найти решение с точностью 0.1%, а входная информация задается с точностью 0.02%, то уже значение $ \nu = 10 $ сигнализирует о плохой обусловленности. Однако, ​при тех же требованиях к точности результата,​ гарантия, ​что исходные данные задаются с точностью не ниже 0.0001%, означает,​ что при $ \nu = 10^3 $ задача ​хорошо обусловлена. +
- +
-Если рассматривать ​задачу вычисления корня уравнения $ y = f(x) $, то роль числа обусловленности будет играть величина +
-\[ +
-  \nu_{\Delta} = \frac1{|f'​(\bar x)|}, +
-\] +
-где $ \bar x $ -- корень уравнения.+
  
 ===== Постановка задачи ===== ===== Постановка задачи =====
-Используя программы-функции ''​bisect''​ и ''​Round''​ из файла //​condition.m//,​ исследовать ​обусловленность ​задачи нахождения корня уравнения $ f(x= 0 $ для ​линейной ​функции $ f(x) = c(- d) $. Значения функции ​f(x) $ следует вычислить приближенно ​с точностью ''​delta'', ​варьируемой в пределах ​от 0.1 до 0.000001.+Построить интерполяционный ​многочлен ​по 2, 3, 4, 5 и 6 узлам (равноотстоящим и чебышёвским) для функции $ f(x) = \cfrac A{x^2 + px + q} $ на промежутке [a, b] по равноотстоящим и по чебышёвским узлам. Найти фактическую погрешность ​и сравнить её с теоретической оценкой.
  
 ===== Порядок выполнения работы ===== ===== Порядок выполнения работы =====
-  - Графически или аналитически ​отделить корень уравнения $ f(x) = 0 $, т.е. найти отрезки $ [a, b] $, на которых ​функция удовлетворяет условиям применимости метода бисекции. +  - Реализовать функцию ''​f()'' ​для вычисления значений в функции $ f(x) $. 
-  - Составить подпрограмму вычисления функции $ f(x) = c(x d) $ для параметров $ c $ и $ d $, вводимых с клавиатуры. Предусмотреть округление вычисленных значений функции $f(x)$ ​с использованием программы-функции ''​Round''​ с точностью ''​delta'', ​также вводимой с клавиатуры+  ​Реализовать ​функцию ''​df()'', ​вычисляющая $ n $-ую производную ​функции $ f(x) $. Данную ​функцию можно реализовать с помощью ''​switch'', ​предварительно посчитав производные в символьном ​виде, например, в Wolfram
-  - Составить головную программу, вычисляющую ​корень уравнения с заданной точностью ''​epsilon''​ и содержащую обращение к подпрограмме ​''​F''​, программам-функциям ''​bisect''​, ''​Round''​ и представление результатов. +  - Реализовать функцию, вычисляющую ​интерполяционный многочлен по методу ​Лагранжа ​''​lagrange()'' ​(**для нечётных вариантов**) ​или Ньютона ​''​newti()'' ​(**для чётных вариантов**)
-  - Провести вычисления по программе, варьируя значения параметров ''​c''​ (тангенс угла наклона прямой), ''​epsilon''​ (точность вычисления корня) ​и ''​delta'' ​(точность задания исходных данных). +  - Построить ​график полученного ​интерполяционного многочлена $ n $-го порядка по равномерной сетке и функции $ f(x) $ в одном окне. Отметить на графике узлы ​интерполяции. Выписать полученный интерполяционный многочлен с точностью коэффициентов до 7 знаков после запятой. 
-  - Проанализировать полученные результаты ​и обосновать выбор точности ​''​epsilon''​ вычисления корня. Сопоставить ​полученные ​теоретические результаты с экспериментальными данными.+  - Аналогично ​выполнить построение для ​чебышёвской сетки. 
 +  - Заполнить таблицу для ​каждой ​сетки и сделать выводы:
  
 +^  Значение $ n $                      |  1  |  2  |  3  |  4  |  5  |
 +^  Значение $ M_{n+1} $                |     ​| ​    ​| ​    ​| ​    ​| ​    |
 +^  Значение $ \max|\omega_{n+1}(x)| $  |     ​| ​    ​| ​    ​| ​    ​| ​    |
 +^  Значение $ (n + 1)! $               ​| ​    ​| ​    ​| ​    ​| ​    ​| ​    |
 +^  Значение $ Q_n $                    |     ​| ​    ​| ​    ​| ​    ​| ​    |
 +^  Значение $ \max|R_n(x)| $           ​| ​    ​| ​    ​| ​    ​| ​    ​| ​    |
 +
 +===== Варианты заданий =====
 <note important>​ <note important>​
-Значение параметра $ d $ выбирается каждым студентом самостоятельно и согласовывается ​с преподавателем.+Выполнение ​работ осуществляется ​по индивидуальным вариантам заданий (коэффициентам функции). Номер варианта для каждого ​студента определяется преподавателем.
 </​note>​ </​note>​
- +[[.task2:task2-vars]]
-===== Содержание отчёта ===== +
-  * Цель работы. +
-  * Краткое изложение основных теоретических понятий. +
-  * Постановка задачи с кратким описанием порядка выполнения работы. +
-  * Таблицы с вычислениями при различных вариациях параметров. +
-  * Краткие выводы по полученным результатам. +
-  * Общий вывод по проделанной работе. +
-  * Код программы. +
- +
-===== Тексты программ ===== +
-==== Исследование обусловленности задачи нахождения корня линейного уравнения ==== +
-<file octave condition.m>​ +
-## TASK2 +
-## Studying the concept of conditionality  +
-## of a computational problem +
-format long g +
- +
-function ​[x, k] = bisect (a, b, c, d, epsilon, delta) +
-  Eps = abs (epsilon) * 2; +
-  fa = f (a, c, d, delta); +
-  fb = f (b, c, d, delta); +
-  k = 0; +
-   +
-  if (fa * fb > 0) +
-    error ("​\aInvalid interval setting!!!\n"​) +
-  endif +
-   +
-  if (epsilon <= 0) +
-    error ("​\aInvalid accuracy setting!!!\n"​) +
-  endif +
-   +
-  if (fa == 0) +
-    x = fa; +
-    return +
-  endif +
-   +
-  if (fb == 0) +
-    x = fb; +
-    return +
-  endif +
-   +
-  while (b - a >= Eps) +
-    x = 0.5 * (a + b); +
-    y = f (x, c, d, delta); +
-     +
-    if (y == 0) +
-      return +
-    elseif (y * fa < 0) +
-      b = x; +
-    else +
-      a = x; +
-      fa = y; +
-    endif +
-     +
-    k++; +
-  endwhile +
-endfunction +
- +
-function y = f (x, c, d, delta) +
-  s = c * (x d); +
-  S = s / delta + merge (s / delta < 0, -0.5, 0.5); +
-   +
-  s = S * delta; +
-  y = Round (s, delta); +
-endfunction +
- +
-function r = Round (x, delta) +
-  if (delta <= 1e-9) +
-    error ("​\aInvalid setting of rounding precision!!!\n"​) +
-  endif +
-   +
-  r = delta * (x / delta + merge (x > 0, 0.5, -0.5)); +
-endfunction +
- +
-## Begin script +
-epsilon = input ("​Enter '​eps':​ "); +
-c = input ("​Enter '​c':​ "); +
-d = input ("​Enter '​d':​ "); +
-a = input ("​Enter '​a':​ "); +
-b = input ("​Enter '​b':​ "); +
-delta = input ("​Enter '​delta':​ "); +
-[x, k= bisect (a, b, c, d, epsilon, delta); +
-printf ("\nx = %.14f,\tk = %u\n", x, k), format short +
-</​file>​+