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

Методичка Maple, Стребуляев

.pdf
Скачиваний:
309
Добавлен:
27.03.2015
Размер:
1.24 Mб
Скачать

Функция от двух переменных:

>restart:

>mtaylor(f(x,y),[x,y],3):

>mtaylor(sin(x^2+y^2),[x,y]);

x2 y2

> mtaylor(sin(x^2+y^2),[x,y],8);

2

2

1

6

1

 

2

4

1

 

4

2

1

 

6

x y

 

x

 

 

y

 

x

 

 

y

 

x

 

 

y

 

6

2

 

2

 

6

 

 

 

 

 

 

 

 

 

 

 

 

> mtaylor(sin(x^2+y^2),[x,y],8,[2,1]);

y2 x2 1 y6

6

> mtaylor(sin(x^2+y^2),[x=1,y],3);

sin(1) 2 cos(1) (x 1) ( 2 sin(1) cos(1)) (x 1)2 cos(1) y2

x y 1

x2

x

(y 1)

(y 1)2

x3

(y 1) x2 x

(y 1)2

(y 1)3

 

 

 

 

 

 

 

 

2

 

3

2

 

 

 

3

 

 

 

Ассимптотическое разложение функций:

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

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined > y[1]:=1/(1-x-x^2);

51

y1 :=

1

1 x x2

> asympt(y[1],x);

 

 

1

1

 

2

 

 

3

 

 

 

1

 

 

 

 

 

 

 

 

 

 

O

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

3

 

 

 

4

 

 

 

 

5

 

 

 

6

 

x

 

x

 

 

x

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

> y[2]:=evalf(convert(%,polynom));

 

 

 

 

y

:=

 

1.

 

 

 

1

 

 

2.

3.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x2

x4

 

 

 

 

 

2

 

 

 

 

 

 

x3

 

 

 

x5

 

 

># Сравним насколько отличается исходная функция от ее ассимптотического приближения;

>plot([y[1],y[2]],x=1..10,color=[BLUE,RED],linestyle=[ SOLID,DASHDOT],title="Функция и ее приближение",titlefont=[HELVETICA,BOLD,12],legend=["функция","приближение"],thickness=3);

Разложение в ряд Фурье функции:

Способ № 1

>

> # Разложение в ряд Фурье функции y(x)=abs(1-x) на

интервале (-1,1); > restart;

> with(linalg): with(plots):

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

52

> y := x -> abs(1 - x);

y := x 1 x

># Накладываем условия целочисленности на переменные n

иk;

>assume(n, integer); assume(k, integer);

>l := 2;

l := 2

># Расчитываем коэффициенты Фурье;

>a[0] := 1/2/l*int(y(x), x = -l..l);

a0 := 54

> a[n] := n -> 1/l*int(y(x)*cos(n*Pi*x/l), x = -l..l);

 

 

 

 

1

 

l

n x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

an~

:= n

 

 

y(x) cos

 

 

 

 

dx

l

 

l

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

l

 

 

 

 

 

 

 

> a[n](n);

 

 

 

 

 

 

 

n~

 

 

 

 

 

4

 

(-1)n~ cos

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n~2 2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

> b[n] := n -> (1/l)*int(y(x)*sin(n*Pi*x/l), x = -l..l);

 

 

 

 

 

l

 

 

 

 

 

1

n x

 

 

 

bn~

:= n

 

 

y(x) sin

 

 

dx

l

l

 

 

 

 

 

 

 

 

 

 

 

 

 

l

 

 

 

> b[n](n);

 

 

 

 

 

n~

 

 

2

 

(-1)n~ n~ 2 sin

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

n~2 2

>F := (x, k) -> a[0] + sum(a[n](n)*cos(n*Pi*x/l) + b[n] (n)*sin(n*Pi*x/l), n = 1..k);

 

 

k

 

 

 

n x

 

 

 

n x

 

 

 

 

 

a

 

 

 

b (n) sin

 

 

 

 

 

 

 

F := (x, k) a

 

(n) cos

 

 

 

 

 

0

 

n

 

l

n

l

 

 

 

 

 

 

 

 

 

 

 

n 1

 

 

 

 

 

> F(x, infinity);

53

 

 

 

 

 

 

 

 

 

 

n~

 

 

 

 

n~

 

 

 

n~ x

 

 

 

 

 

4

 

(-1)

 

cos

 

 

 

 

 

 

 

