Оператор прерывания цикла break

Досрочное завершение циклов while или for осуществляется при помощи оператораbreak.

Пусть, например, требуется по заданному массиву x образовать новый массив y по правилу y(k) = x(k+1)/x(k) до первого нулевого элемента x(k), т. е. до тех пор, пока имеет смысл операция деления. Номер первого нулевого элемента в массиве x заранее неизвестен, более того, в массиве xможет и не быть нулей. Решение задачи состоит в последовательном вычислении элементов массива y и прекращении вычислений при обнаружении нулевого элемента в x. Следующая файл-функция демонстрирует работу оператора break:

function y=div(x)

for k=1:length(x)-1

if x(k)==0

break

end

y(k)=x(k+1)/x(k);

end

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

16.Если пользователь затрудняется выбрать подходящий шаг (шаг дискретизации аргумента), то при выводе графика функции можно воспользоваться командой fplot(…), и MATLAB подберет шаг дискретизации самостоятельно.

Первым входным аргументом fplot(…) является имя файл-функции, а вторым – вектор, элементы которого есть границы отрезков: fplot('имя файл-функции', [a,b]).

Для приведенного примера файл-функция myfunимеет вид:

function y=myfun(x);

y=cos(10*x).*(sin(x)+0.1*sin(100*pi*x));

y=myfun(x);

fplot(‘myfun’,[0,1])

17.Напомним, как образуется график параметрической функции.

Если имеются две функции x(t)и y(t),то параметрическая функция задается в виде y(x). Таким образом, для построения графика такой функции следует:

задать пределы и шаг изменения аргумента t;

вычислить значения функций x(t)и y(t);

использовать команду plot(…)в одном из ее вариантов.

t=[0:0.01:2*pi];

x=sin(t);

y=0.1*cos(t);

plot(x,y)

18. Для графической визуализации функции двух переменных следует:

а) сформировать матрицу [x;y] с координатами узлов сетки на прямоугольной области определения функции. Матрица с координатами узлов сетки генерируется с помощью команды meshgrid(x,y). Аргументами xи yявляются векторы, элементы которых задают координаты узлов прямоугольной сетки. Если область определения функции – квадрат, то в meshgrid(…) можно задать интервал и шаг изменения лишь одного из аргументов функции:

б) вычислить значения функции в узлах сетки;

в) использовать для вывода графика одну из графических команд MATLAB;

г) используя команды оформления графика, нанести дополнительную информацию.

Пример 14. Построить график функции z(x,y) = x+y3 (рис. 5.16),где переменные xи yизменяются на интервале [-8;8] с шагом 0,5. Для построения графика использовать непрерывные линии черного цвета.

>> [x,y]=meshgrid(-8:0.5:8);

>> z=x+y.^3;

>> plot3(x,y,z,’k’)

Обсудим построенный график.

а) Как видно из условия задачи, область определения функции zпредставляет собой квадрат. Поэтому в команде meshgrid(…)указаны пределы и шаг изменения только одного из аргументов функции.

б) Команда meshgrid(…)лишь подготавливает матрицу [x,y], но не выводит ее на экран монитора.

в) В команде plot3(…)присутствует дополнительный параметр, который заключен в апострофы и определяет цвет линий на графике.

г) Все точки каждой из линий, с помощью которых построен график, находятся на одинаковом расстоянии от плоскости zOy. На языке начертательной геометрии они носят название линий профильного уровня.

Следует отметить, что правила применения команды plot3(…) аналогичны правилам применения команды plot(…)в 2D графике.

19.Для сохранения графика в среде MATLABследует:

1. В падающем меню Fileграфического окна выбрать строку Save As….

2. В появившемся окне указать, в какой папке и под каким именем пользователь желает сохранить файл.

Для экспорта графика следует:

1. Установить, с какими расширениями работает приложение Windows, в котором пользователь желает сохранить графический файл.

2. В падающем меню Fileграфического окна выбрать строку Export.

3. В открывшемся окне выбрать папку, задать название графического файла и его тип (расширение). При этом тип файла должен быть таким, чтобы с ним могло работать выбранное приложение Windows.

При экспорте в Wordрекомендуется использовать расширения [*.tif]или [*.bmp].

20.В ряде случаев полезно наблюдать за тем, как строится график функции y с аргументом xпо мере вычисления ее значений. При этом мы можем следить за динамикой некоторого процесса (т. е. за его развитием), а не наблюдать статичную итоговую картинку, как было ранее. С этой целью используется команда comet(x,y),который позволяет получить анимированный график, где кружок, обозначающий точку, перемещается, оставляя за собой след в виде линии (траектории движения). График похож на летящую комету со светящимся хвостом. Скоростью движения кружка можно управлять, манипулируя шагом изменения аргумента. Длину хвоста можно задать в виде дополнительного параметра S. В этом случае команда comet(…)имеет вид comet(x,y,S),гдеSопределяет длину хвоста. По умолчанию значение S принимается равным 0,1.

