Посленекоторого опыта программирования начинаешь свысока смотреть на такие вещи как округление и порядок точности… Вчера только вновь почувствовал как неприятны ошибки порождаемые таким высокомерием.
Классический пример (наверное, многим знаком):
Сравните решение следующих систем уравнений
{ x+10y=11
{ 100x+1001y=1101
{ x+10y=11.01
{ 100x+1001y=1101
16 ноября 2007 в 2:02
ХЕЛП!!!!!!!!!! Есть программа, позволяющая определить местонахождение ч-ка по его сотовому телефону… помогите ее настроить…
//www.karmanpc-nm-ru/finder.htm(замените в ссылке оба тире на точки)
1 октября 2007 в 23:00
Да, точно. Двойка мне за численные методы и курс матана за третий семестр.
1 октября 2007 в 21:03
Не удержалась)
Матрица коэффициентов системы:
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
На самом деле на етом примере хорошо видно что малость невязки плохо обусловленной системы еще не грит о близости приближенного решения к точному.
1 октября 2007 в 21:02
Олег)))
{ x+10y=11
{ 100x+1001y=1101
СЛАУ имеет единственно решение x=1; y=-1.
Допускаем абсолютную погрешность в 0.01:
возмущенная система:
{ x+10y=11.01
{ 100x+1001y=1101
единственное решение: x=11.01; y=0
Решение етой системы ни как не назовешь близким к исходной))
Ето как раз пример не устойчивой задачи.
Не важно каким методом будет решать – решение не будет устойчивым.
Система не устойчева
26 сентября 2007 в 1:05
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.}}
26 сентября 2007 в 1:05
Что верно, то верно. Еще очень интересно вот это:
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}}
Очень неустойчивая система.
26 сентября 2007 в 1:05
Не, вру. Устойчивая. При стремлении X -> 11решения приближаются к (1;1)