nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

Предновогодняя загадка

Что-то подзадолбали меня кватернионы, ПЛИС и в целом работа, надо отдыхать.

Так что поговорим о чём-нибудь более приятном - о системе линейных уравнений с размерными величинами :)

Возьмём слегка надуманную систему:

U / 1 кОм + I = 1 А,
U + I * 1 Ом = 2 В

Надо найти напряжение U и ток I.

Если просто убрать отсюда все единицы измерения и записать в матричном виде, получим:



И как нас учили на "численных методах", мы ни в коем случае не должны оставлять число 1/1000 на главной диагонали, мы просто обязаны поменять строки местами! (а может, и строки, и столбцы, чтобы найти вообще самый большой компонент).

Но если оставить размерности на своих местах, то возникает вопрос - какую величину мы считаем самой большой - 1/1000 сименса (величина, обратная сопротивлению) или безразмерную единицу, или 1 Ом?? Какое право мы вообще имеем сравнивать чайники с попугаями? Собственно, PhysUnitLib и не позволила этого сделать, пришлось её переламывать через колено...


Чуть поиграемся с этой системой уравнений. Сначала попробуем решить её совсем "в лоб". Первое уравнение домножаем на 1000:

U + 1000I = 1000

Теперь из второго вычитаем первое:

-999I = -998

Отсюда I = 998/999 ≈ 0,999

Подставляя в первое, получаем
U = 1000 - 1000I ≈ 1,001

Т.е I = 0,999 А, U = 1,001 В. Это правильный ответ.

Но чтобы он получился правильным, нужно было считать I с большой точностью. Округли мы 0,999 до 1, как мы бы получили U = 0 - просто катастрофическая ошибка.

Правильным считается начать со второго уравнения (поменять их местами):

U + I = 2

Вычитаем его, поделенного на 1000, из второго, получая:

I ( 1 - 1/1000) = 1 - 2/1000,

отсюда I = (1 - 2/1000) / (1 - 1/1000) ≈ 0,999,

U = 2 - 0,999 = 1,001.

Теперь, если мы по ходу дела округлим 0,999 до единицы, ничего страшного не случится, получим U = 1 - вполне себе корректный ответ, если брать 3 значащих разряда!

Получается, правильно учили?

А теперь попробуем вместо амперов использовать миллиамперы, имеем же полное право!

Тогда получается такая система:

U + I = 1000,
U + I / 1000 = 2

В матричном виде:



В этот раз ничего менять местами не надо - можно начинать хоть с первого уравнения, хоть со второго, никакой разницы.

Попробуем начать с первого. Его мы не трогаем, поскольку на главной диагонали уже единичка. Вычитаем его из второго, получая:

-0,999I = -998 - вот блин, где-то мы это видели....

Отсюда I = 998 / 0,999 ≈ 999

И из первого, имеем U = 1. И снова, как первый раз, нам очень важно точно посчитать I. Если мы округлим его до 1000, то получим U = 0 - жутчайшая ошибка!

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

Пляски с числом обусловленности здесь тоже ни к чему не приводят. Для обеих матриц (что при решении с вольтами-амперами, что с вольтами-миллиамперами) мы получаем число обусловленности примерно 2,61 (квадрат золотого сечения), что вовсе даже неплохо! Это означает, грубо говоря, что возникновение ошибки в 1% в каком-то из коэффициентов приводит к ошибке в 2.61% на выходе.

Загадка выходит самой классической - кто виноват и что делать? Как корректно решать системы уравнений, если в них используются разнородные величины, и почему при "неправильном" выборе единиц мы не просто получаем плохой результат, но и не получаем никаких предупреждений об этом!?

На удивление мало исследованная область - прошерстил уйму книг и материалов, и в таком ракурсе на проблему никто не смотрел, похоже. Впрочем, когда узнаёшь ответ - он становится очевидным и даже скучным...
Tags: physunitcalc, математика, странные девайсы
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 7 comments