Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Методы решения математических задач в Maple
IV. Математический анализ: дифференциальное и интегральное исчисление функции одной переменной
§1. Вычисление пределов
В Maple для некоторых математических операций существует по две команды: одна прямого, а другая отложенного исполнения. Имена команд состоят из одинаковых букв за исключением первой: команды прямого исполнения начинаются со строчной буквы, а команды отложенного исполнения с заглавной. После обращения к команде отложенного действия математические операции (интеграл, предел, производная и т.д.) выводятся на экран в виде стандартной аналитической записи этой операции. Вычисление в этом случае сразу не производится. Команда прямого исполнения выдает результат сразу.
Для вычисления пределов имеются две команды:
> Limit(sin(2*x)/x,x=0);
> limit(sin(2*x)/x,x=0);
2
С помощью этих двух команд принято записывать математические выкладки в стандартном аналитическом виде, например:
> Limit(x*(Pi/2+arctan(x)),x=-infinity)=
limit(x*(Pi/2+arctan(x)), x=-infinity);
Односторонние пределы вычисляются с указанием параметров: left для нахождения предела слева и righ справа. Например:
> Limit(1/(1+exp(1/x)),x=0,left)=
limit(1/(1+exp(1/x)),x=0,left);
> Limit(1/(1+exp(1/x)),x=0,right)=
limit(1/(1+exp(1/x)), x=0,right);
Задание 1.
> Limit((1-x)*tan(Pi*x/2),x=1)=
limit((1-x)*tan(Pi*x/2),x=1);
> Limit(arctan(1/(1-x)),x=1,left)=
limit(arctan(1/(1-x)), x=1, left);
> Limit(arctan(1/(1-x)),x=1,right)=
limit(arctan(1/(1-x)),x=1, right);
§2. Дифференцирование
Вычисление производных.
Для вычисления производных в Maple имеются две команды:
Пример:
> Diff(sin(x^2),x)=diff(sin(x^2),x);
Для вычисления производных старших порядков следует указать в параметрах x$n, где n порядок производной; например:
> Diff(cos(2*x)^2,x$4)=diff(cos(2*x)^2,x$4);
Полученное выражение можно упростить двумя способами:
> simplify(%);
> combine(%);
Дифференциальный оператор.
Для определения дифференциального оператора используется команда D(f) f-функция. Например:
> D(sin);
cos
Вычисление производной в точке:
> D(sin)(Pi):eval(%);
-1
Оператор дифференцирования применяется к функциональным операторам
> f:=x-> ln(x^2)+exp(3*x):
> D(f);
Задание 2.
> Diff(sin(2*x)^3-cos(2*x)^3,x)=
diff(sin(2*x)^3-cos(2*x)^3,x);
> Diff(exp(x)*(x^2-1),x$24)=
diff(exp(x)*(x^2-1),x$24):
> collect(%,exp(x));
> y:=sin(x)^2/(2+sin(x)): d2:=diff(y,x$2):
> x:=Pi; d2y(x)=d2;
x:= d2y()=1
> x:=Pi/2;d2y(x)=d2;
х:=
§3. Исследование функции
Исследование функции необходимо начинать с нахождения ее области определения, но, к сожалению, это трудно автоматизируемая операция. Поэтому при рассмотрении этого вопроса приходится решать неравенства (см. тему II). Однако, ответить на вопрос, определена ли функция на всей числовой оси, или нет, можно исследовав ее на непрерывность.
Непрерывность функции и точки разрыва.
Проверить непрерывность функции f(x) на заданном промежутке [x1,x2] можно с помощью команды iscont(f,x=x1..x2). Если функция f непрерывна на этом интервале, то в поле вывода появится ответ true (истина); если функция f не является непрерывной на этом интервале, то в поле вывода появится ответ false (ложь). В частности, если задать интервал x=-infinity..+infinity, то функция f будет проверяться на всей числовой оси. В этом случае, если будет получен ответ true, то можно сказать, что функция определена и непрерывна на всей числовой оси. В противном случае следует искать точки разрыва. Это можно сделать двумя способами:
Перед использованием этих команд их следует обязательно загрузить из стандартной библиотеки readlib(name), где name имя любой из указанных выше команд.
Обе эти команды выдают результаты в виде перечисления точек разрыва в фигурных скобках. Тип такой записи называется set. Для того, чтобы в дальнейшем можно было использовать полученные значения точек разрыва, следует из типа set с помощью команды convert перевести их в обычный числовой тип.
Задание 3.1.
> readlib(iscont): readlib(discont):
> iscont(exp(1/(x+3)),x=-infinity..+infinity);
false
Это означает, что функция не является непрерывной. Поэтому следует найти точки разрыва с помощью команды:
> discont(exp(1/(x+3)),x);
{-3}
Ответ наберите в текстовом режиме в новой строке:
“Точка разрыва x=3.”
> readlib(singular):
> iscont(tan(x/(2-x)),x=-infinity..infinity);
false
> singular(tan(x/(2-x)),x);
{x=2},{x=2}
Здесь _N целые числа. Ответ наберите в текстовом режиме в новой строке:
“Точки разрыва: x=2 и x=2(2n+1)/((2n+1)-2).”
Экстремумы. Наибольшее и наименьшее значение функции.
В Maple для исследования функции на экстремум имеется команда extrema(f,{cond},x,s) , где f - функция, экстремумы которой ищутся, в фигурных скобках {cond} указываются ограничения для переменной, х имя переменной, по которой ищется экстремум, в апострофах s указывается имя переменной, которой будет присвоена координата точки экстремума. Если оставить пустыми фигурные скобки {}, то поиск экстремумов будет производиться на всей числовой оси. Результат действия этой команды относится к типу set. Пример:
> readlib(extrema):
> extrema(arctan(x)-ln(1+x^2)/2,{},x,x0);x0;
{{x=1}}
В первой строке вывода приводится экстремум функции, а во второй строке вывода точка этого экстремума.
К сожалению, эта команда не может дать ответ на вопрос, какая из точек экстремума есть максимум, а какая минимум. Для нахождения максимума функции f(x) по переменной х на интервале используется команда maximize(f,x,x=x1..x2), а для нахождения минимума функции f(x) по переменной х на интервале используется команда minimize(f, x, x=x1..x2). Если после переменной указать infinity или интервал
x=-infinity..+infinity, то команды maximize и minimize будут искать, соответственно, максимумы и минимумы на всей числовой оси как во множестве вещественных чисел, так и комплексных. Если такие параметры не указывать, то поиск максимумов и минимумов будет производиться только во множестве вещественных чисел. Пример:
> maximize(exp(-x^2),{x});
1
Недостаток этих команд в том, что они выдают только значения функции в точках максимума и минимума, соответственно. Поэтому для того, чтобы полностью решить задачу об исследовании функции y=f(x) на экстремумы с указанием их характера (max или min) и координат (x, y) следует сначала выполнить команду:
> extrema(f,{},x,s);s;
а затем выполнить команды maximize(f,x); minimize(f,x). После этого будут полностью найдены координаты всех экстремумов и определены их характеры (max или min).
Команды maximize и minimize быстро находят абсолютные экстремумы, но не всегда пригодны для нахождения локальных экстремумов. Команда extrema вычисляет так же критические точки, в которых функция не имеет экстремума. В этом случае экстремальных значений функции в первой строке вывода будет меньше, чем вычисленных критических точек во второй строке вывода. Выяснить характер найденного экстремума функции f(x) в точке x=x0 можно, если вычислить вторую производную в этой точке и по ее знаку сделать вывод: если , то в точке x0 будет min, а если то max.
В последней версии пакета аналитических вычислений Maple 6 описанный выше недостаток команд maximize и minimize устранен. Координаты точек максимума или минимума можно получить, если в параметрах этих команд после переменной записать через запятую новую опцию location. В результате в строке вывода после самого максимума (минимума) функции будут в фигурных скобках указаны координаты точек максимума (минимума). Например:
> minimize(x^4-x^2, x, location);
, {, }
В строке вывода получились координаты минимумов и значения функции в этих точках.
Команды extrema, maximize и minimize обязательно должны быть загружены из стандартной библиотеки командой readlib(name), где name имя загружаемой команды.
Задание 3.2.
> readlib(extrema):
> y:=(x^2-1/2)*arcsin(x)/2+x*sqrt(1-x^2)/4-
Pi*x^2/12:
> extrema(y,{},x,'s');s;
После выполнения этих команд найдены экстремумы функции и точки экстремумов. Порядок следования xкоординат экстремумов во второй строке вывода соответствует порядку следования значений экстремумов в первой строке вывода. Таким образом, найдены экстремумы в точках (0,0) и (1/2, /24+). Осталось выяснить, какая из них является максимумом, а какая минимумом. Для этого используйте команды maximize и minimize.
> readlib(maximize):readlib(minimize):
> ymax:=maximize(y,{x});
> ymin:=minimize(y,{x});
Ответ наберите в текстовом режиме в новой строке:
“Экстремумы: , .”
Для набора математических символов и греческих букв в текстовом режиме следует нажать кнопку со значком суммы на Панели инструментов. В появившейся строке ввода формул ниже Панели инструментов следует набирать обычные команды Maple, после чего нажать Enter. Например, для отображения формулы следует набрать в строке ввода формул sqrt(3).
Для возвращения в текстовый режим снова следует нажать на кнопку с буквой «Т».
Поэтому порядок набора второй формулы в ответе такой:
нажать на кнопку
> f:=x^2*ln(x):
> maximize(f,{x},{x=1..2});
> minimize(f,{x},{x=1..2}):simplify(%);
Ответ наберите в текстовом режиме в новой строке:
”Наибольшее значение: , наименьшее значение “.
> restart:y:=x^3/(4-x^2): readlib(extrema):
readlib(maximize): readlib(minimize):
> extrema(y,{},x,'s');s;
{}
{{x=0},{},{}}
Получено два экстремума и три критические точки. Исследование можно продолжить с помощью второй производной:
> d2:=diff(y,x$2): x:=0: d2y(x):=d2;
d2y(0):=0
> x:=2*sqrt(3):d2y(x):=d2;
> x:=-2*sqrt(3):d2y(x):=d2;
Так как , то в точке x=0 нет экстремума; так как , то в точке будет max; так как , то в точке будет min. Перейдите в текстовый режим и запишите ответ в виде:
“Максимум в точке (), минимум в точке ()”.
Исследование функции по общей схеме.
> iscont(f, x=-infinity..infinity);
> d1:=discont(f,x);
> d2:=singular(f,x);
В результате наборам переменным d1и d2 будут присвоены значения x-координат в точках разрыва 1 и 2-го родов (если они будут найдены).
> yr:=d2;
Поведение функции f(x) на бесконечности характеризуется наклонными асимптотами (если они есть). Уравнение наклонной асимптоты y=kx+b, где коэффициенты вычисляются по формулам:
и .
Аналогичные формулы для . Поэтому нахождение наклонных асимптот можно провести по следующей схеме:
> k1:=limit(f(x)/x, x=+infinity);
> b1:=limit(f(x)-k1*x, x=+infinity);
> k2:=limit(f(x)/x, x=-infinity);
> b2:=limit(f(x)-k2*x, x=-infinity);
Часто оказывается, что k1=k2 и b1=b2, в этом случае будет одна асимптота при и при . С учетом этого составляется уравнение асимптоты
> yn:=k1*x+b1;
> extrema(f(x), {}, x, s);
> s;
> fmax:=maximize(f(x), x);
> fmin:=minimize(f(x), x);
После выполнения этих команд будут найдены координаты (x, y) всех максимумов и минимумов функции f(x).
Построение графика.
Построение графика функции f(x) это окончательный этап исследования функции. На рисунке помимо графика исследуемой функции f(x) должны быть нанесены все ее асимптоты пунктирными линиями, подписаны координаты точек max и min. Приемы построения графиков нескольких функций и нанесения надписей были рассмотрены в теме III.
Задание 3.3.
> f:=x^4/(1+x)^3:
В текстовом режиме наберите “Непрерывность функции”. В режиме командной строки и наберите:
> readlib(iscont): readlib(discont):
readlib(singular):
> iscont(f, x=-infinity..infinity);
false
Это означает, что функция не является непрерывной. Перейдите в текстовый режим и наберите “Нахождение точек разрыва”. Вернитесь в режим командной строки и наберите:
> discont(f,x);
{-1}
Конвертировать полученное значение точки разрыва типа set в число можно командой convert, добавив вторую опцию, например, `+`. Обратите внимание на обратные кавычки, которые набираются клавишей, расположенной выше клавиши табуляции.
> xr:=convert(%,`+`);
xr:= 1
Перейдите в текстовый режим и наберите: “Получена точка бесконечного разрыва x=1”. С новой строки наберите: “Нахождение асимптот.”. Перейдите на новую строку и наберите “Уравнение вертикальной асимптоты: x=1” (это можно сделать, поскольку вертикальные асимптоты возникают в точках бесконечного разрыва). С новой строки наберите: “Коэффициенты наклонной асимптоты:”. Перейдите в режим командной строки и наберите:
> k1:=limit(f/x, x=+infinity);
k1 :=1
> b1:=limit(f-k1*x, x=+infinity);
b1 := 3
> k2:=limit(f/x, x=-infinity);
k2 :=1
> b2:=limit(f-k2*x, x=-infinity);
b2 := 3
В этом случае коэффициенты наклонных асимптот при и оказались одинаковыми. Поэтому перейдите в текстовый режим и наберите “Уравнение наклонной асимптоты:”. Затем в новой строке прейдите в режим командной строки и наберите:
> y=k1*x+b1;
В текстовом режиме наберите “Нахождение экстремумов”. В новой строке наберите команды:
> readlib(extrema): readlib(maximize):
readlib(minimize):
> extrema(f,{},x,'s');s;
{, 0}
{{x= 4},{x=0}}
Поскольку функция имеет разрыв, то при поиске максимума и минимума следует указать интервал, в который не должна входить точка разрыва.
> fmax:=maximize(f,{x},{x=-infinity..-2});
> fmin:=minimize(f,{x},{x=-1/2..infinity});
В текстовом режиме наберите результат исследования в виде:
“Максимум в точке (4, 256/27); минимум в точке (0, 0).”
> restart: y:=arctan(x^2):
> iscont(y, x=-infinity..infinity);
true
> k1:=limit(y/x, x=-infinity);
k1:=0
> k2:=limit(y/x, x=+infinity);
k2:=0
> b1:=limit(y-k1*x, x=-infinity);
> b2:=limit(y-k1*x, x=+infinity);
> yh:=b1;
> extrema(y,{},x,'s');s;
{0}
{{x=0}}
> ymax:=maximize(y,{x}); ymin:=minimize(y,{x});
> with(plots): yy:=convert(y,string):
> p1:=plot(y,x=-5..5, linestyle=1, thickness=3,
color=BLACK):
> p2:=plot(yh,x=-5..5, linestyle=1,thickness=1):
> t1:=textplot([0.2,1.7,"Асимптота:"],
font=[TIMES, BOLD, 10], align=RIGHT):
> t2:=textplot([3.1,1.7,"y=Pi/2"],
font=[TIMES, ITALIC, 10], align=RIGHT):
> t3:=textplot([0.1,-0.2,"min:(0,0)"],
align=RIGHT):
> t4:=textplot([2,1,yy], font=[TIMES, ITALIC,
10], align=RIGHT):
> display([p1,p2,t1,t2,t3,t4]);
§4. Интегрирование
Аналитическое и численное интегрирование.
Неопределенный интеграл вычисляется с помощью 2-х команд:
Для вычисления определенного интеграла в командах int и Int добавляются пределы интегрирования, например,
> Int((1+cos(x))^2, x=0..Pi)=
int((1+cos(x))^2, x=0..Pi);
Если в команде интегрирования добавить опцию continuous: int(f, x, continuous), то Maple будет игнорировать любые возможные разрывы подынтегральной функции в диапазоне интегрирования. Это позволяет вычислять несобственные интегралы от неограниченных функций. Несобственные интегралы с бесконечными пределами интегрирования вычисляются, если в параметрах команды int указывать, например, x=0..+infinity.
Численное интегрирование выполняется командой evalf(int(f, x=x1..x2), e), где e точность вычислений (число знаков после запятой).
Интегралы, зависящие от параметра. Ограничения для параметров.
Если требуется вычислить интеграл, зависящий от параметра, то его значение может зависеть от знака этого параметра или каких-либо других ограничений. Рассмотрим в качестве примера интеграл , который, как известно из математического анализа, сходится при а>0 и расходится при а<0. Если вычислить его сразу, то получится:
> Int(exp(-a*x),x=0..+infinity)=
int(exp(-a*x),x=0..+infinity);
Definite integration: Can't determine if the integral is convergent.
Need to know the sign of --> a
Will now try indefinite integration and then take limits.
.
Таким способом интеграл с параметром не вычислить. Для получения явного аналитического результата вычислений следует сделать какие-либо предположения о значении параметров, то есть наложить на них ограничения. Это можно сделать при помощи команды assume(expr1), где expr1 неравенство. Дополнительные ограничения вводятся с помощью команды additionally(expr2), где expr2 другое неравенство, ограничивающее значение параметра с другой стороны.
После наложения ограничений на параметр Maple добавляет к его имени символ (~), например параметр a, на который были наложены некоторые ограничения, в сроке вывода будет иметь вид: a~.
Описание наложенных ограничений параметра a можно вызвать командой about(a). Пример: наложить ограничения на параметр a такие, что a>-1, a3:
> assume(a>-1); additionally(a<=3);
> about(a);
Originally a, renamed a~:
is assumed to be: RealRange(Open(-1),3)
Вернемся к вычислению интеграла с параметром , которое следует производить в таком порядке:
> assume(a>0);
> Int(exp(-a*x),x=0..+infinity)=
int(exp(-a*x),x=0..+infinity);
Обучение основным методам интегрирования.
В Maple имеется пакет student, предназначенный для обучения математике. Он содержит набор подпрограмм, предназначенных для выполнения расчетов шаг за шагом, так, чтобы была понятна последовательность действий, приводящих к результату. К таким командам относятся интегрирование по частям inparts и замена переменной changevar.
Формула интегрирования по частям:
Если обозначить подынтегральную функцию f=u(x)v(x), то параметры команды интегрирования по частям такие: intparts(Int(f, x), u), где u именно та функция u(x), производную от которой предстоит вычислить по формуле интегрирования по частям.
Если в интеграле требуется сделать замену переменных x=g(t) или t=h(x), то параметры команды замены переменных такие: changevar(h(x)=t, Int(f, x), t), где t новая переменная.
Обе команды intparts и changevar не вычисляют окончательно интеграл, а лишь производят промежуточную выкладку. Для того, чтобы получить окончательный ответ, следует, после выполнения этих команд ввести команду value(%); где % - обозначают предыдущую строку.
Не забудьте, перед использованием описанных здесь команд обязательно загрузить пакет student командой with(student).
Задание 4.
б) .
> Int(cos(x)*cos(2*x)*cos(3*x),x)=
int(cos(x)*cos(2*x)*cos(3*x), x);
> Int((3*x^4+4)/(x^2*(x^2+1)^3),x)=
int((3*x^4+4)/(x^2*(x^2+1)^3),x);
> assume (a>0); assume (b>0);
> Int(sin(x)*cos(x)/(a^2*cos(x)^2+b^2*sin(x)^2),
x=0..Pi/2)=int(sin(x)*cos(x)/(a^2*cos(x)^2+b^2*
sin(x)^2),x=0..Pi/2);
> restart; assume(a>-1);
> Int((1-exp(-a*x^2))/(x*exp(x^2)),
x=0..+infinity)=int((1-exp(-a*x^2))/(x*exp(x^2)),
x=0..+infinity);
> Int(cos(x)/x, x=Pi/6..Pi/4)=evalf(int(cos(x)/x,
x=Pi/6..Pi/4), 15);
> restart; with(student): J=Int(x^3*sin(x),x);
> J=intparts(Int(x^3*sin(x),x),x^3);
> intparts(%,x^2);
> intparts(%,x);
> value(%);
> J=Int(1/(1+cos(x)), x=-Pi/2..Pi/2);
> J=changevar(tan(x/2)=t,Int(1/(1+cos(x)),
x=-Pi/2..Pi/2), t);
> value(%);
J=2
Контрольные задания.
Контрольные вопросы.
V. Линейная алгебра
§1. Векторная алгебра
Основная часть команд для решения задач линейной алгебры содержится в библиотеке linalg. Поэтому перед решением задач с матрицами и векторами следует загрузить эту библиотеку командой with(linalg).
Способы задания векторов.
Для определения вектора в Maple используется команда vector([x1,x2,…,xn]), где в квадратных скобках через запятую указываются координаты вектора. Например:
> x:=vector([1,0,0]);
x:=[1, 0, 0]
Координату уже определенного вектора x можно получить в строке вывода, если ввести команду x[i] , где i номер координаты. Например, первую координату заданного в предыдущем примере вектора можно вывести так:
> x[1];
1
Вектор можно преобразовать в список и, наоборот, с помощью команды convert(vector, list) или convert(list, vector).
Сложение векторов.
Сложить два вектора a и b можно с помощью двух команд:
1) evalm(a+b);
2) matadd(a,b).
Команда add позволяет вычислять линейную комбинацию векторов a и b: , где скалярные величины, если использовать формат: matadd(a,b,alpha,beta).
Скалярное, векторное произведение векторов и угол между векторами.
Скалярное произведение двух векторов вычисляется командой dotprod(a,b).
Векторное произведение двух векторов вычисляется командой crossprod(a,b).
Угол между двумя векторами a и b вычисляется с помощью команды angle(a,b).
Норма вектора.
Норму (длину) вектора , которая равна , можно вычислить с помощью команды norm(а,2).
Можно нормировать вектор а с помощью команды normalize(a), в результате выполнения которой будет получен вектор единичной длины .
Нахождение базиса системы векторов. Ортогонализация системы векторов по процедуре Грамма-Шмидта.
Если имеется система n векторов , то с помощью команды basis([a1,a2,…,an]) можно найти базис этой системы.
При помощи команды GramSchmidt([a1,a2,…,an]) можно ортогонализовать систему линейно-независимых векторов .
Задание 1.
1. Даны два вектора: и . Найти и угол между a и b. Для решения этой задачи наберите:
> with(linalg):
> a:=([2,1,3,2]); b:=([1,2,-2,1]);
a:=[2,1,3,2]
b:=[1,2,-2,1]
> dotprod(a,b);
0
> phi=angle(a,b);
2. Найти векторное произведение , а затем скалярное произведение , где , .
> restart; with(linalg):
> a:=([2,-2,1]); b:=([2,3,6]);
a:=[2,2,1]
b:=[2,3,6]
> c:=crossprod(a,b);
c:=[15,10,10]
> dotprod(a,c);
0
3. Найти норму вектора .
> restart; with(linalg):
> a:=vector([1,2,3,4,5,6]): norm(a,2);
4. Из системы векторов: , , , , выделить базис и ортогонализовать его по процедуре Грамма-Шмидта:
> restart; with(linalg):
> a1:=vector([1,2,2,-1]):
a2:=vector([1,1,-5,3]):
a3:=vector([3,2,8,7]): a4:=vector([0,1,7,-4]):
a5:=vector([2,1,12,-10]):
> g:=basis([a1,a2,a3,a4,a5]);
g:= [a1, a2, a3, a5]
> GramSchmidt(g);
[[1,2,2,1], [2,3,3,2], ,
§2. Действия с матрицами
Определение матрицы.
Для определения матрицы в Maple можно использовать команду matrix(n, m, [[a11,a12,…,a1n], [a21,a22,…,a2m],…, [an1,an2,…,anm]]), где n число строк, m число столбцов в матрице. Эти числа задавать необязательно, а достаточно перечислить элементы матрицы построчно в квадратных скобках через запятую. Например:
> A:=matrix([[1,2,3],[-3,-2,-1]]);
В Maple матрицы специального вида можно генерировать с помощью дополнительных команд. В частности диагональную матрицу можно получить командой diag. Например:
> J:=diag(1,2,3);
Генерировать матрицу можно с помощью функции f(i, j) от переменных i, j индексов матрицы: matrix(n, m, f), где где n - число строк, m число столбцов. Например:
> f:=(i, j)->x^i*y^j;
> A:=matrix(2,3,f);
Число строк в матрице А можно определить с помощью команды rowdim(A), а число столбцов с помощью команды coldim(A).
Арифметические операции с матрицами.
Сложение двух матриц одинаковой размерности осуществляется теми же командами, что и сложение векторов: evalm(A+B) или matadd(A,B). Произведение двух матриц может быть найдено с помощью двух команд:
В качестве второго аргумента в командах, вычисляющих произведение, можно указывать вектор, например:
> A:=matrix([[1,0],[0,-1]]);
> B:=matrix([[-5,1], [7,4]]);
> v:=vector([2,4]);
> multiply(A,v);
> multiply(A,B);
> matadd(A,B);
Команда evalm позволяет также прибавлять к матрице число и умножать матрицу на число. Например:
> С:=matrix([[1,1],[2,3]]):
> evalm(2+3*С);
Определители, миноры и алгебраические дополнения. Ранг и след матрицы.
Определитель матрицы А вычисляется командой det(A). Команда minor(A,i,j) возвращает матрицу, полученную из исходной матрицы А вычеркиванием i-ой строки и j-ого столбца. Минор Mij элемента aij матрицы А можно вычислить командой det(minor(A,i,j)). Ранг матрицы А вычисляется командой rank(A). След матрицы А, равный сумме ее диагональных элементов, вычисляется командой trace(A). 7
> A:=matrix([[4,0,5],[0,1,-6],[3,0,4]]);
> det(A);
1
> minor(А,3,2);
> det(%);
-24
> trace(A);
9
Обратная и транспонированная матрицы.
Обратную матрицу А1 , такую что А1А=АА1=Е, где Е единичная матрица, можно вычислить двумя способами:
Транспонирование матрицы А это изменение местами строк и столбцов. Полученная в результате этого матрица называется транспонированной и обозначается А'. Транспонированную матрицу А' можно вычислить командой transpose(A).
Например, используя заданную в предыдущем пункте матрицу А, найдем ей обратную и транспонированную:
> inverse(A);
> multiply(A,%);
> transpose(A);
Выяснение типа матрицы.
Выяснить положительную или отрицательную определенность матрицы можно при помощи команды definite(A,param), где param может принимать значения: 'positive_def' положительно определена (A>0), 'positive_semidef' неотрицательно определенная , 'negative_def' отрицательно определенная (A<0), 'negative_semidef' неположительно определенная . Результатом действия будет константа true подтверждение, false отрицание сделанного предположения. Например:
> A:=matrix([[2,1],[1,3]]);
> definite(А,'positive_def');
true
Проверить ортогональность матрицы А можно командой orthog(A).
> В:=matrix([[1/2,1*sqrt(3)/2],
[1*sqrt(3)/2,-1/2]]);
> orthog(В);
true
Функции от матриц.
Возведение матрицы А в степень n производится командой evalm(A^n). Вычисление матричной экспоненты возможно с помощью команды exponential(A). Например:
> Т:=matrix([[5*a,2*b],[-2*b,5*a]]);
> exponential(Т);
> evalm(Т^2);
Задание 2.
> with(linalg):restart;
> A:=matrix([[4,3],[7,5]]):
> B:=matrix([[-28,93],[38,-126]]):
> C:=matrix([[7,3],[2,1]]):
> F:=evalm(A&*B&*C);
> Det(A)=det(A); Det(B)=det(B); Det(C)=det(C);
Det(F)=det(F);
Det(A)=1
Det(B)=6
Det(C)=1
Det(F)=6
> A:=matrix([[2,5,7],[6,3,4],[5,-2,-3]]);
> Det(A)=det(A);
Det(A)=1
> transpose(A);
> inverse(A);
> det(minor(A,2,2));
41
> A:=matrix([[8,-4,5,5,9], [1,-3,-5,0,-7],
[7,-5,1,4,1], [3,-1,3,2,5]]):
> r(A)=rank(A);
r(A)=3
> exponential([[3,-1],[1,1]]);
> A:=matrix([[5,1,4],[3,3,2],[6,2,10]]):
> P(A)=evalm(A^3-18*A^2+64*A);
§3. Спектральный анализ матрицы
Собственные числа и собственные векторы матрицы.
Из курса линейной алгебры известно, что если Ах=х, то вектор х называется собственным вектором матрицы А, а число собственным числом, соответствующим данному собственному вектору. Совокупность всех собственных чисел матрицы называется спектром матрицы. Если в спектре матрицы одно и тоже собственное число встречается k раз, то говорят, что кратность этого собственного числа равна k.
Для нахождения собственных чисел матрицы А используется команда eigenvalues(A). Для нахождения собственных векторов матрицы А используется команда eigenvectors(A). В результате выполнения этой команды будут получены собственные числа, их кратность и соответствующие собственные векторы.
Чтобы понять, в каком виде получаются результаты выполнения команды eigenvectors, внимательно разберитесь со следующим примером: матрица имеет 3 собственных вектора: , отвечающий собственному числу кратности 1, , отвечающий собственному числу кратности 1, , отвечающий собственному числу кратности 1. Найдем их в Maple:
> A:=matrix([[3,-1,1],[-1,5,-1],[1,-1,3]]):
> eigenvectors(A);
[2,1,{[-1,0,1]}], [3,1,{[1,1,1]}], [6,1,{[1,-2,1]}]
В строке вывода перечислены в квадратных скобках собственное число, его кратность и соответствующий собственный вектор в фигурных скобках , затем следующие наборы таких же данных.
Характеристический и минимальный многочлены матрицы.
Для вычисления характеристического многочлена матрицы A используется команда charpoly(A,lambda).
Минимальный многочлен (делитель) матрицы А можно найти с помощью команды minpoly(A,lambda).
Канонические и специальные виды матрицы.
Привести матрицу А к нормальной форме Жордана можно командой jordan(A).
К треугольному виду матрицу А можно привести тремя способами:
Характеристическую матрицу можно вычислить командой charmat(A,lambda).
Задание 3.
> U:=matrix([[3,2-I],[2+I,7]]):
> eigenvectors(U);
,
> A:=matrix([[3,-I,0],[I,3,0],[0,0,4]]):
> eigenvectors(A);
[2, 1, {([1, I, 0])}], [4, 2, {([0, 0, 1]), ([I, 1, 0])}]
> P(lambda):=charpoly(A,lambda);
> d(lambda):=minpoly(A,lambda);
> jordan(A);
> A:=matrix([[1,-3,4],[4,-7,8],[6,-7,7]]):
> j:=jordan(A);
> g:=gausselim(A);
> F(A):=charmat(A,lambda);
Самостоятельно проверьте, чем будет отличаться результат выполнения команды ffgausselim(A) от gausselim(A) на этом примере.
§4. Системы линейных уравнений. Матричные уравнения
Системы линейных уравнений и матричные уравнения.
Система линейных уравнений может быть решена двумя способами.
Способ 1: стандартная команда solve находит решение системы линейных уравнений, записанных в развернутом виде:
.
Способ 2: команда linsolve(A,b) из пакета linalg находит решение уравнения . Аргументы этой команды: А матрица, b вектор.
С помощью команды linsolve(A,b) можно найти решение матричного уравнения АХ=В, если в качестве аргументов этой команды указать, соответственно, матрицы А и В.
Ядро матрицы.
Ядро матрицы А это множество векторов х таких, произведение матрицы А на которые равно нулевому вектору: . Поиск ядра матрицы А эквивалентен решению системы линейных однородных уравнений. Найти ядро матрицы А можно командой kernel(A).
Задание 4.
> eq:={2*x-3*y+5*z+7*t=1, 4*x-6*y+2*z+3*t=2,
2*x-3*y-11*z-15*t=1}:
> s:=solve(eq,{x,y,z});
s:={, y=y, }
Для нахождения частного решения следует выполнить подстановку конкретного значения одной из переменных при помощи команды subs:
> subs({y=1,t=1},s);
{, , 1=1}
> A:=matrix([[1,2],[3,4]]):
> B:=matrix([[3,5],[5,9]]):
> X:=linsolve(A,B);
> A:=matrix([[1,1,0],[0,2,-1],[1,3,-1]]):
> r(A):=rank(A);
r(A):=2
> d(A):=rowdim(A)-r(A);
d(A):=1
> k(A):=kernel(A);
k(A):={[1,1,2]}
Контрольные задания.
Контрольные вопросы.
PAGE 75
EMBED PBrush
EMBED PBrush