Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Вычисления с использованием арифметики произвольной точности 1 страница




 

MATLAB обычно ведет вычисления с числами, представленными в формате плавающей точки с двойной точностью. Это довольно высокая точность, обеспечивающая потребности практических вычислений в прикладных задачах. Однако ряд задач теории чисел, численного кодирования и некоторых других требует выполнения вычислений вообще без какой - либо погрешности или со сколь угодно малой погрешностью. Такие вычисления не очень удачно называют арифметикой произвольной точности: правильнее говорить о точной арифметике.

Для проведения вычислений в арифметике произвольной точности служит команда vpa:

R=vpa(S) – возвращает результат вычислений символьного выражения S, используя арифметику произвольной точности с текущим числом цифр D, установленным функцией digits. Результат R имеет тип sym;

R=vpa(S,D) – возвращает результат вычислений выражения S с текущим числом цифр D.

Переменная S может быть символьным массивом.

Примеры:

>>vpa(exp(1),50)

ans =

2.7182818284590455348848081484902650117874145507813

>>vpa([2*pi,exp(1),log(2)],10)

ans =

[ 6.283185308, 2.718281828,.6931471806]

Команда digits служит для установки числа цифр в числах арифметики произвольной точности. Она используется в одном из следующих вариантов:

digits – возвращает число значащих цифр в числах арифметики произвольной точности (по умолчанию 32);

digits(D) – устанавливает заданное число цифр D для арифметики произвольной точности.

Примеры вычисления числа π с 32 и 6 значащими цифрами:

>>digits

Digits = 32

>>vpa pi

ans =

3.1415926535897932384626433832795

>> digits 6

>> vpa pi

ans =

3.14159

3 КОМАНДЫ УПРОЩЕНИЯ ВЫРАЖЕНИЙ – simplify, simple

 

Команда simplify(S) упрощает символьное выражение или массив символьных выражений S. Если упрощение невозможно, то возвращается исходное выражение.

Пример для символьного выражения:

>> syms a b x

>>simplify((a^2-2*a*b+b^2)/(a-b))

ans =

a-b

Пример для вектор-столбца символьных выражений:

>> V=[sin(x)^2+cos(x)^2; log(a*b)]

V =

[ cos(x)^2+sin(x)^2]

[ log(a*b)]

>> simplify(V)

ans =

[ 1]

[ log(a*b)]

Возможности проведения упрощений с помощью команды simplify в Symbolic не обладают возможностями системы Maple в полной мере в связи с отсутствием опций, определяющих путь упрощения. Дополнительные возможности упрощения обеспечивает команда simple.

Команда simple(S) выполняет различные алгебраические преобразования символьного выражения S и выводит как промежуточные результаты, так и самый короткий результат. В модификации [R,HOW] = simple(S) промежуточные результаты не выводятся. Результат упрощений содержится в R, а в HOW указывается выполняемое преобразование. Следующие примеры иллюстрируют работу функции:

>> syms x

>> [R,HOW]=simple(cos(x)^2+sin(x)^2)

R =

HOW =

combine

>> [R,HOW]=simple(2*cos(x)^2-sin(x)^2)

R =

3*cos(x)^2-1

HOW =

simplify

>> [R,HOW]=simple(cos(x)^2-sin(x)^2)

R =

cos(2*x)

HOW =

combine

Существует более короткая модификация [R] = simple(S):

>> [R]=simple(cos(x)^2-sin(x)^2)

R =

cos(2*x)

 

4 КОМАНДА РАСШИРЕНИЯ ВЫРАЖЕНИЙ – expand

 

Команда expand(S) расширяет символьные выражения массива S. Рациональные выражения она раскладывает на простые дроби, полиномы – на полиномиальные выражения и т. д. Функция работает со многими алгебраическими и тригонометрическими функциями.

Примеры:

>>syms a b x

>>S=[(x+2)*(x+3)*(x-4),sin(2*x)];

>>expand(S)

ans =

[ x^3+x^2-14*x-24, 2*sin(x)*cos(x)]

>>expand(sin(a+b))

ans =

sin(a)*cos(b)+cos(a)*sin(b)

>>expand((a+b)^3)

ans =

a^3+3*a^2*b+3*a*b^2+b^3

 

5 РАЗЛОЖЕНИЕ ВЫРАЖЕНИЙ НА ПРОСТЫЕ МНОЖИТЕЛИ – КОМАНДА factor

 

