Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка Maple, Стребуляев.doc
Скачиваний:
120
Добавлен:
27.03.2015
Размер:
3.96 Mб
Скачать

1.8. Анализ функций

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

Поиск экстремумов функций:

> restart: with(plots):with(linalg):

> # Используем функцию extrema(expr,constrs,vars,'s'), где expr - вид функции, constr - ограничения,vars- аргументы функции, s - найденная абсцисса точки экстремума;

> y:=(x)->a*x^2+b*x+c;

> extrema(y(x),{},x,'s');# при отсутствии ограничений записывается пустой список {};

> s;subs(x=s,y(x));

>

> extrema(x*exp(-x),{},x,'s');evalf(%);

> s;

> plot(x*exp(-x),x=0..3);

> evalf(extrema(sin(x)^2,{},x,'s'));s;

> plot(sin(x)^2,x=-Pi..Pi);

Поиск минимума или максимума функции от двух переменных:

> restart: with(plots):

> z[1]:=(x,y)->x^2-3*x+y^2+3*y+3;

> minimize(z[1](x,y));

> minimize(z[1](x,y),location);

> plot3d(z[1](x,y),x=-5..5,y=-5..5,color=blue,thickness=1,axes=boxed);

> z[2]:=(x,y)->sin(y)*exp(-x);

> maximize(z[2](x,y));

> maximize(z[2](x,y),location);

> maximize(z[2](x,y),x=-10..10,y=-10..10,location);

> evalf(%);

> plot3d(z[2](x,y),x=-10..10,y=-10..10,color=blue,thickness=1,axes=boxed);

Анализ функций на непрерывность, сингулярность:

> restart:

> iscont(1/x^2,x=-1..1);# is function continue ?;

> iscont(1/x^2,x=0..1);

> iscont(1/x^2,x=0..1,'closed');

> iscont(1/x^2,x=-1..1,'closed');

> iscont(1/(x+2),x=-1..1);

> singular(ln(x)/(x^2-x));

> singular(tan(x));evalf(%);

> singular(1/sin(x));evalf(%);

> singular(x+y+1/x,{x,y});

Операции с полиномами:

> # Выделение коэффициентов полиномa p(x);

> restart:

> p:=a[4]*x^4+a[3]*x^3+a[2]*x^2+a[1]*x+a[0];

> coeff(p,x);# выделение коэффициента при x^1;

> coeff(p,x^3); coeff(p,x,3); # выделение коэффициента при x^3;

> coeffs(p,x);# выделение всех коэффициентов по возрастанию степени;

> collect(p,x);

> # Выделение коэффициентов полиномa q(x,t);

> q:=x^2+2*(t^2)+3*x+4*t+5;

> coeffs(q);

> coeffs(q,t);

> collect(q,x);

> collect(q,x,t);

> # Оценка коэффициентов полинома по степеням;

> restart:

> q:=1/x^2+2/x+3+4*x+5*x^2;

> lcoeff(q,x);# коэффициент при старшей степени x;

> lcoeff(q,x,'t'); t;

> coeffs(q,x,'t');t;

>

> p:=a[4]*x^4+a[3]*x^3+a[2]*x^2+a[1]*x+a[0];

> degree(p,x);# Высшая степень полинома;

> ldegree(p,x);# Низшая степень полинома;

> # Разложение полинома по степеням;

> restart:

> evala(AFactor(2*x^2+4*x-6));

> evala(AFactor(x^2+2*y^2));

> expand((x-1)*(x-2)*(x-3)*(x-4));

> AFactor(%);

> evala(%);

> expand((x-1+I+2)*(x+1-I*2)*(x-3));

> evala(AFactor(x^2-2*y^2));

> # Вычисление корней полинома;

> restart:

> p:=x^4+9*x^3+31*x^2+59*x+60;

> solve(p,x);# все корни полинома;

> roots(p,x);# вещественные корни полинома с учетом кратности;

> expand((x-1)*(x-2)*(x-3)*(x-4));

