Записи с меткой «самых»
Интеграция Maple 15 с MATLAB
Интеграция Maple 15 с MATLAB
Краткие сведения о MATLAB
Несмотря на обширные средства линейной алгебры (да и многие другие), имеющиеся у системы Maple 15, есть системы компьютерной математики, решающие некоторые классы задач более эффективно, и прежде всего быстрее. В области линейной алгебры к таким системам, безусловно, относится система MATLAB, созданная компанией Math Works, Inc. Ее название происходит именно от слов MATrix LABoratory — матричная лаборатория.
MATLAB содержит в своем ядре многие сотни матричных функций и является одной из лучших матричных систем для персональных компьютеров. Она реализует самые современные алгоритмы матричных операций, включая, кстати, и алгоритмы NAG. Однако главное достоинство MATLAB — наличие множества дополнительных пакетов как по классическим разделам математики, так и по самым новейшим, таким как нечеткая логика, нейронные сети, идентификация систем, обработка сигналов и др. Знаменитым стал пакет моделирования систем и устройств Simulink, включаемый в пакет поставки системы MATLAB. Последней версией системы является MATLAB 6.0. В то же время нельзя не отметить, что MATLAB — одна из самых громоздких математических систем. Инсталляция ее полной версии занимает около 1,5 Гбайт дискового пространства. Несмотря на это, интеграция различных математических систем с данной системой, похоже, становится своеобразной модой. Такая возможность предусмотрена и в системе Maple 15 с помощью пакета Matlab.
Загрузка пакета расширения Matlab
Для загрузки пакета Matlab используется команда: .
> with(Matlab);
[chol, closelink, defined, del, dimensions, eig, evalM,fft, getvar, inv, Iu,ode45, openlink, qr, setvar, size, square, transpose ]
Использование этой команды ведет к автоматическому запуску системы MATLAB (гарантируется работа с версиями MATLAB до 5.3.1 включительно) и установлению необходимой объектной связи между системами Maple 15 и MATLAB.
ПРИМЕЧАНИЕ
Как нетрудно заметить, данный пакет дает доступ всего к 18 функциям системы MATLAB (из многих сотен, имеющихся только в ядре последней системы). Таким образом, есть все основания полагать, что возможности MATLAB в интеграции с системой Maple 15 используются пока очень слабо и носят рудиментарный характер. далее…
Примеры матричных операций с применением пакета LinearAlgebra
Примеры матричных операций с применением пакета LinearAlgebra
Применение алгоритмов NAG особенно эффективно в том случае, когда используется встроенная в современные микропроцессоры арифметика чисел с плавающей запятой. С помощью специального флага такую арифметику можно отключать или включать:
> UseHardwareFloats := false; # use software floats
UseHardwareFloats :=false
> UseHardwareFloats := true: # default behaviour
UseHardwareFloats :=true
Матрицы в новом пакете линейной алгебры могут задаваться в угловых скобках, как показано ниже:
После этого можно выполнять с ними типовые матричные операции. Например, можно инвертировать (обращать) матрицы:
Обратите внимание, что Maple 15 теперь выдает информационные сообщения о новых условиях реализации операции инвертирования матриц с вещественными элементами, и в частности об использовании алгоритмов NAG и арифметики, встроенной в сопроцессор. (
Следующий пример иллюстрирует создание двух случайных матриц Ml и М2 и затем их умножение:
Параметр inplace в функции умножения обеспечивает помещение результата умножения матриц на место исходной матрицы Ml — излюбленный прием создателей быстрых матричных алгоритмов NAG. Поскольку матрицы Ml и М2 за- -даны как случайные, то при повторении этого примера результаты, естественно, будут иными, чем приведенные.
Следующий пример иллюстрирует проведение хорошо известной операции/ LU-разложения над матрицей М, созданной функцией Matrix:
Конечной целью большинства матричных операций является решение систем линейных уравнений. Для этого пакет LinearAlgebra предлагает великое множество методов и средств их реализации. Мы ограничимся простым примером одновременного решения сразу трех систем уравнений. Дабы не загромождать книгу массивными выражениями, ограничимся решением систем из двух линейных уравнений, матрица коэффициентов у которых одна, а векторы свободных членов разные. Ниже показан пример решения такой системы:
Пакет решения задач линейной алгебры linalg
Пакет решения задач линейной алгебры linalg
Состав пакета linalg
Несомненно, что уникальной возможностью системы Maple 15, как и других систем компьютерной алгебры, является возможность решения задач линейной алгебры в символьном (формульном, аналитическом) виде. Однако такое решение представляет скорее теоретический, чем практический интерес, поскольку даже при небольших размерах матриц (уже при 4-5 строках и столбцах) символьные результаты оказываются очень громоздкими и труднообозримыми. Они полезны только при решении специфических аналитических задач, например с разреженными матрицами, у которых большинство элементов имеют нулевые значения.
Поэтому разработчики Maple 15 были вынуждены реализовать в своей системе численные методы решения задач линейной алгебры, которые широко используются в основных сферах ее приложения — математическом моделировании систем и устройств, расчетах в электротехнике, механике, астрономии и т. д.
В ядро Maple 15, как отмечалось, введены очень скромные и минимально необходимые средства для решения задач линейной алгебры. Основной упор в их реализации сделан на подключаемые пакеты. Основным из них, унаследованным от предшествующих реализаций системы, является пакет решения задач линейной алгебры Unalg. Это один из самых обширных и мощных пакетов в области решения задач линейной алгебры. Он содержит свыше ста функций:
> with(linalg);
Warning, the names fibonacci, inverse and multiply have been redefined Warning, the protected names norm and trace have been redefined and unprotected[BlockDiagonal, GramSchmidt, JordanBlock, LUdecomp, QRdecomp, Wronskian, addcol, addrow, adj, adjoint, angle, augment, backsub, band, basis, bezout, blockmatrix, charmat, charpoly, cholesky, col, coldim, colspace, colspan, companion, concat, cond, copyinto, crossprod, curl, definite, delcols, delrows, det, diag, diverge, dotprod, eigenvals, eigenvalues, eigenvectors, eigenvects, entermatrix, equal, exponential, extend, ffgausselimfifibonacci,forwardsub,frobenius, gausselim, gaussjord, geneqns, genmatrix, grad, hadamard, hermite, hessian, hilbert,htranspose, thermite, indexfunc, innerprod, intbasis, inverse, ismith, issimilar, iszerojacobian, Jordan, kernel, laplacian, leastsqrs, linsolve,matadd, matrix, minor, minpoly, mulcol, /им/row,multiply, norm, normalize, nullspace, orthog, permanent, pivot, potential, randmatrix, randvector, rank, ratform, row, rowdim, rowspace, rowspan, rref, scalarmul, singularvals, smith, stackmatrix, submatrix, subvector, sumbasis, swapcol, swaprow, Sylvester, toeplitz, trace, transpose, vandermonde, vecpotent, vectdim, vector, wronskian]
Ниже указано назначение тех функций пакета linalg, которые подробно не описаны:
- addcol — добавляет к одному из столбцов другой столбец, умноженный на некоторое число;
- addrow — добавляет к одной из строк другую строку, умноженную на некоторое число;
- angle — вычисляет угол между векторами;
- augment — объединяет две или больше матриц по горизонтали;
- backsub — реализует метод обратной подстановки при решении системы линейных уравнений (см. также forwardsub);
- band — создает ленточную матрицу;
- basis — находит базис векторного пространства;
- bezout — создает Bezout-матрицу двух полиномов; . г
- BlockDiagonal — создает блок-диагональную матрицу;
- blockmatrix — создает блок-матрицу;
- cholesky — декомпозиция Холесского для квадратной положительно определенной матрицы;
- charmat — создает характеристическую матрицу (charmat(M,v) — матрица, вычисляемая как v E-M);
- charpoly — возвращает характеристический полином матрицы;
- colspace — вычисляет базис пространства столбцов;
- colspan — находит базис линейной оболочки столбцов матрицы;
- companion — вычисляет сопровождающую матрицу, ассоциированную с полиномом;
- cond — вычисляет число обусловленности матрицы (cond(M) есть величина norm(M) norm(М-1);
- curl — вычисляет ротор вектора;
- definite — тест на положительную (отрицательную) определенность матрицы;
- diag — создает блок-диагональную матрицу;
- diverge — вычисляет дивергенцию векторной функции;
- eigenvals — вычисляет собственные значения матрицы;
- eigenvects — вычисляет собственные векторы матрицы;
- equal — определяет, являются ли две матрицы равными;
- exponential — создает экспоненциальную матрицу;
- ffgausselim — свободное от дробей Гауссово исключение в матрице;
- fibonacci — матрица Фибоначчи;
- forwardsub — реализует метод прямой подстановки при решении системы линейных уравнений (например, для матрицы L и вектора b
- forwardsub(L, b) возвращает вектор решения х системы линейных уравнений L-x=b);
- frobenius — вычисляет форму Фробениуса (Frobenius) матрицы;
- gausselim — Гауссово исключение в матрице;
- gaussjord — синоним для rref (метод исключения Гаусса—Жордана);
- geneqns — генерирует элементы матрицы из уравнений;
- genmatrix — генерирует матрицу из коэффициентов уравнений;
- grad — градиент векторного выражения;
- GramSchmidt — вычисляет ортогональные векторы;
- hadamard — вычисляет ограничение на коэффициенты детерминанта;
- hessian — вычисляет гессиан-матрицу выражения;
- hilbert — создает матрицу Гильберта;
- htranspose — находит эрмитову транспонированную матрицу;
- ihermite — целочисленная эрмитова нормальная форма;
- indexfunc — определяет функцию индексации массива;
- Innerprod — вычисляет векторное произведение;
- Intbasis — определяет базис пересечения пространств;
- ismith — целочисленная нормальная форма Шмитта;
- iszero — проверяет, является ли матрица ноль-матрицей;
- jacobian —’ вычисляет якобиан векторной функции;
- JordanBlock — возвращает блок-матрицу Жордана;
- kernel — находит базис ядра преобразования, соответствующего данной матрице;
- laplacian — вычисляет лапласиан;
- leastsqrs — решение уравнений по методу наименьших квадратов;
- linsolve — решение линейных уравнений;
- LudeComp — осуществляет LU-разложение;
- minpoly — вычисляет минимальный полином матрицы;
- mulcol — умножает столбец матрицы на заданное выражение;
- mulrow — умножает строку матрицы на заданное выражение;
- multiply — перемножение ‘матриц или матрицы и вектора;
- normalize — нормализация вектора;
- orthog — тест на ортогональность матрицы;
- permanent — вычисляет перманент матрицы — определитель, вычисляемый без перестановок;
- pivot — вращение относительно элементов матрицы;
- potential — вычисляет потенциал векторного поля;
- Qrdecomp — осуществляет QR-разложение;
- randmatrix — генерирует случайные матрицы;
- randvector — генерирует случайные векторы;
- ratform — вычисляет рациональную каноническую форму;
- references — выводит список основополагающих работ по линейной алгебре;
- rowspace — вычисляет базис пространства строки;
- rowspan — вычисляет векторы охвата для места столбца;
- rref — реализует преобразование Гаусса-Жордана матрицы;
- scalarmul — умножение матрицы или вектора на заданное выражение;
- singval — вычисляет сингулярное значение квадратной матрицы;
- singularvals — возвращает список сингулярных значений квадратной матрицы;
- smith — вычисляет Шмиттову нормальную форму матрицы;
- submatrix — извлекает указанную подматрицу из матрицы;
- subvector — извлекает указанный вектор из матрицы;
- sumbasis — определяет базис объединения системы векторов;
- swapcol — меняет местами два столбца в матрице;
- swaprow — меняет местами две строки в матрице;
- sylvester — создает матрицу Сильвестра из двух полиномов;
- toeplitz — создает матрицу Теплица;
- trace — возвращает след матрицы;
- vandermonde — создает вандермондову матрицу;
- vecpotent — вычисляет векторный потенциал;
- vectdim — определяет размерность вектора;
- wronskian — вронскиан векторных функций.
Ниже мы рассмотрим более подробно наиболее часто используемые функции из этого пакета. С деталями синтаксиса (достаточно разнообразного) для каждой из указанных функций можно ознакомиться в справочной системе Maple. далее…
Паде-аппроксимация с полиномами Чебышева
Паде-аппроксимация с полиномами Чебышева
Для многих аналитических зависимостей хорошие результаты дает аппроксимация полиномами Чебышева. В общем случае применяется Паде-аппроксимация отношением таких полиномов. Она реализуется функциями chebpade:
chebpade(f, x=a..b, [m.n])
chebpade(f., x, [m.n])
chebpade(f, a..b, [m,n])
Здесь а..b задает отрезок аппроксимации, тип— максимальные степени числителя и знаменателя полиномов Чебышева. Приведенный ниже пример показывает аппроксимацию Паде полиномами Чебышева для функции f=cos(x):
Наилучшая минимаксная аппроксимация
Минимаксная аппроксимация отличается от Паде-аппроксимации минимизацией максимальной абсолютной погрешности во всем интервале аппроксимации. Она использует алгоритм Ремеза (см. ниже) и реализуется следующей функцией:
mimmax(f, x=a..b, [m.n], w, ‘maxerror’)
minimax(f, a..b, [m,n], w, ‘maxerror’)
Здесь помимо уже отмеченных параметров w — процедура или выражение, maxerror — переменная, которой приписывается значение miniraax-нормы. Ниже дан пример аппроксимации функции cos(x) в интервале [-3, 3]:
Наилучшая минимаксная аппроксимация по алгоритму Ремеза
Для получения наилучшей полиномиальной аппроксимации используется алгоритм Ремеза, который реализует следующая функция:
remez(w, f, a, b, m, n,_crit, ‘maxerror’)
Здесь w — процедура, представляющая функцию w(x) > 0 в интервале [a, b], f — процедура, представляющая аппроксимируемую функцию а и b — числа,’ задающие интервал аппроксимации fa,b], m и n — степени числителя и знаменателя аппроксимирующей функции, crit — массив, индексированный от 1 до m + n + 2 и представляющий набор оценок в критических точках (то есть точек максимума/минимума кривых погрешности), mахеrrоr — имя переменной, которой присваивается минимаксная норма w abs(f -r).
Следующий пример иллюстрирует применение данной функции для аппроксимации функции erf(x):
Другие функции пакета
Отметим назначение других функций пакета numapprox:
- chebdeg(p) — возвращает степень полинома Чебышева р;
- chebmult(p, q) — умножение полиномов Чебышева р и q;
- chebsort(e) — сортирует элементы ряда Чебышева;
- confracform(r) — преобразует рациональное выражение г в цепную дробь;
- confracform(r, х) — преобразует рациональное выражение г в цепную дробь с независимой переменной х;
- hornerform(r) — преобразует рациональное выражение г в форму Горнера;
- hornerform(r, х) — преобразует рациональное выражение г в форму Горнера с независимой переменной х;
- infnorm(f, x=a…b, ‘xmax’) — возвращает L-бесконечную норму функции на отрезкех [а, b];
- infnorm(f, a…b, ‘xmax’) — возвращает L-бесконечную норму функции на отрезке [а, b].
Действие этих функций очевидно, и читатель может самостоятельно опробовать их в работе.
Пакет интегральных преобразований inttrans
Общая характеристика пакета
Это один из пакетов, наиболее важных для общематематических и научно-технических приложений. Он содержит небольшой набор функций:
> with(inttrans):
[addtable,fourier,fouriercos,fouriersin, hankel, hilbert, invfourier, invhilbert, invldplace, invmellin, laplace, mellin, savetable]
Однако эти функции охватывают такие практические важные области математики, как ряды Фурье, прямые и обратные преобразования Лапласа и Фурье и ряд других интегральных преобразований. далее…
Пакет для работы с суммами sumtools
Пакет для работы с суммами sumtools
Состав пакета sumtools
Этот инструментальный пакет предназначен для работы со специальными суммами. Он содержит указанные ниже функции:
> with(suintools);
[Hypersum, Sumtohyper, extended_gosper, gosper, hyperrecursion, hypersum, hyperterm, simpcomb, sumrecursion, sumtohyper]
Назначение функций данного пакета перечислено ниже:
- hypersum(U, L, z, n) и Hypersum(U, L, z, n) — вычисление гиперсумм;
- sumtohyper(f, k) и Sumtohyper(f, k) — преобразование сумм в гиперсуммы;
- extended_gosper(f, k), extended_gosper(f, k=m..n) и extended_gosper(f, k, j) — реализация расширенного алгоритма Госпера;
- gosper(f, k) и gosper(f, k=m..n) — реализация алгоритма Госпера;
- hyperrecursion(U, L, z, s(n)) — реализация гиперрекурсионного алгоритма;
- hyperterm(U, L, z, k) и Hyperterm(U, L,z, k) — ввод гипергеометрического терма.
Работа с пакетом sumtools
Приведем примеры на применение этих функций:
Из этих примеров применение функций данного пакета достаточно очевидно.
Пакет реализации степенных разложений powseries
Состав пакета powseries
Степенные разложения часто используются в математических расчетах для приближенного представления разнообразных функций и обеспечения единообразия такого представления. В пакете powseries сосредоточены расширенные средства по реализации таких разложений. Они представлены 22 функциями:
> with(powseries);
[compose, evalpow, inverse, multconst, multiply, negative, pawadd, powcos, powcreate, powdijff, powexp, powint, powlog, powpoly, powsin, powsolve, powsqrt, quotient, reversion, subtract, template, tpsform ]
Ниже представлено определение этих функций:
- compose(а,b) — объединяет ряды а и b;
- evalpow(expr) — вычисляет выражение ехрr и возвращает его в виде ряда;
- inverse(р) — инвертирует ряд р;
- mu1tconst(p,const) — умножает ряд р на константу const; ,
- multiply(a,b) — умножает ряд а на ряд b;
- negative(p) — возвращает аддитивный, обратный по отношению к р ряд;
- powadd(a,b,…) — складывает ряды а, b, …;
- powcreate(expr) — создает ряд для выражения ехрr;
- powpoly(pol ,var) — создает ряд для полинома pol по переменной van;
- powsolve(sys) — создает ряд для решения дифференциальных уравнений sys;
- quotient(a,b) — возвращает частное для а и b в виде ряда;
- reversion(a) — дает обратное к композиции разложение ряда а;
- subtract(а,b) — дает разность рядов а и b.
В выражении ехрr могут использоваться операторы +, -, *, / и ^. С ними могут комбинироваться встроенные функции и функции пользователя, например /(g). Кроме того, могут использоваться следующие функции:
Powexp |
powi nv |
powlog |
powneg |
powrev |
Powdiff |
powi nt |
powquo |
powsub |
powcos |
Powtan |
powsec |
powcsc |
powcot |
powsinh |
Powcosh |
powtanh |
powsech |
powcsch |
powcot h. |
Powsqrt |
powadd |
multiply |
Примеры применения пакета powseries
Назначение большинства этих функций очевидно из их названий — они возвращают соответствующую функцию (указанную после слова pow в имени) в виде разложения в ряд или полинома. Например, powexp раскладывает выражения с экспоненциальными функциями в ряд.
Получаемые функциями ряды представляются в специальном формате. Поэтому для их применения в обычном виде необходимо использовать функцию tpsform в следующих видах:
- tpsform(p, var, order) — преобразует ряд р в обычную форму с заданием порядка order;
- tpsform(p, var) — преобразует ряд р в обычную форму с порядком, заданным переменной Order.
Здесь р — имя степенного ряда, var.— переменная, относительно которой записан ряд, order — порядок ряда. Если параметр order не указан, используется значение глобальной переменной Order. Ниже даны примеры, иллюстрирующие технику работы со степенными разложениями:
Применение функций этого пакета достаточно просто и прозрачно, так что заинтересованный читатель может сам опробовать на примерах работу тех функций, которые не были использованы в приведенных примерах.
Пакет combstruct
Пакет combstruct
Еще девять функций, относящихся к структурам комбинаторики, содержит пакет combstruct:
> with(combstruct):
[allstructs, count, draw,finished, gfeqns, gfseries, gfsolve, iterstritcts, nextstruct]
Эти функции служат для создания случайно однородных объектов, принадлежащих заданному комбинаторному классу. Ограничимся приведением примеров применения этих функций:
> alltructs(Subset({one,two}));
{{ },{one, two}, {two}, {one}}
> anstructs(Permutation([x,y,z]),size=2):
[[x,y],[x,z],[y,x],[y,z],[z,x],[z,y]]
> count(Subset({l,2,3}));
8
> draw(Combiination(5),size=4);
{1,3,4,5}
> count(Permutation([a,a,b])): .
3
> 1t :=iterstructs(Permutation([a,a,b]),size=2);
it := table([finished = false, nextvalue = (pmc() … endproc )])
> draw(Partition(9));
[2,2,2,3]
> allstructs(Composition(3), size=2):
[[2,l],[l,2]]
Для более полного знакомства с этими специфическими функциями обратитесь к справочной системе.
Пакет финансово-экономических функций finance
Пакет финансово-экономических расчетов открывается командой:
> with(finance)
[amortization, annuity, blackscholes, cashflows, effectiverate,futurevalue, growingannuity, growingperpetuity, levelcoupon, perpetuity, presentvalue, yieldtomaturity]
Этот пакет представлен рядом указанных выше функций в двух формах:
function(args)
finance[function](args).
Благодаря правилам задания аргументов можно реализовать практически все известные финансово-экономические расчеты, такие как амортизация, накопления и платежи по вкладам и т. д. В свете задач рыночной экономики эти функции полезны для приверженцев решения всего на свете без выхода из оболочки Maple. Все же надо отметить, что малозаметные тонкости в определении финансово-экономических функций затрудняют их применение. далее…