21 июля 2010 г.

Аппроксимация семейства кривых

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

При частом применении пользоваться ими не совсем удобно. В ряде случаев, касающихся функции двух переменных (не всегда, конечно) вполне можно семейство кривых представить в виде функции в явном виде путем пошаговой аппроксимации и далее пользоваться уже ею.


Например, для такого варианта:


последовательность действий следующая:
  1. подбирается вид аппроксимирующего выражения, единый для всех кривых; например, парабола FI = аα^2 + bα + c;
  2. выполняется аппроксимация для всех кривых, т.е., поочередно для всех значений β;
  3. рассматривая полученные значения a, b и с как функцию переменной β, выполняется аппроксимация для зависимостей a=f1(β), b=f2(β) и b=f3(β) (для этого вид аппроксимирующего выражения выбирается, естественно, свой и не обязательно одинаковый для a, b и c);
  4. выражения f1(β), f2(β), f3(β) подставляются в формулу у=ах^2+bx+c вместо коэффициентов a, b, c соответственно; получаем выражение FI = f(α, β);
  5. profit!

Для извлечения из печатной версии семейства кривых координат точек, по которым можно выполнять аппроксимацию, то бишь для оцифровки, рекомендую использовать программы Grafula или GetData.

Кроме прочего, в номограммах в качестве аргументов могут фигурировать не просто переменные, а выражения с их участием - с целью нормировать значения параметров или просто упростить содержание самой номограммы. Именно такой пример и рассмотрим.

Исходная номограмма -


сопровождается таблицей значений -


поэтому обходимся без оцифровки.

Формируем массив данных с использованием компонента Excel:


При этом сразу же учитываем соотношения, фигурирующие на номограмме и в таблице, а именно: в столбце D помещаем значения a/r1 (из номограммы), в столбце B - значения β, в столбце E - значения FI (из таблицы) и для того, чтобы увязать данные таблицы и номограммы - в столбце A значения соотношения (a/r1)*(β-1) /согласно первого столбца таблицы/ и в столбце C значения выражения (β2-1) / 2.24β2 /см. номограмму, ось ординат/.

Выдергиваем данные из таблицы в вектора:


Кривые на вид вполне параболические, поэтому для аппроксимации выбираем квадратичный полином, в виде y = Ax^2 + Bx + C, где С=1 сразу, поскольку графики на номограмме сходятся в точке (0;1):


Используем функцию genfit:


Для расшифровки. В данном случае h150(x) - это FI(a/r1) при β=1,5 и т.д. Остальное, думаю, очевидно.

Для наглядности можно проверить, как полученные параболы согласуются с исходными данными:


Теперь формируется матрица коэффициентов A, B и C (вместо С можно сразу 1 забить - разница небольшая):


Визуально кривые A=f(β) /красная/ и B=f(β) /синяя/ похожи на степенные функции вида y=axb+c:


Соответственно, применим pwrfit:



Графическая проверка соответствия:


Подходит. Теперь полученные выражения для А и В подставляем в исходное уравнение параболы и получаем искомую функцию двух переменных

или

которая вполне соответствует исходному набору данных:



Документ Mathcad (версия 11).

LinkWithin

Related Posts Plugin for WordPress, Blogger...