Команда factor(S) поэлементно разлагает символьные выражения массива S на простые множители, а целые числа – на произведение простых чисел.

Примеры:

>>x=sym('x');

>>factor(x^7-1)

ans =

(x-1)*(x^6+x^5+x^4+x^3+x^2+x+1)

>>factor(sym('123456789'))

ans =

(3)^2*(3803)*(3607)

Пусть требуется найти определитель D (команда det) и обратную матрицу A-1 (команда inv) символьной матрицы

A =.

Решение:

>> syms a b

>> A=[a b;a^2 b^2]

A =

[ a, b]

[ a^2, b^2]

>> D=det(A)

D =

a*b^2-b*a^2

>> factor(D)

ans =

-a*b*(-b+a)

>> A1=inv(A)

A1 =

[ -b/a/(-b+a), 1/a/(-b+a)]

[ a/b/(-b+a), -1/b/(-b+a)]

 

6 ПРИВЕДЕНИЕ ПОДОБНЫХ ЧЛЕНОВ – КОМАНДА collect

 

Команда collect(S, v) работает с символьными полиномами S нескольких переменных, где v – одна из переменных полинома. Эта функция возвращает разложение полинома S по степеням v (S может быть массивом полиномов).

Примеры:

>>syms x y

>>S=[x^3*y^2+x^2*y+3*x*y^2,x^4*y-y*x^2];

>>collect(S,x)

ans =

[ x^3*y^2+x^2*y+3*x*y^2, x^4*y-x^2*y]

>>collect(S,y)

ans =

[ (x^3+3*x)*y^2+x^2*y, (x^4-x^2)*y]

 

7 ОБЕСПЕЧЕНИЕ ПОДСТАНОВОК – КОМАНДА subs

 

Одной из самых эффективных и часто используемых операций символьной математики является операция подстановки. Она реализуется с помощью команды subs со следующими формами записи:

subs(S) заменяет в символьном выражении S все переменные их символьными значениями, которые берутся из вычисляемой функции или рабочей области среды MATLAB;

subs(S, NEW) заменяет все свободные символьные переменные в S из списка NEW;

subs(S, OLD, NEW) заменяет OLD на NEW в символьном выражении S. При одинаковых размерах массивов OLD и NEW замена идет поэлементно. Если S и OLD – скаляры, а NEW – числовой массив или массив ячеек, то скаляры расширяются до массива результатов.

Примеры:

>>syms a b x y;

>>subs(x-y,y,1)

ans =

x-1

>>subs(sin(x)+cos(y),[x y],[a b])

ans =

sin(a)+cos(b)

Подстановка вместо переменной ее числового значения приводит к вычислению символьной функции от значения аргумента, например:

>> s=sym('x^(x+1)');

>> f=subs(s,'x',1.5)

f =

2.7557

Число можно заменить его символьным представлением и затем найти значение функции с произвольной точностью при помощи команды vpa:

>> f=subs(s,'x','1.5')

f =

(1.5)^((1.5)+1)

>> vpa(f,40)

ans =

2.7556759606310753604719445840441

 

8 ВЫЧИСЛЕНИЕ ПРЕДЕЛОВ – КОМАНДА limit

 

Для вычисления пределов функции F(x), заданной в аналитическом (символьном) виде, служит команда limit, которая используется в одном из следующих вариантов:

limit(F,x,a) – возвращает предел символьного выражения F в точке x = a;

limit(F,x,a,'right') или limit(F,x,a,'left') – возвращает предел в точке a справа или слева.

Продемонстрируем приемы вычисления пределов на следующих примерах:

а); б) с); д);

е); ж).

Решения в указанном порядке имеют вид:

>> syms a x

>> limit(sin(a*x)/(a*x),x,0)

ans =

>> limit((1+3/x)^(2*x),x,inf)

ans =

exp(6)

>> limit(1/(1-x),x,1)

ans =

NaN

Здесь переменная NaN означает, что предела функции в точке x = 1 не существует.

>> limit(1/(1-x),x,1,'right')

ans =

-inf

Правосторонний предел функции в точке x = 1 существует и равен - ∞.

>> limit(1/(1-x),x,1,'left')

ans =

inf

Левосторонний предел функции в точке x=1 существует и равен +∞.

>> limit(x*(log(a+x)-log(x))/5,x,inf)

ans =

1/5*a

 

9 ВЫЧИСЛЕНИЕ ПРОИЗВОДНЫХ – КОМАНДА diff

 