cos

 

 

 

 

5

 

 

 

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

2

 

 

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n~

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n~ 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

(-1)

n~

n~ 2 sin

n~

 

sin

 

n~ x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n~

2

 

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

> # Сравним насколько отличается исходная функция от ее

приближения рядом Фурье; > plot([y(x),F(x,20)],x=-

2..2,color=[BLUE,RED],linestyle=[SOLID,DASHDOT],title="Функция и ее приближение",titlefont=[HELVETICA,BOLD,12],legend=["функция","приближение"],thi ckness=3);

Способ № 2

>

> # Разложение в ряд Фурье функции y(x)=sh(4x) на интер-

вале (-Pi,Pi);

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

Warning, the protected names norm and trace have been redefined and unprotected

Warning, the name changecoords has been redefined

> y:=x->abs(1-x);

y := x 1 x

54

>`FurSer`:=proc(f,VarAndRange,n) local l,i,t,a,b,A,B,s,Res;

if whattype(VarAndRange)<>`=` then print(`Неверно введённый диапазон`);

else s:=lhs(VarAndRange); a:=lhs(rhs(VarAndRange)); b:=rhs(rhs(VarAndRange)); l:=(b-a)/2; Res:=1/(2*l)*int(f(t),t=a..b); for i from 1 to n do

A[i]:=1/l*int(f(t)*cos(Pi*t*i/l),t=a..b); B[i]:=1/l*int(f(t)*sin(Pi*t*i/l),t=a..b); Res:=Res+A[i]*cos(Pi*i*s/l)+B[i]*sin(Pi*i*s/l); end do;

Res;

fi;

end proc:

>z:=(x)->evalf(FurSer(y, x=-Pi..Pi,5));z(x);

z := x evalf(FurSer(y, x .. , 5 ))

1.729951270 0.9805869032 cos(x) 1.172316839 sin(x) 0.2253867691 cos(2. x)

0.1735907059 sin(2. x) 0.0007078860453 cos(3. x) 0.2221887893 sin(3. x)0.06579638907 cos(4. x) 0.1892671576 sin(4. x) 0.03268818911 cos(5. x)0.1029051483 sin(5. x)

> # Сравним насколько отличается исходная функция от ее

приближения рядом Фурье; > plot([y(x),z(x)],x=-

Pi..Pi,color=[BLUE,RED],linestyle=[SOLID,DASHDOT],ti tle="Функция и ее приближение",titlefont=[HELVETICA,BOLD,10],legend=["функция","приближение"],thi ckness=3);

55

1.7. Решение уравнений, неравенств и их систем

Решение линейных и нелинейных уравнений и неравенств — одна из важнейших областей математического анализа. Для решения указанного класса уравнений в аналитическом виде используется достаточно универсальная и гибкая функция solve(eqn, var) или

solve({eqn1,eqn2.....},{var1,var2....}) ,

где eqn — уравнение, содержащее функцию нескольких переменных, var — переменная, по которой ищется решение. Если при записи eqn не используется зхнак равенства или знаки отношения, считается, что solve ищет корни уравнения eqn = 0. Для получения численного решения нелинейного уравнения или системы нелинейных уравнений в форме вещественных чисел удобно использовать функцию fsolve(eqns, vars, options). Иногда бывает полезным использование и других модификаций функции solve: rsolve — для решения рекуррентных уравнений, isolve — для решения целочисленных уравнений, msolve — для решения по модулю m и других.

>

Решение одиночных нелинейных уравнений :

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

>f:=(2*x^2+3*x+1)*(3*x+1)=8*x^4;

f := (2 x2 3 x 1) (3 x 1) 8 x4

> fsolve(f,x);

-0.2807764064, 1.780776406

> fsolve(f,x,complex);

-0.3750000000 0.3307189139 I, -0.3750000000 0.3307189139 I, -0.2807764064,

1.780776406

> solve(f,x);

3

17

 

3

 

17

 

3

1

 

3

1

 

 

 

,

 

 

 

,

 

I

7 ,

 

 

I 7

4

 

4

8

8

4

 

4

 

 

8

 

8

 

> evalf(%);

1.780776406, -0.2807764060, -0.3750000000 0.3307189139I,

-0.3750000000 0.3307189139I

> fsolve(x^5-x,x,complex);

-1.000000000, -1.000000000 I, 0., 1.000000000 I, 1.000000000

