- •2.Операции над числами и их элементарными функциями
- •3. Ввод матриц и элементарные операции над ними, решение системы линейных алгебраических уравнений
- •4. Функции и графики
- •5. Выполнение операций математического анализа с использованием пакета символьной математики
- •6. Численное интегрирование обыкновенных дифференциальных уравнений методом Рунге-Кута
4. Функции и графики
>> x=0:10
x =
Columns 1 through 9
0 1 2 3 4 5 6 7 8
Columns 10 through 11
9 10
>> plot(x,tan(x))
x=0:10;
plot(x,tan(x)),grid
>> x=0:5
x =
0 1 2 3 4 5
>> plot(x,acos(x))
>> x=0:.05:5;
>> plot(x,acos(x)),grid
>> x=0:7
x =
0 1 2 3 4 5 6 7
>> plot(x,atan(x))
>> x=0:.05:7;
>> plot(x,atan(x)),grid
Построим синусоиду в полярных координатах, используя команду polar:
>> x=0:.04*pi:6*pi;
>> polar(x,cos(x))
>> x=0:.04*pi:6*pi;
>> polar(x,atan(x))
>> x=0:.04*pi:6*pi;
>> polar(x,tan(x))
Построим на одном и том же графике пару кривых, например, синусоиду и косинусоиду для двух их периодов.
>> x=-4*pi:.01*pi:2*pi;
>> y=sin(x);
>> z=cos(x);
>> plot(x,sin(x),x,cos(x)),grid
>> x=-4*pi:.01*pi:2*pi;
>> y=sin(x);
>> z=tan(x);
>> plot(x,sin(x),x,tan(x)),grid
>> x=-5*pi:.05*pi:2*pi;
>> y=cos(x);
>> z=cot(x);
>> plot(x,cos(x),x,cot(x)),grid
Теперь построим для промежутка 2pi два семейства из пяти синусоид каждое, различающихся в первом случае амплитудой, во втором – частотой. Для этого в команды встроим матрицы-столбцы (транспонированные матрицы-строки) множителей, в первом случае – амплитуд, во втором – частот.
x=0:.01*pi:2*pi;
>> y=[1:5]'*cos(x);
>> plot(x,y),grid
>> x=0:.05*pi:3*pi;
>> y=[1:5]'*tan(x);
>> plot(x,y),grid
>> x=0:.05*pi:4*pi;
>> y=[1:7]'*atan(x);
>> plot(x,y),grid
Обратим внимание на возможность рассчитывать и отображать на графиках сложные функции вида функций от комбинаций элементарных. Пример – log2|cos(x^2)|:
x=.4:.01:2.5;
>> y=-log2(abs(cos(x.^9)));
>> plot(x,y),grid
>> x=.4:.05:2.8;
>> y=[1:7]'*acos(x);
>> plot(x,y),grid
>> x=.7:.05:2.8;
>> y=[1:9]'*asin(x);
>> plot(x,y),grid
Построение графика сложной функции в полярных координатах:
>> x=0:.01*pi:2*pi;
>> polar(x,abs(sin(6*x)))
Пока мы имели дело с двумерными графиками. Теперь построим трехмерную спираль, используя команду построения трехмерных графиков plot3.
>>x=-pi:.01*pi:2*pi;
>>y=sin(x);
>>z=cos(x);
>>plot3(x,y,z),grid
Многие другие графические средства, одно- и многооконные, двумерные и трехмерные вы можете освоить с помощью графического раздела справочного аппарата системы.
Введенные значения аргумента x и функций от него составляют матрицы-строки, арифметические операции над такими матрицами выполняются поэлементно, что возможно лишь при одинаковой длине матриц, и отмечаются точкой перед символом операции.
5. Выполнение операций математического анализа с использованием пакета символьной математики
На примерах рассмотрим технику использования пакета символьной математики для дифференцирования, интегрирования функций одной переменной, для решения алгебраических уравнений и интегрирования дифференциальных уравнений.
Для обращения к пакету указывается принадлежность переменных к символьным записью вида x=sym(‘x’); y=sym(‘y’) или syms x y или выделением выражений апострофами.
Определение n-ной производной по x от выражения F(x) выполняется по команде формата diff(‘F(x)’,’x’,n) или diff(F(x),x,n), если ранее указано, что x – символьная переменная, указывается лишь n>1. Примеры:
>> diff('exp(x)*cos(x)','x',2)
ans =
-2*exp(x)*sin(x)
>> syms x a
>> diff(sin(a*x)/x,x)
ans =
cos(a*x)*a/x-sin(a*x)/x^2
Команда на вычисление неопределенного интеграла –int('F(x)’,'x'), команда на вычисление определенного интеграла содержит, кроме того, пределы интегрирования:
>> int('exp(x)*cos(x)','x')
ans =
1/2*exp(x)*cos(x)+1/2*exp(x)*sin(x)
>> int('exp(x)*cos(x)','x',0,2)
ans =
1/2*exp(2)*cos(2)+1/2*exp(2)*sin(2)-1/2
>> int('exp(x)*cos(x)','x',0,pi*3/2)
ans =
-1/2*exp(3/2*pi)-1/2
Вычисления можно довести до приближенного ответа:
>> -1/2*exp(3/2*pi)-1/2
ans =
-56.1589
Вычисление кратных интегралов выполняется по схеме «интеграл от интеграла от интеграла…». Алгебраические выражения, в том числе получаемые при интегрировании, можно упрощать, правда, во многих случаях слабее, чем это делают абитуриенты МАИ, командой формата simple(F(x)). Например, выполнение команды simple(1/2*exp(x)*cos(x)+1/2*exp(x)*sin(x)) состояло в переборе многих вариантов и привело к скромному результату ans =1/2*exp(x)*(cos(x)+sin(x))
Решение алгебраических уравнений вида F(x)=0 выполняется по команде формата solve(‘F(x)’)
>> solve('x^2-2')
ans =
[ 2^(1/2)]
[ -2^(1/2)]
Ответ простой, обозримый. Но вот другой случай:
>> solve('x^3-2*x^2+x-5')
ans =
[ 1/6*(532+12*1965^(1/2))^(1/3)+2/3/(532+12*1965^(1/2))^(1/3)+2/3]
[ -1/12*(532+12*1965^(1/2))^(1/3)-1/3/(532+12*1965^(1/2))^(1/3)+2/3+1/2*i*3^(1/2)*(1/6*(532+12*1965^(1/2))^(1/3)-2/3/(532+12*1965^(1/2))^(1/3))]
[ -1/12*(532+12*1965^(1/2))^(1/3)-1/3/(532+12*1965^(1/2))^(1/3)+2/3-1/2*i*3^(1/2)*(1/6*(532+12*1965^(1/2))^(1/3)-2/3/(532+12*1965^(1/2))^(1/3))]
Полученные точные значения корней вычисляются приближенно после перемещения их мышкой к курсору:
>> [ 1/6*(532+12*1965^(1/2))^(1/3)+2/3/(532+12*1965^(1/2))^(1/3)+2/3]
ans =
2.4334
>> [ -1/12*(532+12*1965^(1/2))^(1/3)-1/3/(532+12*1965^(1/2))^(1/3)+2/3+1/2*i*3^(1/2)*(1/6*(532+12*1965^(1/2))^(1/3)-2/3/(532+12*1965^(1/2))^(1/3))]
ans =
-0.2167 + 1.4170i
>> [ -1/12*(532+12*1965^(1/2))^(1/3)-1/3/(532+12*1965^(1/2))^(1/3)+2/3-1/2*i*3^(1/2)*(1/6*(532+12*1965^(1/2))^(1/3)-2/3/(532+12*1965^(1/2))^(1/3))]
ans =
-0.2167 - 1.4170i
Аналогично решаются системы алгебраических уравнений. Например, система уравнений P(x,y,z)=0, Q(x,y,z)=0, R(x,y,z)=0 решается по команде формата:
[x,y,z]=solve(‘P(x,y,z)’, ‘Q(x,y,z)’, ‘R(x,y,z)’,’x’,’y’,’z’). В качестве упражнения введите команду >> [x,y,z]=solve('x^2+y^3+z^4-10','x+2*y-3','z-5*x+4','x','y','z') а затем полученные точные решения системы уравнений пересчитайте в приближенные, но обозримые.
Интегрирование дифференциальных уравнений и их систем выполняется функцией dsolve. Проинтегрируем некоторые простейшие дифференциальные уравнения. Здесь аргумент –t, dx/dt=Dx, в случае отсутствия начальных условий решение получается в общем виде, с неопределенными множителями, при указании достаточного количества начальных условий решение получается численным и при желании исполнителя может быть отображено графически.
>> dsolve('Dx=-x')
ans =
C1*exp(-t)
>> dsolve('Dx=-x','x(0)=1')
ans =
exp(-t)
>> dsolve('Dx=-x^2','x(0)=1')
ans =
1/(t+1)
>> t=0:.05:10;
>> plot(t,exp(-t),t,1./(t+1)),grid