Для вычисления в символьном виде производных от выражения S служит команда diff, записываемая в форме diff(S, x, n). Она возвращает символьное значение n -ой производной (производной степени n) от символьного выражения или массива символьных выражений S по переменной x, т. е.

Sn(x) =.

В формате diff(S, x) находится первая производная (n = 1 по умолчанию).

Пример:

Найти первую и третью производные функции y = x2sinx.

Решение:

>> syms x

>> y=x^2*sin(x);

>> diff(y,x)

ans =

2*x*sin(x)+x^2*cos(x)

>> diff(y,x,3)

ans =

6*cos(x)-6*x*sin(x)-x^2*cos(x)

Если S массив, то diff возвращает массив, элементами которого являются производные от исходных функций, образующих массив.

Пример:

>> syms a x

>> Y=[a*log(x);x^a]

[ a*log(x)]

[ x^a]

>> diff(Y,x)

ans =

[ a/x]

[ x^a*a/x]

Если выражение S зависит от нескольких переменных, например, S=S(x,y), то ее частная производная (или S'x(x,y)) по аргументу x есть производная этой функции по x при постоянном значении y.

В декартовой системе координат на плоскости xOy градиент функции S(x,y) есть вектор

grad S =.

Частными производными второго порядка функции S=S(x,y) называются частные производные от ее первых производных,, т. е.

=, =, =, =.

 

Частные производные второго порядка обозначаются также символами S''xx(x,y), S''xy(x,y), S''yx(x,y), S''yy(x,y). Аналогично определяются и обозначаются частные производные более высоких порядков. Смешанные производные второго порядка, отличающиеся только порядком дифференцирования, равны между собой при условии их непрерывности: S''xy(x,y) = S''yx(x,y).

Пример:

Для функции двух переменных f(x,y) = arcsinxy найти gradf(x;y) и вычислить его в точке (0;0). Проверить выполнение условия f''xy(x,y) = f''yx(x,y).

Решение:

>> syms x y

>> f=asin(x*y);

>> x1=diff(f,x)

x1 =

y/(1-x^2*y^2)^(1/2)

>> pretty(x1)

y

---------------

2 2 1/2

(1 - x y)

Т. е. =.

>> y1=diff(f,y)

y1 =

x/(1-x^2*y^2)^(1/2)

>> pretty(y1)

x

---------------

2 2 1/2

(1 - x y)

Т. е. =. Тогда grad(arcsinxy) =.

Проверка:

>> subs([x1 y1],[x y],[0 0])

ans =

0 0

Итак, grad(arcsinxy)(0;0) = (0;0).

>> xy=diff(x1,y)

xy =

1/(1-x^2*y^2)^(1/2)+y^2/(1-x^2*y^2)^(3/2)*x^2

>> [m]=simple(xy)

m =

1/(1-x^2*y^2)^(3/2)

>> pretty(m)

---------------

2 2 3/2

(1 - x y)

 

Следовательно, =.

 

>> yx=diff(y1,x)

yx =

1/(1-x^2*y^2)^(1/2)+y^2/(1-x^2*y^2)^(3/2)*x^2

>> [m]=simple(yx)

m =

1/(1-x^2*y^2)^(3/2)

>> pretty(m)

---------------

2 2 3/2

(1 - x y)

 

Значит, =.

Окончательный результат:

grad(arcsinxy)(0;0) = (0;0) и f''xy(x,y) = f''yx(x,y) =.

10 ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ – КОМАНДА int

 

В ряде случаев возникает необходимость вычисления неопределенных и определенных интегралов

I = dx и I = dx.

Здесь f(x) – подынтегральная функция независимой переменной x, a нижний и b верхний пределы интегрирования для определенного интеграла.

Команда int(f, x) возвращает неопределенный интеграл (первообразную функцию) от символьного выражения f по переменной x.

Команда int(f, x, a, b) возвращает значение определенного интеграла от символьного выражения f по переменной x с пределами от а до b.

Подынтегральная функция f может зависеть от символьных параметров, а также быть массивом символьных выражений.

Если f массив, то int(f, x) возвращает массив первообразных, а int(f, x, a, b) – массив значений определенных интегралов.

Примеры:

>> syms x

>> f=[sin(x);1/x]

f =

[ sin(x)]

[ 1/x]

>> int(f,x)

ans =

[ -cos(x)]

[ log(x)]

>> int(f,x,1,2)

ans =

[ -cos(2)+cos(1)]

[ log(2)]

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

>> syms x a

>> int(log(x+a)/sqrt(x+a),x)

ans =

2*log(x+a)*(x+a)^(1/2)-4*(x+a)^(1/2)

>> [m]=simple(ans)

m =

2*(x+a)^(1/2)*(log(x+a)-2)

Полученную первообразную 2(ln(x+a) - 2), зависящую от символьного параметра a, проверим дифференцированием по x:

>> diff(m,x)

ans =

1/(x+a)^(1/2)*(log(x+a)-2)+2/(x+a)^(1/2)

>> [m]=simple(ans)

m =

log(x+a)/(x+a)^(1/2)

>> pretty(m)

 

log(x + a)

-----------

1/2

(x + a)

В результате дифференцирования получена подынтегральная функция

,

т. е. выражение 2(ln(x+a) - 2) действительно является первообразной.

Пример:

Вычислить определенный интеграл

dx.

Решение:

Подынтегральная функция задана в аналитическом виде с символьными переменными a, b, x, а пределами интегрирования являются символьные переменные c, d. Интегрировать можно по любой из переменных a, b, x. Здесь интегрирование осуществляется по переменной x, поэтому int возвращает значение интеграла, выраженное через параметры a, b, c, d

>> syms x a b c d

>> int(x/(a+b*x^2),x,c,d)

ans =

1/2*(log(a+d^2*b)-log(a+c^2*b))/b

>> pretty(ans)

2 2

log(a + d b) - log(a + c b)

1/2 --------------------------------

b

Пример:

Вычислить определенный интеграл по переменной b

db.

Решение:

>> syms x a b c d

>> int(x/(a+b*x^2),b,c,d)

ans =

(log(a+d*x^2)-log(a+c*x^2))/x

>> pretty(ans)

2 2

log(a + d x) - log(a + c x)

--------------------------------

x

От символьных параметров могут зависеть и кратные определенные интегралы.

Пример:

Вычислить тройной интеграл

(x2+y2)zdxdydz.

Решение:

Применив команду int трижды, получим символьный ответ:

>> syms a x y z

>> int(int(int((x^2+y^2)*z,x,0,a),y,0,a),z,0,a)

ans =

1/3*a^6

Команда int не позволяет получить неопределенный интеграл от произвольной функции.

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

При вводе int выдается предупреждение об ошибке и команда возвращается без результата:

>> syms x

>> int(exp(abs(sin(x))),x)

Warning: Explicit integral could not be found.

> In C:\matlab6p5\toolbox\symbolic\@sym\int.m at line 58

ans =

int(exp(abs(sin(x))),x)

Это означает, что либо первообразной не существует либо система MATLAB не смогла ее найти.

В некоторых случаях int возвращает выражение для первообразной через специальные функции.

Пример:

Вычислить неопределенный интеграл

dx.

Решение:

>> syms x

>> int(sin(x)/x)

ans =

sinint(x)

Ответ содержит функцию интегральный синус, которая определяется интегралом с переменным верхним пределом:

Si(x) = dt.

Вычисление несобственных интегралов, зависящих от параметров, имеет некоторые особенности.

Пример:

Вычислить несобственный интеграл

dt.

Решение:

Команда int возвращается без результата:

>> syms a n t

>> int(t^n*exp(-a*t),t,0,inf)

ans =

int(t^n*exp(-a*t),t = 0.. inf)

Система MATLAB не смогла вычислить интеграл потому, что величина интеграла зависит от знака параметра n, который при определении n остается незаданным. При инициализации символьной переменной n укажем ее знак, например:

>> syms a t

>> n=sym('n','positive');

>> int(t^n*exp(-a*t),t,0,inf)

ans =

1/(a^n)/a*gamma(n)*n

Значение интеграла выражается через гамма - функцию, информацию о которой можно получить с помощью команды doc gamma. Если n целое, то gamma(n)×n = n!, и в таком случае

dt =.

Пример:

Вычислить определенный интеграл

dx.

Решение:

Команда int возвращает символьное значение определенного интеграла, выраженное через функцию арксинус:

>> syms x

>> format long

>> int(asin(x),x,0,pi/4)

ans =

1/4*pi*asin(1/4*pi)+1/4*(16-pi^2)^(1/2)-1

Для получения решения в естественной форме достаточно активизировать с помощью мыши строку ответа и нажать клавишу <Enter>. Будет получен следующий ответ (в установленном формате вывода):

ans =

0.32847177096777

Команда vpa (см. раздел 2) позволяет вывести на экран результат вычислений с любым числом текущих цифр, например, с 20:

>> int(asin(x),x,0,pi/4)

ans =

1/4*pi*asin(1/4*pi)+1/4*(16-pi^2)^(1/2)-1

>> vpa(ans,20)

ans =

.3284717709677653169

Пример:

Вычислить несобственный интеграл

dx.

Решение:

>> syms x

>> int(1/sqrt(abs(x-2)),x,1,3)

ans =

Пример:

Вычислить несобственный интеграл

dx.

Решение:

>> syms x

>> int(x*exp(-x),x,0,inf)

ans =

Ранее система MATLAB не смогла найти первообразную от функции e|sinx|.

Но она позволяет вычислить определенный интеграл от этой функции.

Пример:

Вычислить определенный интеграл

I = dx.

Решение:

При обращении к int выдается предупреждение об ошибке и команда возвращается без результата:

>> syms x

>> I=int(exp(abs(sin(x))),x,0,2*pi)

I =

int(exp(abs(sin(x))),x = 0.. 2*pi)

Это означает, что команда int символьное решение не нашла. Воспользуемся теперь командой vpa. При интегрировании с 15 текущими цифрами получим:

>> vpa(I,15)

ans =

12.4175160714222

Пример:

Вычислить двойной интеграл

I = esin(x²+y²)dxdy.

Решение:

Двойное применение int выдает предупреждение об ошибке и команда возвращается без результата:

>> syms x y

>> I=int(int(exp(sin(x^2+y^2)),x,0,pi),y,0,pi)

I =

int(int(exp(sin(x^2+y^2)),x = 0.. pi),y = 0.. pi)

Символьное решение не найдено. Совместное применение int и vpa возвращает приближенное значение интеграла. При вычислениях с 10 текущими цифрами получим:

>> vpa(int(int(exp(sin(x^2+y^2)),x,0,pi),y,0,pi),10)

ans =

13.44629794

Пример:

Вычислить тройной интеграл

I = sin(x2+y2+z2)dxdydz.

Решение:

Тройное обращение к int возвращает символьное решение, выраженное через гипергеометрическую функцию и интегралы Френеля:

>> syms x y z

>> I=int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi);

