М-сценарий с именем test1




М-файл сохранен как test1.m

 

 

Пример 2. Предыдущий пример оформить в виде М-функции с именем fun1.

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

function [p0,p1,p2,p3,p4,p5] = fun1(L, t) % Расчет вероятностей количества требований % в простейшем потоке Пуассона p0 = (L*t)^0/factorial(0)*exp(-L*t); p1 = (L*t)^1/factorial(1)*exp(-L*t); p2 = (L*t)^2/factorial(2)*exp(-L*t); p3 = (L*t)^3/factorial(3)*exp(-L*t); p4 = (L*t)^4/factorial(4)*exp(-L*t); p5 = (L*t)^5/factorial(5)*exp(-L*t); end

 

Результат обращения к созданной М-функции из командного окна системы MATLAB:

>> [P0,P1,P2,P3,P4,P5] = fun1(1.23, 2.34)

 

 

P0 =

0.0562

P1 =

0.1619

P2 =

0.2329

P3 =

0.2235

P4 =

0.1608

P5 =

0.0926

 

Задание 1

1. Создайте функцию, аргументами которой будут год и месяц вашего рождения, а возвращаемым значением был бы календарь заданного года и месяца. Обращение к созданной функции выполните из М-сценария, в котором задайте год и месяц своего рождения.

2. Напишите М-функцию, которая бы возвращала сумму элементов данной строки и данного столбца магического квадрата, размерность которого должна быть входным аргументом М-функции.

 

Пример 3. Написать М-функцию, которая содержит две подфункции. Одна подфункция служит для расчета суммы кубического корня заданного вектора вещественных чисел, другая для поэлементного перемножения двух матриц заданного размера.

Программный код решения примера

function [S, C] = fun3(X, A, B) % Главная М-функция % Аргументы функции fun3: % X – числовой вектор % A, B – числовые прямоугольные матрицы одинакового размера % Возвращаемые значения: % S – сумма из корня кубического элементов вектора Х % C – результат поэлементного произведения двух матриц A и B % Обращение к подфункциям с фактическими параметрами S = sum(funs(X)); C = funt(A, B); end function f = funs(Y) %% М-подфункция извлечения корня кубического %% из элементов заданного вектора f = sign(Y).*abs(Y).^(1/3); % см. help sign, help abs end function F = funt(A, B) %% М-подфункция поэлементного произведения %% двух матриц F = A.*B; end

Пример выполнения программы при обращении к М-функции fun3 из командной строки:

>> [s,c] = fun3([1, 27,-19683], [1,2;3,4], [6,7;8,9])

s =

-23.0000

c =

6 14

24 36

Пример 4. Написать М-функцию, которая обеспечивает сложение векторов неизвестного заранее количества.

В общем случае для решения этого примера требуется использование операторов цикла. Здесь будет показано, какие средства используются для определения переменного количество аргументов М-функции.

Программный код решения примера для сложения трех векторов

function f = funvar3(varargin) % М-функция с переменным количеством входных аргументов % ключевое слово varargin %% Определение количество входных аргументов n = length(varargin); %% обращение к вектору с помощью класса ячейки {} f = varargin{1} + varargin{2} + varargin{3}; end

 

Пример выполнения программы при обращении к М-функции funvar3 из командной строки:

>> s = funvar4([1,2], [4,5], [6,7])

s =

11 14

 

При определении М-функции используется ключевое слово varargin, а при обращении к функции используются фактические параметры – векторы. Обращение к заданному по номеру вектору происходит через фигурные скобки, которые формируют массив ячеек – класс cell. Обычно код подобных М-функций содержит операторы цикла и условия, с которыми познакомимся в следующих лабораторных работах.

Пример 5. Написать М-функцию, которая возвращает переменное количество измеряемых значений массива, если на вход функции подается массив заранее неизвестного размера и размерности.

Для этого примера в общем случае требуется использование операторов цикла. Для демонстрации возможности переменного количества возвращаемых значений используем трехмерный массив размера 2´2´3.

 

Программный код решения примера

function varargout = outvar(M) % М-функция с переменным количеством % возвращаемых значений % ключевое слово varargout % Определение количества размерностей массива n = ndims(M); varargout(1) = {size(M, 1)}; varargout(2) = {size(M, 2)}; varargout(3) = {size(M, 3)}; end

Пример выполнения программы:

>> A = rand(3,4); B = randn(3,4);

>> C(:,:,1) = A; C(:,:,2) = B;

>> C

C(:,:,1) =

0.4218 0.9595 0.8491 0.7577

0.9157 0.6557 0.9340 0.7431

0.7922 0.0357 0.6787 0.3922

C(:,:,2) =

1.0668 -0.8323 0.7143 0.8580

0.0593 0.2944 1.6236 1.2540

-0.0956 -1.3362 -0.6918 -1.5937

>> [n1, n2, n3] = outvar(C)

n1 =

n2 =

n3 =

 

Задание 2

1. Напишите М-функцию с подфункцией вычисления логарифма числа по основаниям 3 и 5. Входным аргументом главной (основной) М-функции примите одномерный массив чисел.

 

 

Пример 6. Написать М-функцию для перестановки строк прямоугольной матрицы вещественных чисел.

 

Программный код решения примера

