Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
> hilbert(Ci(abs(t)),t,s);
-signum(s) Ssi(|s|)> hilbert(signum(t)*Ssi(abs(t)),t,s);
Ci(|s|)> hilbert(t*f(a*t)^2,t,s);
Как видно из этих примеров, обратное преобразование Гильберта, осуществленное над результатом прямого преобразования, не всегда восстанавливает функцию f(t) буквально. Иногда преобразование Гильберта (см. последний пример) выражается через само себя. Много интересных примеров на это преобразование Гильберта можно найти в файле gilbert.mws.
5.11.9. Интегральное преобразование Меллина
Интегральное преобразование Меллина задается выражением
и реализуется функцией
mellin(expr, x, s)
с очевидными параметрами expr, x и s. Применение преобразования Меллина иллюстрируют следующие примеры:
> assume(а>0);
> mellin(x^a,x,s);
> mellin(f(а*х),х,s); mellin(f(a*x), x, s);
> invmellin((gamma+Psi(1+s))/s,s,x,-1..infinity);
-Heaviside(1-x)ln(1-x)Примеры на применение преобразования Меллина можно найти в файле mellin.mws.
5.11.10. Функция addtable
Как видно из приведенных примеров, не всегда интегральные преобразования дают результат в явном виде. Получить его позволяет вспомогательная функция
addtable(tname,patt,expr,t,s)
где tname — наименование преобразования, для которого образец patt должен быть добавлен к таблице поиска. Остальные параметры очевидны. Следующие примеры поясняют применение этой функции:
> fouriersin(f(t),t,s);
fouriersin(f(t), t, s)> addtable(fouriersin,f(t),F(s), t,s);
> fouriersin(f(x),x,2);
F(z)5.12. Регрессионный анализ
5.12.1. Функция fit для регрессии в пакете stats
В этой главе до сих пор рассматривались точные функции преобразования или представления аналитических функций. Однако часто возникает и другая задача — некоторую совокупность данных, например заданных таблично, надо приближенно представить некоторой известной аналитической функцией. Эта задача решается регрессионным анализом или просто регрессией. Параметры приближающей функции выбираются так, что она приближенно (по критерию минимума среднеквадратической ошибки) аппроксимирует исходную зависимость. Последняя, чаще всего, бывает представлена некоторым набором точек (например, полученных в результате эксперимента).
Наглядная визуализация регрессии была рассмотрена выше — см. рис. 5.23. А теперь рассмотрим типовые средства проведения регрессии (файл regres).
Для проведения регрессионного анализа служит функция fit из пакета stats, которая вызывается следующим образом:
stats[fit,leastsquare[vars,eqn,parms]](data)
или
fit[leastsquare[vars,eqn,parms]](data)
где data — список данных, vars — список переменных для представления данных, eqn — уравнение, задающее аппроксимирующую зависимость (по умолчанию линейную), parms — множество параметров, которые будут заменены вычисленными значениями.
5.12.2. Линейная и полиномиальная регрессия с помощью функции fit
На приведенных ниже примерах показано проведение регрессии с помощью функции fit для зависимостей вида у(х):
> with(stats):Digits:=5;
Digits := 5> fit[leastsquare[[x,у]]] ([[1, 2, 3, 4], [3, 3.5, 3.9, 4.6]] );
у = 2.4500 + .52000 x> fit[leastsquare[[x,y, y=a*x^2+b*x+c]] ([[1,2,3,4], [1.8,4.5,10,16.5]]);
у = 0.9500000000 x² + 0.2100000000 x + 0.5500000000В первом примере функция регрессии не задана, поэтому реализуется простейшая линейная регрессия, а функция fit возвращает полученное уравнение регрессии для исходных данных, представленных списками координат узловых точек. Это уравнение аппроксимирует данные с наименьшей среднеквадратичной погрешностью. Во втором примере задано приближение исходных данных степенным многочленом второго порядка. Вообще говоря, функция fit обеспечивает приближение любой функцией в виде полинома, осуществляя полиномиальную регрессию.
Рисунок 5.29 показывает регрессию для одних и тех же данных полиномами первой, второй и третьей степени с построением их графиков и точек исходных данных.
Рис. 5.29. Примеры регрессии полиномами первой, второй и третьей степени
Нетрудно заметить, что лишь для полинома третьей степени точки исходных данных точно укладываются на кривую полинома, поскольку в этом случае (4 точки) регрессия превращается в полиномиальную аппроксимацию. В других случаях точного попадания точек на линии регрессии нет, но обеспечивается минимум среднеквадратической погрешности для всех точек — следствие реализации метода наименьших квадратов.
Применение регрессии обычно оправдано при достаточно большом числе точек исходных данных. При этом регрессия может использоваться для сглаживания данных.
5.12.3. Регрессия для функции ряда переменных
Функция fit может обеспечивать регрессию и для функций нескольких переменных. При этом надо просто увеличить размерность массивов исходных данных. В качестве примера ниже приведен пример регрессии для функции двух переменных
> f:=fit[leastsquare[[x, у, z],z=a+b*x+c*y,{a,b,c}]]
([[1,2,3,5,5], [2,4,6,8,8], [3, 5, 7,10, Weight (15, 2)]]) ;
f := z = 1 + 13/3 x - 7/6 у> fa:=unapply(rhs(f),x,у);
fa := (x, y) -> 1 + 13/3 x - 7/6 у> fa(l., 2.) ;
2.999999999> fa(2,3);
37/6В данном случае уравнение регрессии задано в виде z = а + bх + су. Обратите внимание на важный момент в конце этого примера — применение полученной функции регрессии для вычислений или построения ее графика. Прямое применение функции f в данном случае невозможно, так как она представлена в невычисляемом формате. Для получения вычисляемого выражения она преобразуется в функцию двух переменных fa(x,y) путем отделения правой части выражения для функции f. После этого возможно вычисление значений функции fa(x,y) для любых заданных значений х и у.
5.12.4. Линейная регрессия общего вида
Функция fit может использоваться и для выполнения линейной регрессии общего вида:
f(x) = af1(x) +bf2(x) +cf3(x) + …Функция такой регрессии является линейной комбинацией ряда функций f1(х), f2(х), f3(х), причем каждая их них может быть и нелинейной, например экспоненциальной, логарифмической, тригонометрической и т.д. Пример линейной регрессии общего вида представлен на рис. 5.30.
Рис. 5.30. Пример выполнения линейной регрессии общего вида
В литературе и даже в документах системы Maple линейная регрессия общего вида часто называется нелинейной регрессий. Однако это неверно, поскольку нелинейной является регрессия, функция которой не может быть представлена линейной комбинацией функций.
5.12.5. О нелинейной регрессии с помощью функции fit
К сожалению, функция fit неприменима для нелинейной регрессии. При попытке ее проведения возвращается структура процедуры, но не результат регрессии — см. пример ниже:
> fit[leastsquare[[х,у], у=а*2^(х/b),{а,b}]]([[1,2,3,4], [1.1,3.9,9.5,15.25]]);
Однако, большинство нелинейных зависимостей удается свести к линейным с помощью простых линеаризирующих преобразований [1, 2, 4]. На рис. 5.31 показан пример экспоненциальной регрессии f(x)=аеbх, которая (благодаря логарифмированию точек y) сводится к линейной регрессии. Детали преобразований даны в документе рис. 5.31. Используя другие преобразования этот документ легко приспособить для выполнения других видов нелинейной регрессии, например степенной или логарифмической.
Рис. 5.31. Пример экспоненциальной регрессии
Функция нелинейной регрессии входит в новейший пакет оптимизации Optimization, введенный в Maple 9.5, и описанный в следующей главе. Кроме того, на Интернет-сайте корпорации Waterloo Maple можно найти файлы simplenl.mws и gennlr.mws с процедурами и примерами линейной и нелинейной регрессий общего вида. Интересная реализация нелинейной регрессии для кусочной функции дается в файле nonelinearpiecewise.mws.
5.12.6. Сплайновая регрессия с помощью функции BSplineCurve
Функция BSplineCurve из пакета CurveFitting может использоваться для реализации сплайновой регрессии. Пример этого представлен на рис. 5.32. Опция order задает порядок B-сплайнов, который на 1 меньше заданного целого значения.
Рис. 5.32. Пример выполнения сплайновой регрессии В-сплайнами
Функция BsplineCurve выглядит несколько недоделанной. Так, при order=3 и 4 кривая регрессии не дотягивает до концевых точек, а при установки order=1 все точки соединяются отрезками прямых — в том числе концевые. Так что использовать эту функцию для экстраполяции нельзя.