- •Основы компьютерного моделирования электрических цепей
- •24 Ноября 2009, протокол № 8
- •1 Символьные переменные, константы и выражения
- •2 Вычисления с использованием арифметики произвольной точности
- •3 Команды упрощения выражений – simplify, simple
- •4 Команда расширения выражений – expand
- •5 Разложение выражений на простые множители – команда factor
- •6 Приведение подобных членов – команда collect
- •7 Обеспечение подстановок – команда subs
- •8 Вычисление пределов – команда limit
- •9 Вычисление производных – команда diff
- •10 Вычисление интегралов – команда int
- •11 Разложение в ряд тейлора – команда taylor
- •12 Решение алгебраических уравнений – команда solve
- •13 Решение дифференциальных уравнений – команда dsolve
- •14 Прямое и обратное преобразования лапласа – команды laplace, ilaplace
- •15 Графики символьных функций – команды ezplot, ezpolar
- •16 Прямой доступ к ядру системы Maple – команда maple
- •17 Разложение рациональной дроби на сумму простейших дробей
- •18 Интерполяционный полином лагранжа
- •19 Решение дифференциальных уравнений с помощью степенных рядов
- •Вопросы для самопроверки
- •Задания для самостоятельной работы
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Варианты
- •Литература
- •Содержание
- •Основы компьютерного моделирования электрических цепей
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 =
1
>> 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