> roots(%,x);

> # Основные операции с полиномами;

> restart:

> readlib(psqrt);# подключение библиотек;

> readlib(proot);

> psqrt(x^2+2*x*y+y^2); # корень квадратный от выражения в функции psqrt;

> proot(x^3+3*x^2+3*x+1,3); # корень кубический от выражения в функции proot;

> psqrt(x+y);

> proot(x+y,3);

> p1:=a1*x^3+b1*x^2+c1*x+d1;

> p2:=a2*x^3+b2*x^2+c2*x+d2;

> p1+p2;# сумма полиномов;

> p1*p2;# произведение полиномов;

> collect(%,x);# упорядочивание полинома по убыванию степеней x;

> p3:=p1/p2; # деление полиномов;

> expand(%,x);

> normal(%);# приведение дроби к нормальному виду;

> diff(p1,x);# производная от полинома;

> diff(p1,x$2);

> Int(p1,x)=int(p1,x);# неопределенный интеграл от полинома;

> Int(p1,x=0..1)=int(p1,x=0..1); # определенный интеграл от полинома;

> p3;

> denom(p3);# знаменатель дроби;

> numer(p3); # числитель дроби;

> collect(denom(p3),x);

> collect(numer(p3),x);

на множители полинома;

> restart:

> p:=x^4+4;

> factor(p);

> # Разложение

> factor(p,complex);

> factor(x^5-6*x^4+9*x^3-6*x^2+8*x,complex);

> ifactor(453);

> # наименьший общий делитель (н.о.д) двух полиномов;

> s[1]:=x^2-x*sqrt(3)-sqrt(2)*x+sqrt(6);

> s[2]:=x^2-2;

> gcd(s[1],s[2]);# н.о.д двух полиномов;

1.9. Решение дифференциальных уравнений и их систем

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

dsolve(ode); dsolve(ode, y(x), extra_args); dsolve({ode,ics}, y(x), extra_args); dsolve({sysode,ics}, {funcs}, extra_args),

где ode— обыкновенное дифференциальное уравнение или система уравнений,y(x) — искомая функция одной переменной,ics— выражение, задающее начальные условия, {sysode} — множество дифференциальных уравнений (система), {funcs} — множество определяемых функций,extra_args— опция, задающая тип решения. Параметрextra_argsпринимает может принимать следующие значения:exact— аналитическое решение (принято по умолчанию),explicit— решение в явном виде,system— решение системы дифференциальных уравнений,formalseries— решение в форме степенного многочлена,series— решение в виде ряда,numeric— решение в численном виде. По умолчанию функцияdsolveавтоматически выбирает наиболее подходящий метод решения дифференциальных уравнений. Однако в параметрах функцииdsolveв квадратных скобках можно указать предпочтительный метод решения дифференциальных уравнений.Допустимы следующие методы: quadrature, linear, Bernoulli, inverse_linear, separable, homogeneous, Chini, lin_sym, exact, Abel, pot_sym.

Решение обыкновенных дифференциальных уравнений первого порядка:

> restart:with(linalg):with(DEtools):with(plots):

>

> dsolve(diff(y(x),x)-a*x=0,y(x));

> dsolve(diff(y(x),x)-y(x)=exp(-x),y(x));

> dsolve(diff(y(x),x)-y(x)=sin(x)*x,y(x));

> ode_L:=sin(x)*diff(y(x),x)-cos(x)*y(x)=0;

> dsolve(ode_L,[linear],useInt);

> value(%);

> dsolve(ode_L,[separable],useInt);

> value(%);

> mu:=intfactor(ode_L);

> dsolve(mu*ode_L,[exact],useInt);

> # Графическое представление решений дифференциального уравнения, применение функции odeplot пакета plots;

>

> restart:with(plots):

> P:=dsolve({diff(y(x),x)=cos(x^2*y(x)),y(0)=2},y(x),type=numeric);

> odeplot(P,[x,y(x)],-15..15,labels=[x,y],color=black,thickness=2);

>