На предновогоднюю загадку. Мы пытались понять: какое право мы имеем, решая систему линейных уравнений, сравнивать между собой омы, безразмерные коэффициенты и сименсы (обратные омы), и как же всё-таки решать её правильно?
Ну и вдогонку - почему, выбрав в качестве единиц измерения вольты и миллиамперы, мы умудрились настолько криво решить систему уравнений, хоть и делали всё "по науке", и та же самая "наука" сказала нам, что всё хорошо, число обусловленности 2.61, значит, от слабого изменения коэффициентов хоть в матрице, хоть в векторе ответ не должен принципиально поменяться! (Выбирая самый большой элемент на главную диагональ, мы вроде как гарантируем внесение малых погрешностей в коэффициенты, а значит - численно устойчивый ответ).
Чтобы понять, что происходит, надо приглядеться, как мы определяем норму векторов и матриц.
В системе из N уравнений с N неизвестными
Ax = b
мы можем определить эвклидову норму векторов (l2):
или "прямоугольную" норму (расстояние городских кварталов, манхэттенская норма, l1)
или норму Чебышева (l∞):
Всё выглядит очень строго и логично.
Затем мы вводим норму матрицы A, подчинённую норме вектора. Это означает, что всегда будет выполняться условие
причём для некоторых векторов x обязано достигаться равенство.
Спектральная норма матрицы является подчинённой эвклидовой норме вектора:
(корень из наибольшего собственного числа от матрицы, помноженной на гильбертово сопряжение)
именно её мы посчитали в своём примере, получив около 1,61.
Подчинённой к прямоугольной норме является такая:
(суммируем элементы по столбцам, по абсолютной величине, выбираем максимальную сумму)
И наконец, подчинённой к Чебышевской норме является следующая норма матрицы:
Далее вводится величина μ(A) - число обусловленности матрицы,
Всё это ради одной теоремы. Рассмотрим две системы уравнений:
- исходное уравнение,
- с искажёнными коэффициентами.
Пусть x* - решение уравнения (1), а x* + Δx - решение уравнения (2).
Если "всё хорошо" (матрица A обратима и
), то можно оценить ошибку:
При довольно малых ошибках в коэффициентах, можно выкинуть знаменатель, заменив его единичкой, и получить такую оценку:
Эту оценку затем объясняют словами: если относительная ошибка в исходных данных 1%, значит относительная ошибка в решении уравнения - 1% помноженный на число обусловленности. Выглядит всё очень здорово.
Но тут-то и зарыта собака. Если у нас вектор b = (1 ампер ; 2 вольта), то именно при взятии нормы наши величины должны "обезразмериться". Если мы решили работать в СИ, то получаем вектор (1; 2), его эвклидова норма: около 2,23. Если мы маленько ошиблись и вместо 2 вольт вписали 2,2 вольта (а с амперами не ошиблись), то норма ошибки 0,2, и относительная погрешность составит 0,2 / 2,23 = 9%. Похоже на правду.
Но если мы решим работать с вольтами и миллиамперами, то получим исходный вектор (1000; 2), его эвклидова норма примерно 1000, и при той ошибке на 0,2 вольта мы получим относительную погрешность 0,02%.
И когда мы получим правильный ответ (999; 1) и неправильный ответ (1000; 0), окажется, что относительная ошибка составляет всего-то навсего 0,14%, и нам грех жаловаться, ведь такой неверный ответ получился из-за того, что мы ограничились 3 значащими цифрами при вычислениях, а это и есть точность в 0,1%.
Никакого противоречия с точки зрения математики у нас не возникает. Если забыть, что в уравнении
U + I = 1000,
U + I / 1000 = 2
у нас напряжение в вольтах, а ток в миллиамперах, и посмотреть на результаты решения, мы сочтём, что всё нормально.
По сути, взяв такие величины, мы согласились, что ошибка в 1 вольт для нас столь же страшна, как ошибка в 1 миллиампер, и далее компьютер действовал соответствующе!
Причём, во многих приложениях так и есть. Если мы возьмём какую-нибудь мощную рентгеновскую трубку с током под ампер, а напряжением в десятки киловольт, то действительно ошибка в 1 вольт - это полный пустяк, сравнимый с ошибкой на миллиампер :)
Просто мы уже привыкли к неким характерным значениям: ток в бытовых приборах редко превышает 10 ампер, а напряжение - 220 вольт, вот мы и провели "знак равенства" между вольтом и ампером.
Ну и проглядывается ответ на вопрос "что делать", как корректно решать уравнения с размерными величинами.
Обезразмериваем мы их так, чтобы ошибка на единицу в каждой из искомых величин была сопоставима для рассматриваемой задачи. Тем самым мы добиваемся того, что весь формализм нормы векторов и подчинённой нормы матриц действительно работает так, как надо в нашей задаче.
Именно вычисление нормы - тот момент, где неявным образом сбрасывались размерности с наших величин, где мы пытались сложить вольты с амперами. Задавая допустимые ошибки по каждой из величин, например
σU = 1 мВ,
σI = 1 мА,
мы наконец-то вводим норму корректно, например:
Можно брать вместо допустимых ошибок максимально возможные (ожидаемые в данной задаче) значения величин. Если мы заранее знаем, что ток не может превысить 2 ампер (иначе предохранитель расплавится), а напряжение - 25 вольт (иначе конденсатор вздуется), то можно и их задать для нашей нормы:
σU = 25 В,
σI = 2 А,
Ну и всё: любые попавшиеся напряжения мы делим на 25 В, любые попавшиеся токи - на 2 А, приходя тем самым к безразмерной системе уравнений. И тогда можно ожидать, что всё у нас будет решено в наилучшем виде!