function M = swapR(M, n, m) % Аргументы функции (формальные параметры): % M - матрица вещественных чисел произвольного размера % n - номер строки % m - номер строки % В матрице М переставляются строки с номерами n и m % Возвращаемое значение (формальный параметр): % M - матрица, в которой переставлены строки с номерами n и m temp = M(n,:); M(n,:) = M(m,:); M(m,:) = temp; end %% end of function

 

Возможный результат выполнения программы в командном окне MATLAB:

>> % Матрица нормально распределенных случайных чисел

>> q = randn(7, 6)

q =

1.0347 -1.0689 -1.7115 -0.1649 -1.1135 -1.0891

0.7269 -0.8095 -0.1022 0.6277 -0.0068 0.0326

-0.3034 -2.9443 -0.2414 1.0933 1.5326 0.5525

0.2939 1.4384 0.3192 1.1093 -0.7697 1.1006

-0.7873 0.3252 0.3129 -0.8637 0.3714 1.5442

0.8884 -0.7549 -0.8649 0.0774 -0.2256 0.0859

-1.1471 1.3703 -0.0301 -1.2141 1.1174 -1.4916

>> % Переставим 2 и 5 строки

>> m = swapR(q, 2, 5)

m =

1.0347 -1.0689 -1.7115 -0.1649 -1.1135 -1.0891

-0.7873 0.3252 0.3129 -0.8637 0.3714 1.5442

-0.3034 -2.9443 -0.2414 1.0933 1.5326 0.5525

0.2939 1.4384 0.3192 1.1093 -0.7697 1.1006

0.7269 -0.8095 -0.1022 0.6277 -0.0068 0.0326

0.8884 -0.7549 -0.8649 0.0774 -0.2256 0.0859

-1.1471 1.3703 -0.0301 -1.2141 1.1174 -1.4916

 

Задание 3

1. Напишите М-функцию для перестановки столбцов прямоугольной матрицы вещественных чисел. Протестируйте ее.

2. Напишите М-функцию для перестановки строк прямоугольной матрицы, состоящей из строчных букв латинского алфавита. Протестируйте ее.

 

Пример 7. Написать М-функцию с именем tlimit для вычисления пределов от строковых выражений.

 

Программный код решения примера

function f = tlimit(s, x, p, side) % Функция вычисления пределов % Входные аргументы функции: % s - строковое выражение от одного или нескольких аргументов % х - имя предельной переменной, символьный (sym) % или строковый тип (char) % p - предельное значение переменной, вещественный тип, % например, 0, inf, 1 % side - значение одностороннего предела, например, % 'left', 'right' % Возвращаемое значение: % f = результат вычисления предела, символьный тип f = limit(sym(s), sym(x), p, side);% см. help limit % limit - библиотечная функция % sym - оператор преобразования строковой переменной % к символьному типу (классу) end

 

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

>> s = '(1 + 1/x)^x'; f = tlimit(s, 'x', inf, 'left')

f =

Exp(1)

>> format long; e = double(f)

e =

2.718281828459045

 

Задание 4

1. Видоизмените выражение s, чтобы второй замечательный предел вычислялся при стремлении переменной х к нулю.

2. С помощью функции tlimit вычислите первый замечательный предел.

 

Рассмотрим примеры по вычислению производных и интегралов с помощью библиотечных функций diff и int.

% Вычисление производных и интегралов % с помощью функций diff() и int() % М-сценарий, М_файл diff_int.m clear, clc disp('======================================') disp(' Вычисление производных') % Объявление символьных переменных syms x a % Определение функции y = f(a,x) disp(' Заданная функция:') y = a*sin(x) % a - параметр % Первая производная от y = f(a,x) disp(' Первая производная от заданной функции:') dy = diff(y,x) % дифференцирование по переменной "х" % Вторая производная от функции "y" по переменной "x" disp(' Вторая производная от заданной функции:') dy2 = diff(y,x,2) disp('======================================') disp(' Вычисление неопределенных интегралов') disp(' Первая заданная подынтегральная функция:') y = a*sin(x) disp(' Значение неопределенного интеграла:'); iY = int(y, x) fprintf(' Результат с постоянной интегрирования C:\n %s + C\n', char(iY)); disp(' Вторая заданная подынтегральная функция:') syms t % объявление символьной переменной y2 = cos(3*t)/((sin(3*t) - 4)^(1/5)) disp(' Вывод функции с помощью pretty'); pretty(y2) disp(' Значение неопределенного интеграла:') iY2 = int(y2) % Введение постоянной интегрирования С p = strcat(char(iY2), ' + C'); p2 = sym(p) disp(' Вывод результата интегрирования с помощью pretty:'); % pretty(iY2); pretty(p2); disp('======================================') disp(' Вычисление определенных интегралов') disp(' Заданная первая подынтегральная функция:') y3 = sin(x) % интегрант, подынтегральная функция disp(' Значение определенного интеграла в пределах от 0 до pi:') iY3 = int(y3, 0, pi) % 0, pi - пределы интегрирования disp(' Заданная вторая подынтегральная функция:') y4 = 1/(x^2 + 4*x + 13) % интегрант, подынтегральная функция disp(' Значение несобственного интеграла в пределах от 1 до +inf:') iY4 = int(y4, 1, inf) % 1, inf (бесконечность)-пределы интеграла disp('======================================')

 

Результат выполнения программы:

======================================

Вычисление производных

Заданная функция:

y =

a*sin(x)

Первая производная от заданной функции:

dy =

a*cos(x)

Вторая производная от заданной функции:

dy2 =

-a*sin(x)

======================================



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-10-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: