Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

МЕТОДИЧКА ПО MAPLE и MATHCAD

.pdf
Скачиваний:
342
Добавлен:
10.05.2015
Размер:
8.75 Mб
Скачать

51

>sol:=solve(eqn,x);

>sol[2];

>sol[4];

>sol:=solve({eqn},x);

>s:=solve({3*x-y=sqrt(a),5*x-2*y=1},{x,y});

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

> sx:=solve(x^4+3*x^3-8*x+3,{x});

Само решение при этом выражается через корни аргумента функции, стоящей внутри RootOf. Его можно найти численно

> evalf(sx[1]);

Функция allvalues позволяет представить решение, используя радикалы

> allvalues(sx[1]);

> allvalues({sx});

52

Решение системы уравнений

>eq:=(y+2*x)*y=5*y,x^2+y-4=0:

>sol:=solve({eq},{x,y});

Обратите внимание! Последние два решения совпадают, т.е. решения являются кратными.

Если неизвестных больше, чем уравнений, то Maple выберет какие, либо переменные в качестве параметров, например для системы, из трех уравнений с четырьмя переменными получим решение в виде

>eq:={w+u+4*v+8*t=2, v*3+w=0,v=3*w-5*t}:

>solve(eq);

Явное указание неизвестных позволяет получить решение с нужным параметром

> solve(eq,{u,v,w});

Численного решения системы уравнений функция fsolve()

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

Параметры команды fsolve

a..b или x=a..b Задание интервала [a,b] для поиска решений avoid={x=s} Поиск решений отличных от x=s

complex Поиск комплексных решений maxsols=n Поиск n наименьших решений

 

53

x=s

Начальное приближение

 

В качестве примера рассмотрим полином шестой степени, для

которого найдем корни, применяя команду fsolve без параметров

>poly:=x^6-2*x^5-4*x^4-6*x^3+15*x^2+56*x-60:

>fsolve(poly);

Найдем два наименьших корня полинома

> fsolve(poly,x,maxsols=2);

Найдем вещественные и комплексные корни, отличающиеся от двух выше найденных

> fsolve(poly,x,complex,avoid={x=-2,x=1});

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

> fsolve(cos(Pi*x)=x);

Решение с указанием начального приближения в виде точки

> fsolve(cos(Pi*x)=x,x=0.5);

Задание начального приближения в виде интервала

> fsolve(cos(Pi*x)=x,x=-0.9..0.5);

Графическое решение уравнения

> plot([cos(Pi*x),x],x=-Pi..Pi);

54

Функция solve позволяет находить решения одного неравенства относительно одной переменно. Кроме команд solve и fsolve в Maple имеются функции isolve(en) для отыскания решения уравнения в целых числах и msolve(eqn.m) для нахождения решения уравнения по модулю m.

Решение обыкновенных дифференциальных уравнений (ОДУ)

Для получения аналитических, приближенных и численных решений дифференциальных уравнений применяется функция dsolve, причем во всех случаях используется единый синтаксис команды: dsolve(ODE,var,opt), здесь ODE дифференциальное уравнение или система дифференциальных уравнений относительно неизвестной функции var. Для решения задачи Коши в уравнение ODE нужно включить так же начальные условия, а для краевой задачи соответственно краевые условия. Условие opt позволяют указать способ решения (type=.....) и используемый метод (method=....). В уравнениях для указания производно применяется команда diff и оператор D, а для обозначения производной в начальных и краевых условиях используется оператор D. Система уравнений оформляется в виде множества: уравнения, начальные и краевые условия помещаются в фигурные скобки и записываются через запятую.

Аналитические решения ОДУ

> ode1 := diff(y(x),x)-y(x)^2+y(x)*sin(x)-cos(x);

Решение уравнения без задания начальных, граничных условий и метода решений. Обратите внимание на то, что решение уравнения содержит неопределенную постоянную _C1

>dsolve(ode1);

>ode2:=diff(y(x),x,x)+4*diff(y(x),x)+3*y(x)+2;

Зададим начальные условия y'(0)=0, y(0)=-1. Обратите внимание, в этом случае решение уже не содержит неопределенную постоянную.

55

>ic:=D(y)(0)=0,y(0)=-1:

>dsolve({ode2,ic},y(x));

>ode3:=y(x)*diff(y(x),x,x)+diff(y(x),x)+1=0;

Зададим начальные условия y'(a)=0, y(0)=0

>ic:=y(0)=0,diff(y(a),a)=0:

>simplify(dsolve({ode3,ic},y(x)));

>ode4:=diff(y(x),x,x)= (y(x)*x+y(x)*ln(x)*x^2+diff(y(x),x)*ln(x)*x^2)/ln(x)/x^2*exp(x)- y(x)/ln(x)/x^2;

>dsolve(ode4);

>ode5:=diff(y(x),x)*x=x+2*y(x);

>dsolve(ode5);

56

Численное решение дифференциальных уравнений

>with(plots):

>p:= dsolve({D(y)(x) = y(x), y(0)=1}, y(x),type=numeric):

>odeplot(p,[x,y(x)],-1..1);

>sys := diff(y(x),x)=z(x),diff(z(x),x)=y(x): fcns := {y(x), z(x)}: p:= dsolve({sys,y(0)=0,z(0)=1},fcns,type=numeric):

>odeplot(p, [[x,y(x)],[x,z(x)]],-4..4,numpoints=25);

Функциональные операторы

Функциональные операторы являются альтернативой функций. Используются две формы записи оператора ̵стрелочная и с помощью угловых скобок. Например:

>x->x^2:

><x^2|x>:

означает подстановку x^2 на место x.

Рассмотрим пример работы с функциональным оператором

>F:=(x)->`if`(x=0,1,sin(x)/x):

>(F(0));

57

> plot(F(x),x=-10..10);

Условные операторы

Использованная выше форма записи оператора if аналогична форме используемой в MathCAD, однако Maple содержит конструкцию оператора if , близкую к конструкции оператора, используемой в языках С и Pascal

>a := 3; b := 5;

>if (a > b) then a else b end if;

или

>c:=3: d:=5:

>if (c > d) then c else d fi;

Операторы цикла. В Maple используются следующие операторов цик-

ла for, while - do

> for i from 6 by 21 to 100 do print(i) end do;

или

> for i from 6 by 21 to 100 do print(i) od;

58

>restart; i:=0;

>while i<100 do i:=i+20

od;

Изменение естественного хода цикла с помощью операторов next и break например

> for i in[1,2,3,-2,4]do if i=-2 then next

else print(i) fi;

od;

> for i in[1,2,3,-2,4]do if i=-2 then break

else print(i) fi;

od;

59

Процедуры

Форма задания процедуры имеет вид name:=proc(параметры) объявление процедуры;

local (список локальных переменных) объявление локальных переменных;

global (список глобальных переменных) объявление глобальных переменных;

options (список опций) объявление опций; Тело процедуры

end; (или end:)

>n_fact:=proc(n) local i,c;

i:=1;

c:=1; while i<n do i:=i+1; c:=c*i;

od;

print(c);

end:

>n_fact(5);

Текст процедуры можно вывести на печать с помощью команды print(имя процедуры)

> print(n_fact);

Последовательности, списки

Последовательность (sequence) это набор элементов разделенных запятыми, без скобок. Например

S:=1,2,3,4;

Для генерации последовательности в пакете Maple служит команда

60

seq. Пример применения команды seq

>seq(i^2, i=1..5);

>seq(sin(Pi*i/6), i=0..6 );

>seq( x[i], i=1..5 );

Список(list) создается помещением через запятую элементов внутрь квадратных скобок

>A:=[a,sin(x),3,4]:

>B:=[[1,2,3],[2,4,3]]:

>type(A,list);type(B,list)2;

Создать список можно помещая команду seq в квадратные скобки. Пример

>X := [seq( i, i=0..6 )];

>type(X,'list');

Массивы (array), таблицы (table)

Для создания массива служит функция array. Синтаксис функции array

array(i..n,list1) формируется одномерный массив (вектор) с индексацией от i до n и элементами из списка list1,

array(i..n.j..m,list2) формируется массив (матрица) с элементами из списка list2.

>Va:=array(1..4,[a,sin(x),3,4]):

>Mb:=array(1..2,1..3,B):

>type(Va,array);type(Mb,array);type(Mb,matrix);

2 Функция type() проверяет тип переменной на соответствие ее типу list.