Отметим, что использовать анимацию можно не только в 2D графике но и при построении графических зависимостей функции двух переменных. Для этого следует использовать команду comet3(x,y,z), где x, yявляются аргументами функции z. Команду comet3(…)можно применять и с четвертым числовым параметром, который, как и в команде comet(…),определяет длину хвоста кометы.

21.Для создания символьных переменных или объектов используется команда sym.

Например, команда

>>x=sym('x')

x =

x

возвращает символьную переменную с именем 'x' и записывает результат в х.

Команда x=sym('x','real') дополнительно определяет x как вещественную переменную. Аналогично x=sym('x','positive') определяет x как положительную (вещественную) переменную, а x=sym('x','unreal') – как чисто формальную переменную (т. е. не обладающую никакими дополнительными свойствами).

Для создания группы символьных объектов служит команда syms.

Команда

>> syms a b c

создает символьные переменные с именами a, b, c.

Команда

>> Pi=sym('pi');

создает символьное число Pi =π, не обладающее погрешностью представления числа π в формате с плавающей запятой.

Следовательно, пакет Symbolic позволяет получить точные значения тригонометрических функций (и их рациональных комбинаций) от аргумента π в виде выражений, включающих квадратные корни из рациональных чисел, если такие выражения существуют и могут быть найдены системой. Например, точное значение sin равно

>> S=sin(Pi/5)

S =

1/4*2^(1/2)*(5-5^(1/2))^(1/2)

Команда syms без аргументов выводит список символьных объектов, имеющихся в рабочем пространстве.

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

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

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

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

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

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

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

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

>> syms a b x

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

ans =

a-b

Дополнительные возможности упрощения обеспечивает команда 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)

Одной из самых эффективных и часто используемых операций символьной математики является операция подстановки. Она реализуется с помощью команды 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

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

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

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

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

Sn(x) = .

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

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

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

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) – массив значений определенных интегралов.

В задачах аппроксимации и приближения функций 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

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

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.

Для решения обыкновенных дифференциальных уравнений (систем уравнений) MATLAB имеет команду

r = dsolve('eq1','eq2',...,'cond1','cond2',...,'v').

Она возвращает аналитическое решение дифференциальных уравнений eq1, eq2,..., использующих v как независимую переменную, с граничными и (или) начальными условиями cond1, cond2,... . По умолчанию независимой переменной считается переменная t, обычно обозначающая время. Если в выражениях eqI (condI) не используется знак равенства, то полагается, что eqI (condI) = 0.

Символ D обозначает производную по независимой переменной, то есть d/dt, при этом D2 означает d2/dt2 и т. д. Имя независимой переменной не должно начинаться с буквы D.

Начальные условия задаются в виде равенств 'y(a) = b' или 'Dy(a) = b' , где у – зависимая переменная, a и b – константы, которые могут быть и символьными. Могут быть символьными и константы в уравнениях. Если число начальных условий меньше порядка уравнения, то в решении будут присутствовать произвольные постоянные C1,C2 и т. д. Формы вывода результата такие же, как и для команды solve. Справку по dsolve можно получить, введя команду doc dsolve.

Пример:

Решить дифференциальные уравнения

1) x'' = -2x', 2) y'' = -ax+y', y(0) = b, 3) y(4) - y = 5exsinx+x4, 4) y''+4y'+3y = cost, y(0) = 1, y'(0) = 0.

Решения 3 - го и 4 - го уравнений проверить подстановкой.

Решение:

>> dsolve('D2x=-2*x')

ans =

C1*cos(2^(1/2)*t)+C2*sin(2^(1/2)*t)

>> dsolve('D2y=-a*x+y','y(0)=b','x')

ans =

a*x+C1*sinh(x)+b*cosh(x)

25.Чтобы избавить пользователя от хлопот, связанных с построением графиков функций с помощью стандартных средств (например, команды plot), в пакет Symbolic введены довольно удобные графические команды класса ezplot:

ezplot(f) – строит график символьно заданной функции f(x) независимой переменной x в интервале [- 2*pi;2*pi];

ezplot(f,xmin,xmax) – делает то же, но позволяет задать диапазон изменения независимой переменной x в интервале от xmin до xmax;

ezplot(f, [xmin, xmax, ymin, ymax]) – строит график функции f(x,у) = 0 для xmin < х < xmax, ymin < y < ymax.

График функции f(t) в полярной системе координат строит команда ezpolar:

ezpolar(f) – строит график функции f(t) при изменении угла t от 0 до 2π;

ezpolar(f,[a b]) – строит график функции f(t) при изменении угла t от a до b.