> AA:=fsolve(2*x+(x+2)^2+(x^3-2*x)=0,x,complex);

56

AA:= -1., -2. I, 2. I

># Присвоение полученных значений корней, для последующего их анализа, осуществляется следующим образом:;

>AA[1];AA[2];AA[3];

-1.

-2. I

2. I

Решение трансцендентных уравнений:

>restart;

>f1:=sin(x); f2:=cos(x)-1;G1:=f1-f2; s:=fsolve(G1,x);

f1 := sin(x)

f2 := cos(x) 1

G1 := sin(x) cos(x) 1

s := 0.

> fsolve(sin(x)=Pi/4,x,complex);

0.9033391108

>A:=solve(a*x^2+b*x+c,x):

>A[1];

b b2 4 a c

2 a

>A[2];

 

b b2 4 a c

 

2 a

> BB:=evalf(solve(a*x^3+b*x^2+c*x+d,x)): > x[1]:=BB[1];

x1 := 0.1666666667 (36. c b a 108. d a2 8. b3

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

(1/3)

a )

/a

0.6666666667 (3. a c 1. b2 )

(a (36. c b a 108. d a2 8. b3

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3 a)

( 1/3)

)

0.3333333333 b

a

57

> x[2]:=BB[2];

x2 := 0.08333333333 (36. c b a 108. d a2 8. b3

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3 a)

(1/3)

/a

0.3333333333 (3. a c 1. b2 )

(a (36. c b a 108. d a2 8. b3

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

a)

(1/3)

 

)

 

 

0.3333333333

b

0.8660254040 I (0.1666666667 (36. c b a 108. d a2 8. b3

a

 

 

 

 

 

 

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

a)

(1/3)

 

/a

 

0.6666666667(3. a c 1. b2 )

(a (36. c b a 108. d a2 8. b3

 

 

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

(1/3)

))

 

a)

> x[3]:=BB[3];

x := 0.08333333333 (36. c b a 108. d a2 8. b3

 

3

 

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3 a)

(1/3)

/a

0.3333333333 (3. a c 1. b2 )

(a (36. c b a 108. d a2 8. b3

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

a)

(1/3)

 

)

 

 

0.3333333333

b

0.8660254040 I (0.1666666667 (36. c b a 108. d a2 8. b3

a

 

 

 

 

 

 

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

a)

(1/3)

 

/a

 

0.6666666667(3. a c 1. b2 )

(a (36. c b a 108. d a2 8. b3

 

 

 

 

20.78460970

4. a c3 1. c2 b2 18. c b a d 27. d2 a2 4. d b3

(1/3)

))

 

a)

>

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

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

>sys:={3*x+5*y=15,y=x-1};

sys := {3 x 5 y 15, y x 1 }

> sols:=solve(sys,{x,y});sols[1];sols[2];

58

sols := {y 32, x 52 }

y 32

x 52

># Присвоение полученных значений решения осуществляется следующим образом:

>x2:=rhs(sols[2]);# right-hand side (правая часть выражения);

x2 := 52

> y2:=rhs(sols[1]);

y2 := 32

># или с использованием оператора assign:;

>assign(sols);x;y;

5

2

3

2

># Проверка правильности полученного решения;

>subs(sols,sys);

3 3

{2 2, 15 15}

> x1:=subs(sols,x);

x1 := 52

> y1:=subs(sols,y);

y1 := 32

>implicitplot(sys,x=-10..10,y=- 10..10,thickness=3,color=blue);

>restart: with(plots):

>sys:={3*x-3*y=10,2*x+y=7,y=2*x+z+4};

sys := {3 x 3 y 10, 2 x y 7, y 2 x z 4 }

59

> sols:=solve(sys,{x,y,z});

-97

31

1

 

sols := {z

, x

, y

}

9

 

9

9

 

># Проверка правильности полученного решения;

>subs(sols,sys);

{10 10, 7 7, 19 19 }

>x2:=subs(sols,x);

x2 := 319

> y2:=subs(sols,y);

y2 := 19

> z2:=subs(sols,z);

z2 := -979

> implicitplot3d(sys,x=-10..10,y=-10..10,z=-

15..0,style=patchcontour,orientation=[-25,30]);

Решение систем нелинейных и трансцендентных уравнений:

>restart;

>solve({x*y=a,x+y=b},{x,y});

{y RootOf(_Z2 _Z b a), x RootOf(_Z2 _Z b a) b}

60