2.2.3. Обусловленность вычислительной задачи

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

Рассмотрим эту характеристику более подробно. Под обусловленностью вычислительной задачи понимают чувствительность ее решения к малым изменениям входных данных. Задачу называют хорошо обусловленной, если при малых изменениях входных данных результат также изменяется незначительно. Задача называется плохо обусловленной, если малые изменения входных данных могут привести к большим изменениям решения. Подробно вопросы обусловленности вычислительных задач и интересные примеры плохо обусловленных задач приведены в [Амосов А. А., Дубинский Ю. А., Копченова Н. В. Вычислительные методы для инженеров].

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

ПРИМЕР плохо обусловленной задачи [Бартеньев О. В. Фортран для профессионалов]. Пусть требуется решить уравнение .                                                 (2.2.1)

Левая часть уравнения равна (x–2)4, поэтому все корни уравнения совпадают и равны 2 (см. график функции ). Предположим, что свободный член определяется с ошибкой, равной 10-8. Тогда, решаемое уравнение имеет вид

Закрыть

Рисунок 2.1. График функции y= f(x)

                                   (2.2.2)

Уравнение (2.2.2) эквивалентно уравнению (x–2)4=(0,01)4. Корни этого уравнения можно найти аналитически, и они равны x1=2.01, x2=1.99,  x3=2+0.01i, x4=2–0.01i. Таким образом, относительная погрешность результатов равна 0.5%, это значительно больше относительного изменения свободного члена равного 10-6 % и говорит о плохой обусловленности задачи. Для вычисления корней уравнения (2.2.1) составим программу, используя подпрограмму ZPORC из IMSL.

 

PROGRAM ROOTS

USE MSIMSL

INTEGER, PARAMETER:: N=4

REAL::COEFF(0:N)=(/16.0,-16.0,8.0,-4.0,1.0/)

COMPLEX::ROOT(N)

CALL ZPORC(N,COEFF,ROOT)

PRINT *,ROOT

END PROGRAM ROOTS

Результаты работы программы:

(2.000097, 0.000000E+00)                       (–1.396984E–9, 2.000000)

(–1.396984E–9, –2.000000)                     (1.999903, 0.000000E+00)

            Изменим программу, так чтобы изучить влияние величины ошибки задания свободного члена на точность вычисления корней. Применить программу для выполнения индивидуальных заданий.

Закрыть

PROGRAM ROOT1

! Подключение библиотеки IMSL

USE MSIMSL

REAL(4), ALLOCATABLE, DIMENSION(:) ::COEFF

COMPLEX,ALLOCATABLE, DIMENSION(:)::ROOTS

INTEGER N ! Степень многочлена

            PRINT *,'INPUT N'

            READ*,N

! Размещение в памяти массива коэффициентов

            ALLOCATE(COEFF(0:N),STAT=IST)

            IF(IST.NE.0)  STOP 'Out Memory MASSIV COEFF'

! Размещение в памяти массива корней

            ALLOCATE(ROOTS(N),STAT=IST)

            IF(IST.NE.0)  STOP 'Out Memory MASSIV ROOTS'

! Ввод коэффициентов уравнения,

! начиная со стоящего перед старшей степенью

            PRINT *,'INPUT  COEFFICIENTS'

            READ *, ( COEFF(I), I=N,0,-1)

! Вызов процедуры вычисления корней из библиотеки IMSL

            CALL ZPORC(N,COEFF,ROOTs)

! Печать результатов

            PRINT *,'ROOTS'

            PRINT *,ROOTS

DEALLOCATE(COEFF)

            DEALLOCATE(ROOTS)

END


Закрыть

ЗАДАНИЕ.

1) Составить программу на Фортране для построения графика функции y= f(x).

2) Вычислить корни уравнения f(x) =0, используя программу ROOT1.

3) Провести исследование зависимости решения от точности задания свободного члена.

Варианты заданий.

1.     

2.     

3.     

4.      .

5.      .

6.      .

7.      .

8.      .

9.      .

10.