Так, команда ezcontour служит для построения контурных графиков функций вида f(x,y). Похожая команда ezcontourf строит контурные графики с функциональной окраской областей между линиями равного уровня. Для построения трехмерных графиков параметрически заданных функций служит команда ezplot3. Команды ezsurf, ezsurfc, ezmesh, ezmeshc применяются для построения графиков поверхностей, заданных функциями двух переменных f(x,y). Справку с примерами по применению любой из этих команд можно получить с помощью команды doc <имя команды>.

26.Преобразование Лапласа любой комплексной функции f(t) действительной переменной t имеет вид

L(s) = f(t)e-stdt.

Функцию f(t) принято назывть оригиналом, а функцию L(s) – изображением. Функция f(t) должна удовлетворять следующим условиям:

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

б) f(t) = 0 при t < 0;

в) существуют числа M > 0 и p ≥ 0 такие, что для всех t │f(t)│ < Mept (p называется показателем роста │f(t)│).

Некоторые простейшие) преобразования Лапласа приведены в таблице 7.1.

Таблица 7.1.Некоторые преобразования Лапласа

f(t) L(s) = f(t)e-stdt.
1 s-1
e-at (s+a)-1
sinat a(s2+a2)-1
tn n!s-n-1
e-atcoswt
tne-at

В MATLAB преобразование Лапласа функции f(t) осуществляется с помощью команды laplace(F,t,s).

Найдем с помощью этой команды изображения заданных в таблице 7.1 оригиналов f(t):

>> syms a t w s

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

>> laplace(1,t,s)

ans =

1/s

>> laplace(exp(-a*t),t,s)

ans =

1/(s+a)

>> laplace(sin(a*t),t,s)

ans =

a/(s^2+a^2)

>> laplace(t^n,t,s)

ans =

s^(-n-1)*gamma(n+1)

>> laplace(exp(-a*t)*cos(w*t),t,s)

ans =

(s+a)/((s+a)^2+w^2)

>> laplace(t^n*exp(-a*t),t,s)

ans =

gamma(n+1)*(s+a)^(-n-1)

Существуют различные модификации laplace (справку можно получить с помощью команды doc laplace).

Обратное преобразование Лапласа имеет вид

f(t) = L(s)estds.

В среде MATLAB обратное преобразование Лапласа функции L(s) можно получить с помощью команды ilaplace(L,s,t). Найдем с ее помощью оригиналы заданных в таблице 7.1 изображений L(s):

>> syms a t w s

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

>> ilaplace(1/s,s,t)

ans =

>> ilaplace(1/(s+a),s,t)

ans =

exp(-a*t)

>> ilaplace(a/(s^2+a^2),s,t)

ans =

a/(a^2)^(1/2)*sin((a^2)^(1/2)*t)

>> ilaplace(s^(-n-1)*gamma(n+1),s,t)

ans =

t^n

>> ilaplace((s+a)/((s+a)^2+w^2),s,t)

ans =

exp(-a*t)*cos(w*t)

>> ilaplace(gamma(n+1)*(s+a)^(-n-1),s,t)

ans =

exp(-a*t)*t^n

27.Применение возможностей системы Maple совместно с возможностями системы MATLAB придает последней особую гибкость и резко расширяет возможности решения сложных математических задач, где целесообразно объединять аналитические (символьные) методы с численными расчетами.

Доступ к большинству функций и команд системы Maple, ядро которой включено в МАТLAB, осуществляется командой maple.

Функции пакета Symbolicреализуют интерфейс между средой MATLAB и ядром Maple системы аналитических вычислений или системы компьютерной алгебры канадского университета Waterloo, причем работа в MATLAB не требует установки Maple. Система Mapleв своем ядре и в расширениях имеет около 3000 функций. Система MATLAB с пакетом Symbolic, включающим в себя около сотни символьных команд и функций, намного уступает Maple по их количеству. Однако пользователь, имеющий опыт работы в Maple, может напрямую обращаться ко всем командам и процедурам этой системы (кроме графических), написанным на встроенном языке Maple.

Для решения неравенств и систем неравенств в Maple служит команда solve.

Пример:

Решить неравенство

> 2.

Решение:

>> maple('solve((x-2)/(x+3)>2,{x})')

ans =

{-8 < x, x < -3}

Значит, - 8 < x < - 3 – решение неравенства.

Пример:

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

Решение:

>> maple('solve({(x-2)/(x+3)<=51,sqrt(x)*(sqrt(x)-1)<10,10*x^2+4*x>=69},x)')

ans =

{RootOf(-69+10*_Z^2+4*_Z,2.4343879744638981326796776750121) <= x, x < RootOf(-21*_Z+_Z^2+100,13.701562118716424343244108837311)}

>> vpa(ans,4)

ans =

{2.434 <= x, x < 13.70}

Таким образом, 2,434 ≤ x < 13,70 – приближенное решение системы неравенств (с точностью до 4 - х значащих цифр).

Наши рекомендации