Материал: Matlab. Практический подход. Самоучитель

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Самоучитель Matlab

>> eval('y=sin(pi./x)') y =

0.0000

1.0000

0.8660

0.7071

0.5878

При выполнении команды eval('x=[1,2,3,4,5]') результат такой же, как если бы выполнялась команда x=[1,2,3,4,5]. А при выполнении команды eval('y=sin(pi./x)'), как если бы выполнялась команда y=sin(pi./x). В качестве иллюстрации полезности функции eval() рассмотрим следующий пример (жирным шрифтом выделен ввод пользователя):

>>A=[1,2,3;4,5,6;7,8,9];

>>for i=1:3

for j=1:3 str=['a',int2str(i),int2str(j),'=A(i,j);']; eval(str);

end

end

>> [a11,a12,a13;a21,a22,a23;a31,a32,a33] ans =

1 2 3

4 5 6

7 8 9

Командой A=[1,2,3;4,5,6;7,8,9] создается матрица A размерами 3×3, заполненная натуральными числами от 1 до 9 включительно. Затем выполняется двойной оператор цикла, в котором индексные переменные i и j пробегают значения от 1 до 3 каждая. Внутри тела циклов выполняется по две команды. Командой str=['a',int2str(i),int2str(j), '=A(i,j);'] формируется текстовая строка str, которая получается объединением нескольких фрагментов. Первый фрагмент – буква 'a'. Два других фрагмента получаются преобразованием индексных переменных к текстовому формату. Для преобразования числа в текст используем встроенную функцию int2str(). Еще один фрагмент – текст '=A(i,j);'. Обращаем внимание, что в конце текстового фрагмента находится точка с запятой. Это сделано для того, чтобы при выполнении соответствующей команды результат не отображался. Таким образом, переменная str содержит текст, который получается объединением буквы a, текущих значений индексов, оператора присваивания, элемента матрицы A с соответствующими индексами и точки с запятой. Для выполнения команды, представленной этой текстовой строкой, используем инструкцию eval(str). В результате элементы матрицы A записываются в переменные a11, a12 и так далее до a33. То есть фактически здесь с помощью функции eval() мы автоматизировали процедуру присваивания значений этим переменным вместо того, чтобы выполнять каждую команду

146

Глава 3. Элементы программирования

присваивания в явном виде. На рис. 3.43 показан документ с описанным выше кодом.

Рис. 3.43. Еще один пример использования функции eval()

Функция feval() используется для непрямого вызова других функций. Первым аргументом функции feval() передается указатель вызываемой функции или ее текстовое имя, а прочие аргументы функции feval() – это те аргументы, которые передаются неявно вызываемой функции. Примеры использования этой функции приведены в документе на рис. 3.44.

Рис. 3.44. Примеры использования функции feval()

147

Самоучитель Matlab

Здесь мы последовательно использовали команды feval('sin',pi/6) и feval(@sin,pi/6), которыми вычисляется один и тот же результат. В последнем случае для получения указателя на функцию вычисления синуса задействован оператор @ перед именем функции (вся инструкция для указателя на функцию вычисления синуса имеет вид @sin).

На заметку

Здесь мы воспользовались общим правилом получения указателя на функцию. Для этого перед именем функции указывают оператор @. Результатом такой инструкции является указатель на соответствующую функцию.

148

Глава 4 Элементы матричной алгебры

Мы столкнулись с трудной задачей... Надо придумать что-то необычное.

К/ф "Клуб самоубийц, или Приключения титулованной особы"

В этой главе мы рассмотрим основные приемы, методы, функции, которые полезны при решении задач линейной алгебры. Интриги прибавляет то обстоятельство, что данные в Matlab, так сказать, по умолчанию, реализуются в виде матриц, что дает небезосновательные надежды на эффективное применение Matlab в данном случае.

Векторы и операции с ними

Никто нам не мешает перевыполнить наши законы.

В. Черномырдин

С точки зрения технической реализации вектор в Matlab – это матрица, состоящая из одной строки (вектор-строка) или одного столбца (векторстолбец). Здесь мы рассмотрим методы выполнения некоторых базовых операций с векторами – например, вычисление скалярного и векторного произведений (разумеется, с использованием средств Matlab). Для соответствующих операций в Matlab предусмотрены специальные функции, хотя при желании можно обойтись и без них.

На заметку

Следует понимать, что обсуждаемые далее функции описаны в контексте тех задач, для решения которых они применяются. В общем случае функции, как правило, имеют более широкое применение.

С практической точки зрения наибольший интерес представляют векторы в двумерном (на плоскости) и трехмерном (в объеме) пространстве. Именно последним случаем и ограничимся. Другими словами, здесь и далее будем

рассматривать трехмерные векторы. Начнем с операции вычисления моду-

 

 

 

 

ля вектора. По определению модулем вектора a с компонентами (a1,a2,a3)

 

2

2

2

называется число | a |=

a1

+a2

+a3 . Особой проблемы в том, чтобы вы-

числить такое значение, нет. Но в Matlab для этих целей имеется специальная функция norm(). Аргументом функции указывается вектор, для которого вычисляется модуль. Результатом функции, как несложно догадаться, является модуль вектора. Пример вычисления модулей для векторов-строк и векторов-столбцов приведен в документе на рис. 4.1.

149

Самоучитель Matlab

Рис. 4.1. Вычисление модуля вектора

В командном окне вводится и выполняется следующий код (жирным шрифтом выделен ввод пользователя):

>> a=[1 3 5] a =

1 3 5

>>norm(a) ans =

5.9161

>>b=[1;3;5]

b =

1

3

5

>>norm(b) ans =

5.9161

Видим, что результат одинаково хорош как для вектора-строки, так и для вектора-столбца.

150

Источник: https://studfile.net/preview/16433384/