>> [R]=simple(I)

R =

1/18*pi^(5/2)*2^(1/2)*(6*pi^2*hypergeom([3/4],[3/2, 7/4],-1/4*pi^4)*FresnelC(2^(1/2)*pi^(1/2))*hypergeom([1/4],[1/2, 5/4],-1/4*pi^4)-pi^4*hypergeom([3/4],[3/2, 7/4],-1/4*pi^4)^2*FresnelS(2^(1/2)*pi^(1/2))+9*hypergeom([1/4],[1/2, 5/4],-1/4*pi^4)^2*FresnelS(2^(1/2)*pi^(1/2)))

Вычислим интеграл командами int и vpa с 15 текущими цифрами:

>>vpa(int(int(int(sin(x^2+y^2+z^2),x,0,pi),y,0,pi),z,0,pi),15)

ans =

.280500993612534

 

11 РАЗЛОЖЕНИЕ В РЯД ТЕЙЛОРА – КОМАНДА taylor

 

В задачах аппроксимации и приближения функций f(x) важное место занимает их разложение в ряд Тейлора в окрестности точки a:

f(x) = .

Частным случаем этого ряда при a = 0 является ряд Маклорена:

f(x) = .

Для получения разложения аналитической функции f в ряд Тейлора (и Маклорена) служит команда taylor:

taylor(f) – возвращает разложение в ряд Маклорена до шестой степени. В общем случае, когда необходимо получить разложение в ряд Тейлора до n - й степени в точке a, относительно которой находится разложение, используется команда taylor(f,n,x,a).

Примеры разложения в ряды Тейлора и Маклорена функции cos(x):

>> syms x

>> taylor(cos(x))

ans =

1-1/2*x^2+1/24*x^4

>> taylor(cos(x),5,x,2)

ans =

cos(2)-sin(2)*(x-2)-1/2*cos(2)*(x-2)^2+1/6*sin(2)*(x-2)^3+1/24*cos(2)*(x-2)^4

Пример:

Получить разложение в степенной ряд по степеням x «функции ошибок»

Erf(x) = dt,

которая не выражается в конечном виде через элементарные функции.

Решение:

>> syms x t

>> Pi=sym('pi');

>> taylor(2/sqrt(Pi)*int(exp(-t^2),t,0,x))

ans =

2/pi^(1/2)*x-2/3/pi^(1/2)*x^3+1/5/pi^(1/2)*x^5

>> [m]=simple(ans)

m =

1/15*x*(30-10*x^2+3*x^4)/pi^(1/2)

>> pretty(m)

2 4

x (30 - 10 x + 3 x)

1/15 -------------------------

