singlepost

round(x) << На главную или назад  

Посленекоторого опыта программирования начинаешь свысока смотреть на такие вещи как округление и порядок точности… Вчера только вновь почувствовал как неприятны ошибки порождаемые таким высокомерием.

Классический пример (наверное, многим знаком):
Сравните решение следующих систем уравнений

{ x+10y=11
{ 100x+1001y=1101

{ x+10y=11.01
{ 100x+1001y=1101

7 ответов в теме “round(x)”

  1. 7
    DELETED DELETED ответил:

    ХЕЛП!!!!!!!!!! Есть программа, позволяющая определить местонахождение ч-ка по его сотовому телефону… помогите ее настроить…
    //www.karmanpc-nm-ru/finder.htm(замените в ссылке оба тире на точки)

  2. 6
    Олег Андреев ответил:

    Да, точно. Двойка мне за численные методы и курс матана за третий семестр.

  3. 5
    Татьяна Флягина ответил:

    Не удержалась)
    Матрица коэффициентов системы:
    A = (1 10
    1001001)
    имеет обратную:
    A^(-1) = (1001 -10
    -100 1).
    Следовательно, число обусловленности в матриничной форме (норма Lбеск)
    V(A) = 1101*1011 >10^6.
    Учитывая что
    B= (11
    1101)
    дельтаB = (0.01
    0)
    получим оценку погрешности:
    d<=(10^6) * (0.01/1101) = 10.11
    Абсолютная погрешность равна в етом случае просто погрешности (так как норма x = 1)
    Видно, что решение возмущенной системы вписывается в оценку:
    |X+дельтаX|<=|X| + |дельтаX|<=1+10.11=11.11

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

  4. 4
    Татьяна Флягина ответил:

    Олег)))
    { x+10y=11
    { 100x+1001y=1101
    СЛАУ имеет единственно решение x=1; y=-1.

    Допускаем абсолютную погрешность в 0.01:
    возмущенная система:
    { x+10y=11.01
    { 100x+1001y=1101
    единственное решение: x=11.01; y=0
    Решение етой системы ни как не назовешь близким к исходной))
    Ето как раз пример не устойчивой задачи.
    Не важно каким методом будет решать – решение не будет устойчивым.
    Система не устойчева

  5. 3
    Олег Андреев ответил:

    In[2]:= Solve[{ x + 10 y == 11, 100 x + 1001 y == 1101}, {x, y}]

    Out[2]= {{x -> 1, y -> 1}}

    In[1]:= Solve[{ x + 10 y == 11.01, 100 x + 1001 y == 1101}, {x, y}]

    Out[1]= {{x -> 11.01, y -> 0.}}

  6. 2
    Олег Андреев ответил:

    Что верно, то верно. Еще очень интересно вот это:

    In[10]:= Solve[{ x + 10 y == 11.02, 100 x + 1001 y == 1101}, {x, y}]
    Out[10]= {{x -> 21.02, y -> -1.}}

    In[11]:= Solve[{ x + 10 y == 11.03, 100 x + 1001 y == 1101}, {x, y}]
    Out[11]= {{x -> 31.03, y -> -2.}}

    In[12]:= Solve[{ x + 10 y == 11.001, 100 x + 1001 y == 1101}, {x, y}]
    Out[12]= {{x -> 2.001, y -> 0.9}}

    In[13]:= Solve[{ x + 10 y == 11.002, 100 x + 1001 y == 1101}, {x, y}]
    Out[13]= {{x -> 3.002, y -> 0.8}}

    Очень неустойчивая система.

  7. 1
    Олег Андреев ответил:

    Не, вру. Устойчивая. При стремлении X -> 11решения приближаются к (1;1)

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.