1/2

pi

Команда taylortool приводит к появлению окна приложения, изображенного на рисунке 1.

 

 

Рисунок 1

Пользователь может вводить формулы различных функций в строке f(x) = и исследовать приближение функции на произвольном интервале отрезком ряда Тейлора, содержащим различное число членов разложения.

 

12 РЕШЕНИЕ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ – КОМАНДА solve

 

Для решения систем уравнений и одиночных уравнений служит команда

solve(expr1, expr2,..., exprN, var1, var2,..., varN). Она возвращает значения переменных varI, при которых соблюдаются равенства, заданные выражениями exprI. Если в выражениях не используются знаки равенства, то полагается, что exprI = 0.

Результат может быть возвращен в следующих формах:

для одного уравнения и одной переменной решение возвращается в виде одномерного или многомерного массива ячеек;

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

Команда solve позволяет найти не только вещественные, но и комплексные решения систем уравнений и одиночных уравнений. Справку по этой команде можно получить, введя команду doc solve.

Пример:

Решить уравнение x3 - 1 = 0.

Решение:

>> syms x,y=x^3-1;S=solve(y)

S =

[ 1]

[ -1/2+1/2*i*3^(1/2)]

[ -1/2-1/2*i*3^(1/2)]

В результате получены три разных значения корня x1 = 1, x2 =, x3 =, которые хранятся соответственно в элементах S(1), S(2), S(3) массива S.

Проверка:

С помощью subs (раздел 7) подставим найденные значения корней в выражение x3 - 1:

>> subs(y,x,S)

ans =

[ 0]

[ (-1/2+1/2*i*3^(1/2))^3-1]

[ (-1/2-1/2*i*3^(1/2))^3-1]

>> [m]=simple(ans)

m =

[ 0]

[ 0]

[ 0]

Выражение x3 - 1 принимает значение 0 при подстановке любого из найденных корней, поэтому x1, x2, x3 являются точными корнями уравнения x3 - 1 = 0.

В общем случае полиномиальное уравнение степени выше 4 не может иметь точного решения, выраженного с помощью радикалов.

Команда solve позволяет решать уравнения, представленные в аналитическом виде.

Пример:

Решить квадратное уравнение ax2+bx+c = 0.

Решение:

>> S=solve('a*x^2+b*x+c=0',x)

S =

[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]

[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]

Команда solve возвратила известные выражения корней x1,2 = квадратного уравнения ax2+bx+c = 0. Точно также можно выразить с помощью радикалов решения кубического уравнения ax3+bx2+cx+d = 0, хотя эти выражения достаточно сложные.

Пример:

Решить трансцендентное уравнение xlnx+1 - 1 = 0.

Решение:

>> syms x

>> S=solve('x^(log(x)+1)-1',x)

S =

[ exp(0)]

[ exp(-1)]

Проверка:

>> subs(x^(log(x)+1)-1,x,S)

ans =

[ 0]

[ 0]

В данном случае solve нашла точные значения корней x1 = 1, x2 = e−1.

Пример:

Решить трансцендентное уравнение lnx + 3 - x = 0.

Решение:

>> solve('log(x)+3-x=0')

ans =

[ -lambertw(-exp(-3))]

[ -lambertw(-1,-exp(-3))]

Команда solve возвратила значения корней, выраженные через функцию Ламберта.

Команда vpa возвращает приближенные значения этих корней, вычисленные с 20 значащими цифрами:

>> vpa(ans,20)

ans =

[.52469097457714872410e-1]

[ 4.5052414957928833670]

Решение любого трансцендентного уравнения достаточно сложная и серьезная проблема. Иногда solve возвращает неверные решения.

Пример:

Решить трансцендентное уравнение sinxlnsinx+xx - 2 = 0.

Решение:

>> syms x

Y=sin(x)^log(sin(x))+x^x-2;

>> S=solve(Y)

S =

1/2*pi

Проверка:

>> subs(Y,S)




Поделиться с друзьями:


Дата добавления: 2014-12-07; Просмотров: 641; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.