Создание матрицы. Все, что вам нужно будет сделать, это

ИСПОЛЬЗОВАНИЕ МАТРИЦ В MATLAB.

Базовой структурой данных в MATLAB является матрица (matrix ): двухмернaя, имеющая прямоугольную форму структура данных, в которой хранится набор элементов данных в простом и легко доступном формате. Эти элементы данных могут быть числами, символами, логическими единицами true или false, или даже другими типами структур данных MATLAB. В MATLAB используются двухмерные матрицы для хранения отдельных чисел, а также, линейных последовательностей данных. В этих случаях размерности 1×1 и 1×n, соответственно, где n – длина числовой последовательности. MATLAB также поддерживает структуры данных, которые имеют больше чем два измерения. В MATLAB эти структуры данных имеют название arrays (массивы). MATLAB является вычислительной средой, основой которой является матрица. Все вводимы в MATLAB данные хранятся в форме матрицы или многомерного массива.

Матрица – это двух мерный массив вещественных или комплексных чисел. В MATLAB имеется ряд функций, которые позволяют создавать различные типы матриц. Простейший способ создания матрицы в MATLAB – использовать оператор констора матрицы, . Этот оператор создает строку в матрице при вводе элементов (показаны ниже как E) в скобках. Каждый элемент необходимо отделять запятой или пробелом:

row = row =

Например, для того, чтобы создать матрицу из пяти элементов, напечатайте

A = ;

Для того, чтобы начать новую строку, надо закончить текущую точкой с запятой:

В этом примере вводится матрица, состоящая из 3-х строк и 5-и столбцов (3×5) чисел. Все строки должны иметь одинаковое число элементов,

Этот оператор констора матрицы может создавать только двухмерные матрицы (включая 0×0, 1×1, 1×n,).

Специализированные матричные функции .

Функция Описание
ones Создает матрицу или массив, состоящий из всех единиц
zeros Создает матрицу или массив, состоящий из всех нулей
eye Создает матрицу с единицами на диагонали и остальными нулями
аccumarray Распределяет элементы входной матрицы в соответствии с заданным положением в выходной матрице
diag Преобразует вектор в диагональную матрицу
magic Создает квадратную матрицу, в которой сумма элементов строк, или элементов столбцов, или элементов главных диагоналей одинакова
rand Создает матрицу или массив случайных чисел имеющих равномерное распределнием
randn Создает матрицу или массив случайных чисел или случайных массивов имеющих нормальное распределнием
randperm Создает вектор (1-на-n матрицу) содержащий случайное размещение заданного числа целых


Например, для создания волшебной квадратной матрицы 5×5 воспользумся функцией magic,

Конкатенация (объединение ) матриц .

Матричная конкатенация – это объединение одной или большего числа матриц, для получения новой матрицы. Скобки используются не только как конструктор матрицы, но также как оператор конкатенации. Результатом выражения C = является конкатенация матриц A и B по горизонтали. Результатом выражения C = является конкатенация матриц A и B по вертикали. This example constructs a new matrix C by concatenating matrices A and B in a vertical direction:

A = ones(2, 5) * 6; % матрица 2×5 все элементы которой равны 6

B = rand(3, 5); % матрица 3×5 состоящая из случайных чисел

C = % конкатенация матриц A и B по вертикали

Функции матричной конкатенации

Генерирование числовых последовательностей , оператор двоеточие (:).

Оператор двоеточие (first:last) генерирует матрицу 1×n (или вектор) последовательных чисел от первого числа до последнего. По умолчанию получаем последовательность чисел, увеличивающихся на единицу, каждое последующее на 1 больше предыдущего.

10 11 12 13 14 15

Последовательность чисел не обязательно должна состоять из целых положительных. Она может содержать отрицательные числа, а также дроби:

2.5000 -1.5000 -0.5000 0.5000 1.5000 2.5000

Для генерирования числовых последовательностей с шагом, отличным от 1, оператор двоеточие может использоваться со указанием величины приращения элементов (first:step:last). Величина step указывает шаг приращения (уменьшения, если step является отрицательным числом) элементов последовательности чисел. Например,

10 15 20 25 30 35 40 45 50

Шаг может быть дробным или отрицательным числом,

3.0000 3.2000 3.4000 3.6000 3.8000

9 8 7 6 5 4 3 2 1

Индексация матриц .

Для доступа к отдельному элементу матрицы задайтеномерстроки и номерстолбца используя следующу запись A(n, m), где A – матричная переменная. Номерстолбца всегда указывается первым, а номерстолбца – втрым, например,

для доступа к элементу в 4-й строке, 2-й колонке напечатайте

Для массивов, которые имет размерность большую двух, необходимо задавать дополнительные индексы, которые следуют за индексами строк и столбцов.

Линейная индексация матриц .Вы можете обращаться к элементу матрицы используя единственный индекс, A(k). MATLAB хранит матрицы и массивы не в той форме, в которой они появляются в командном окне, а как единый столбец элементов. Этот единый столбец составлен из столбцов матрицы, каждый столбц присоединяется к предыдущему. Так, матрица A

в действительности хранится в памяти как последовательность

2, 4, 3, 6, 2, 5, 9, 8, 1

Элемент с строке 3, столбец 2 матрицы A (значение = 5) может быть идентифицирован как элемент 6 в действительной хранимой последовательности. Для доступа к этому элементу, есть возможность использовать стандартный синтаксис A(3,2), или есть возможность применить A(6), относящуюся к линейной индексации.

Обращение к последовательности элементов . Для матрицы A размерности 4×4, сумму элементов 4-го столбца можно вычислить набрав

A(1,4) + A(2,4) + A(3,4) + A(4,4)

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

обращается к элементам в строках с 1-й по m-ю, n-го столбца матрицы A. Используя эту запись, можно вычислить сумму элементов 4-го столбца матрицы A более компактно:

Обращение к элементам , которые не следуют друг за другом . Для этого используйте оператор двоеточия с величиной шага. Выражение m: 3: n означает обращение к каждому третьему элементу матрицы. При линейной индексации имеем:

MATLAB поддерживает тип индексации массивом, при которой один массив используется как индекс в другом массиве. Этот тип индексации может быть основан на задании в массиве индексов либо номеров, либо размещения элементов. В приведенном ниже примере массив B состоит из индексов 1, 3, 6, 7, и 10 массива A. В этом случае, числовые значения элементов массива B соответствуют положению элементов в массиве A:

5 10 15 20 25 30 35 40 45 50

B = ;

Ключевое слово end (конец ). MATLAB предоставляет ключевое слово end для доступа к последнему элементу массива. В предыдущем примере можно использовать запись

B(1:3:end) = -10

Описание всех элементов строки или столбца . Двоеточие само по себе относится ко всем элементам строки или столбца матрицы. Используя следующую запись может быть вычислена сумма элементов во 2-м столбце волшебной квадратной 4×4 матрицы A:

Используя двоеточие в линейной индексации можно обратиться ко всем элементам всей матрицы.

Получение информации о матрице .

Функции, возвращающие информации о форме матрицы.

Изменение размерности и формы матриц .

Способы увеличения размерности матрицы.

Конкатенация новых элементов

Размещение элементов за границами матрицы

Конкатенация наиболее подходит, если необходимо добавить к матрице новые элемнты или блоки, совместимые по размерности с исходной матрицей.

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

Пример. Дана матрица 3×5,

A = [ 10 20 30 40 50; ...

60 70 80 90 100; ...

110 120 130 140 150];

ее необходимо дополнить 4-й строкой. Разместим новый элемент в 1-м столбце не существующей 4-й строки исходной матрицы. MATLAB расширит матрицу A добавлением новой 4-й строки, заполнив нулями колонки со 2-й по 5-ю.

110 120 130 140 150

Размерность матрицы может быть уменьшена за счет удаления строк и столбцов из матрицы присваиванием удаляемым строкам и столбцам значения пустого массива.

Пример. Дана матрица 4×4,

из нее необходимо удалить 2-й столбец,

результат:

Для удаления единственного элемента или последовательности элементов может быть использована линейная индексация. При этом результатом будет преобразование оставшихся элементов в вектор-строку,

A(2: 2: 10) =

в результате получим:

16 9 3 6 13 12 1

Функции, изменяющие форму матрицы

Примеры применения функций, изменяющих форму матрицы.

Используя матрицу А, имеющую размерность 3×4 построить матрицу В размерности 2×6:

B = reshape(A, 2, 6)

Для транспонирования матрицы можно использовать как функцию transpose, так и оператор (.")s:

Скаляры .Скалярная величина – это любое отдельное вещественное или комплексное число, которое представлено вMATLAB как матрица размерности 1×1:

Функция isscalar определяет, содержит ли переменная скалярную величину:

Векторы . Вектор – это матрица, одина из размерностей которой равна единице, а другие больше единицы. Пример числового вектора-строки:

Пример числового вектора-столбца:

В =

isvector(А), isvector(В)

Матричные операции .

Сложение и вычитание матриц

Для сложения и вычитания матриц необходимо, чтобы обе матрицы имели одинаковый размер или одна из них была скаляром. Сложение и вычитании матриц осуществляется поэлементно. Например,

Векторное произведение и транспонирование

Вектор-строка и вектор-столбец могут быть перемножены, если они имеют одинаковую длину. Имеется два вида произведения векторов – внутреннее и внешнее. Результатом внутреннего произведения является вектор, а внешнего – матрица. Например:

Для матриц с вещественными элементами, операция транспонирования (оператор апостроф (")) меняет местами a ij и a ji . MATLAB использует также оператор апостроф (") для транспонирования матриц с комплексными числами, при этом кроме транспонирования комплексные числа заменяются на комплексно-сопряженные. Для транспонирования матриц с комплексными числами без замены на комплексно-сопряженные, используется оператор точка-апостроф (."). Например,

Транспонирование превращает вектор-строку в вектор-столбец, и наоборот:

Умножение матриц .Произведение матриц определяется таким образом, чтобы отражать состав базовфых линейных преобразований и обеспечивать компактное представление систем совместимых линейных уравнений. Матричное произведение матриц C = AB определено, когда размерность столбцов матрицы A равна размерности строк матрицы B , или когда один из множителей скаляр. Если A имеет размерность m×p и B – размерность p×n, их произведение C имеет размерность m×n. Например,

Матрица может быть умножена справа на вектор-столбец (длина вектора-столбца должна быть равна длине строки матрицы) и слева на вектор-строку (длина вектора-строки должна быть равна длине столбца матрицы), например:

Любая матриц и любой вектор могут быть умножены на скаляр, например,

Единичная матрица (общепринятое обозначение I ) – это матрица любой размерности, все элементы главной диагонали которой равны единице, а остальные элементы равны нулю. Эти матрицы имеют свойство, AI = A и IA = A в случае соответствия размерностей A и I . В MATLAB функция eye(m,n) возвращает единичную прямоугольную матрицу m×n и eye(n) возвращает единичную квадратную матрицу n×n.

Нормы векторов и матриц . p -норма вектора x

вычисляется функцией norm(x,p). Эта функция определена для любого значения p > 1, наиболее часто используемые значения p 1, 2, и ∞. По умолчанию p = 2, что соответствует Евклидовой длине:

3.0000 2.2361 2.0000

p -норма матрицы A ,

может быть вычислена для p = 1, 2, and ∞ функцией norm(A,p). Опять, по умолчанию p = 2:

C = fix(10*rand(3,2));

Полагаться на случай или самому создавать сценарий своей жизни?

Лично я всегда выбираю второй вариант, но если вы со мной не согласны, можете закрыть это письмо.

Остались..?

Тогда открою вам одну страшную тайну!

Чем важнее для вас событие, тем негативнее рисуются его картины.

Сразу включается страх: “А вдруг все пойдет не так…” И дальше ваше воображение услужливо показывает вам, что может пойти “не так”. В конце концов вы так накручиваете себя, что уже не видите иного выхода. И если все так и происходит, вы говорите: “Ну вот, я так и знал/а!” А если не происходит, то: “Фух, пронесло!”

Но сколько нервов было потрачено?!

Знаете, по некоторым данным, свадьба, которая, казалось бы, должна быть самым счастливым событием для молодоженов, становится для них самым сильным стрессом. Это “А вдруг все пойдет не так?” проявляется во всей красе, и выдыхают “счастливые” влюбленные, когда все наконец заканчивается.

А ведь мы сами программируем свое будущее! реально!!

И нет смысла повторять то, что вы и так знаете – “мысли материальны”.

Не проще ли сразу выбрать приемлемый для вас вариант событий и больше не “париться”?

Перейду сразу к главному.

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

Вы просто определенным образом сосредотачиваетесь на какой-либо ситуации, и мозг начинает выдавать вам мысли о том, как она будет развиваться. Есть, конечно, некоторые тонкости, но них в самом документе…

При этом вы можете согласиться с предложенным вариантом или потребовать другой сценарий!

В этом вся фишка!

Только представьте, насколько это удобно!

Допустим, у вас возникает желание подняться вверх по карьерной лестнице и занять руководящую должность…

Если вы прямо сейчас подумаете, как можно этого достичь, мозг тут же выдаст вам некое решение. К примеру, – много и усердно трудиться, всегда показывать себя с лучшей стороны. Но насколько вас устраивает это решение?

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

Существует множество вариантов развития событий!

И о каждом из них ваше подсознание знает заранее! Но оно идет по пути наименьшего сопротивления, охраняя вас попутно от всего нового и неизведанного.

А как полезно было бы выбирать даже в бытовых ситуациях!

Вот вы собираетесь в гости к не совсем любимой свекрови или теще… У вас в голове уже есть примерный сценарий того, как вы отдохнете (или наоборот, выдохните, когда придете домой). Не пойти нельзя. Но можно действительно хорошо отдохнуть и получить удовольствие, если выбрать другой сценарий!

Вот как это работает на практике…

«Решила отдохнуть в отпуске, но не знала, куда поехать…»

«Использовала ваш секретный метод, и прямо в мозг начали сыпаться варианты из подсознания (фантастика просто!) – санаторий, море, отдых на даче. Сначала подумала про санаторий, но тут же воображение стало рисовать противных соседей. Я не согласилась. Потом решила узнать про море, мысль понравилась, но внутри услышала: «Нет билетов» (как потом выяснилось, были только верхние полки, а на них я ездить не могу, на самолете боюсь). Дача тоже не вызывала восторга – комары, соседи…Тогда я стала ждать другие решения. Мысль пришла очень четкая – позвонить друзьям… Позвонила. Оказывается, они едут на море на собственной машине и с радостью возьмут меня с собой. Покупаю купальник, и в путь!!!» Лиля

«Попробовал технику на отношении с девушками…»

«Сказать честно у меня с этим проблемы. Друзья позвали на выходные в клуб. Обычно сижу за столиком и не танцую. Да и внимания на меня девушки не обращают… Но я решил изменить сценарий. Сделал как вы учили и стал ждать. Пришло, что ко мне подсаживается девушка. Сидим вместе смотрим на танцующих. Не вдохновило. Потом подсознание выдало еще несколько вариантов. И наконец пришол сценарий когда девушки сами меня приглашают и от них отбоя нет. Одобрил по методу и забыл. Так вот когда пришли в клуб я как обычно сел за столик. Не успел пойти купить пивка как началось самое интересное… Сначала одна подошла потом другая на танец пригласила, потом третья… Такого отдыха в моей жизни еще никогда не было! Респект вам и уважуха!» Толян

* отзывы приведены без редактуры.

Теперь вы сами можете выбирать, как будут развиваться ваши события!

Техника крайне проста, никаких особых усилий от вас не потребуется.

Все, что вам нужно будет сделать, это:

1. С помощью особого приема очистить мозг от лишних мыслей и подготовить подсознание к работе.

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

3. Одобрить особым образом наиболее подходящий вариант развития событий.

Все подробности вы найдете в закрытом архивном документе “Как выстраивать правильную матрицу событий с помощью интуиции”.

Всего – 730 р.! Чтобы быстро получить метод, просто перейдите по ссылке и следуйте

ЛИЧНУЮ ПОДДЕРЖКУ ГАРАНТИРУЮ!

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

Мой личный адрес: om@сайт

P.S. Только вдумайтесь! Вам будет легко самостоятельно управлять своей жизнью! Вы просто выбираете нужный сценарий.

С уважением, Александр Клинг

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

Имеются три способа создать массив:

  • Заполняя массив пустых полей, как обсуждается в этом разделе. Эта методика подходит для не слишком больших массивов.
  • Используя дискретный аргумент, чтобы определить элементы с его помощью, как обсуждено в следующей главе. Эта методика подходит, когда имеется некоторая явная формула для вычисления элементов через их индексы.
  • Считывая их из файлов данных.

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

Создание вектора

Вектор - массив или матрица, содержащая один столбец. Чтобы создать вектор в Mathcad, выполните следующее:

  • Щёлкните в свободном месте или на поле.
  • Выберите Матрицы из меню Математика или нажмите M . Появляетс я диалоговое окно, как на рисунке справа.
  • Укажите число строк, равное числу элементов вектора, в поле “Строк”. Например, чтобы создать вектор с тремя элементами, напечатайте 3.
  • Напечатайте 1 в поле “Столбцов”, затем нажмите “Создать”. Mathcad создает вектор с пустыми полями для заполнения.

На следующем этапе нужно заполнить эти поля скалярными выражениями. Для этого выполните следующее:

  • Щёлкните на верхнем поле и напечатайте 2.
  • Переместите выделяющую рамку в следующее поле. Можно сделать это или клавишей , или щёлкнув непосредственно на втором поле.
  • Напечатайте 3 во втором поле. Затем переместите выделяющую рамку в третье поле, и напечатайте 4.

Если понадобится создавать еще векторы, можно оставить диалоговое окно “Матрицы” открытым для дальнейшего использования.

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

  • Нажмите [­ ] несколько раз или щёлкните на любой из скобок вектора. Выделяющая рамка теперь заключает весь вектор. Это означает, что знак плюс, который будет напечатан, относится к вектору целиком, а не к какому-либо из элементов.
  • Нажмите клавишу плюс (+ ). Mathcad показывает поле для второго вектора.
  • Используйте диалоговое окно “Матрицы”, чтобы создать другой вектор с тремя элементами.
  • Заполните этот вектор, щелкая в каждом поле и печатая числа, показанные справа. Можно также использовать , чтобы двигаться от одного элемента к другому.
  • Нажмите знак = , чтобы увидеть результат.

Сложение - только одна из операций Mathcad, определенных для векторов и матриц. В Mathcad также есть вычитание матриц, умножение матриц, скалярное произведение, целочисленные степени, детерминанты и много других операторов и функций для векторов и матриц. Полные списки появляются в разделах “Векторные и матричные операторы” и “Векторные и матричные функции” ниже в этой главе.

Создание матрицы

Чтобы создать матрицу, сначала щёлкните в свободном месте или на поле. Затем:

  • Выберите Матрицы из меню Математика , или нажмите M. Появится диалоговое окно.

  • Введите число строк и столбцов в нужные поля. В этом примере матрица имеет две строки и три столбца. Затем нажмите на “Создать”. Mathcad создаст матрицу с пустыми полями.
  • В завершение заполните поля, как описано в предыдущем разделе для векторов.

Можно использовать эту матрицу в формулах в точности так же, как и число или вектор.

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

Изменение размера матрицы

Можно изменять размер матрицы, вставляя и удаляя строки и столбцы. Для этого необходимо выполнить следующее:

  • Щёлкните на одном из элементов матрицы, чтобы заключить его в выделяющую рамку. Mathcad будет начинать вставку или удаление с этого элемента.

  • Выберите Матрицы из меню Математика . Появляется диалоговое окно.

  • Напечатайте число строк и-или столбцов, которые нужно вставить или удалить. Затем нажмите на “Вставить” или на “Удалить”. Например, чтобы удалить столбец, который содержит выбранный элемент, напечайте 1 в поле “Столбцов”, 0 в поле “Строк”, и нажмите на “Удалить”.

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

  • Если вставляются строки, Mathcad создает строки пустых полей ниже выбранного элемента. Если вставляются столбцы, Mathcad создает столбцы пустых полей справа от выбранного элемента.
  • Чтобы вставить строку выше верхней строки или столбец слева от первого столбца, сначала заключите матрицу целиком в выделяющую рамку, щёлкнув внутри и нажав [­ ] несколько раз. Затем выберите Матрицы и продолжите, как обычно.
  • Когда строки или столбцы удаляются, Mathcad начинает со строки или столбца, занятых выбранным элементом. Mathcad удаляет строки вниз от этого элемента и столбцы - направо от этого элемента.
  • Если напечатать 0 в поле “Строк”, Mathcad ни вставит, ни удалит строки. Если напечатать 0 в поле “Столбцов”, Mathcad ни вставит, ни удалит столбцы.

Обратите внимание, что при удалении строк или столбцов Mathcad выбрасывает содержащуюся в них информацию.

Чтобы удалить всю матрицу или вектор, заключите их в выделяющую рамку и выберите Вырезать из меню Правка .

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

Определение элементов матрицы через функцию

  • matrix(M,N,f) - создание матрицы размера MXN, каждый i,j элемент которой есть f (i, j) (листинг 9.19);
    • м - количество строк;
    • N - количество столбцов;
    • f (i, j) - фуНКЦИЯ.

Листинг 9.19. Создание матрицы

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

  • СгеаtеSрасе(F(или f1, f2, f3) , t0, t1, tgrid, fmap) - создание вложенного массива, представляющего х-, у- и z-координаты параметрической пространственной кривой, заданной функцией р;
    • F(t) - векторная функция из трех элементов, заданная параметрически относительно единственного аргумента t;
    • f1(t) ,f2(t), f3(t) - скалярные функции;
    • t0 - нижний предел t (по умолчанию -5);
    • t1 - верхний предел t (по умолчанию 5);
    • tgrid - число точек сетки по переменной t (по умолчанию 2о);
    • fmap - векторная функция от трех аргументов, задающая преобразование координат.

О вложенных массивах читайте в разд. "Создание тензора" гл. 4.

Рис. 9.4. Использование функции CreateSpace с разным набором параметров

Пример использования функции CreateSpace показан на рис. 9.4. Заметьте, для построения графика спирали не потребовалось никакого дополнительного кода, кроме определения параметрической зависимости в вектор-функции F!

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

Рис. 9.5. Использование функции CreateMesh с разным набором параметров

  • CreateMesh(F(или g, или f1, f2, f3) , s0, s1, t0, t1, sgrid, tgrid, fmap) - создание вложенного массива, представляющего х-, у- и z-координаты параметрической поверхности, заданной функцией F;
    • F(s,t) - векторная функция из трех элементов, заданная параметрически относительно двух аргументов s и t;
    • g (s, t) - скалярная функция;
    • f1(s,t),f2(s,t),f3(s,t) - скалярные функции;
    • s0, t0 - нижние пределы аргументов s, t (по умолчанию -5);
    • s1, t1 - верхние пределы аргументов s, t (по умолчанию 5);
    • sgrid, tgrid - число точек сетки по переменным s и t (по умолчанию 20);
    • fmap - векторная функция из трех элементов от трех аргументов, задающая преобразование координат.

Примеры вложенных массивов, которые создаются функциями createMesh и createspace, приведены в листинге 9.20. Каждая матрица из числа трех вложенных матриц, образующих массив, определяет х-, у- и z-координаты точек поверхности или кривой, соответственно.

Листинг 9.20. Результат действия функций CreateMeeh и CreateSpace (рис. 9.4 - 9.5)

Создание матриц специального вида

В Mathcad легко создать матрицы определенного вида с помощью одной из встроенных функций. Примеры использования этих функций приведены в листинге 9.21.

  • identity (N) - единичная матрица размера NXN;
  • diag(v) - диагональная матрица, на диагонали которой находятся элементы вектора v;
  • geninv(A) - создание матрицы, обратной (слева) матрице А;
  • rref (A) - преобразование матрицы или вектора А в ступенчатый вид;
    • N - целое число;
    • v - вектор;
    • А -матрица из действительных чисел.

Размер NXM матрицы А для функции geninv должен быть таким, чтобы N>M.

Листинг 9.21. Создание матриц специального вида

Фильм "Матрица", братьев Вачевски, безусловно является культовым среди киберпанка, но насколько реальна перспектива создания подобной "Матрицы" на самом деле? Чтобы ответить на этот вопрос, ученые провели анализ готовности суперкомпьютеров на предмет создания виртуальной реальности. И по словам Майкла Макгьюигана из Брукхэвенской национальной лаборатории, такого рода задачи по созданию искусственных миров, наравне с реальностью, не такая уже и фантастика, а недалекое будущее!

В 1950 году, Алан Тьюринг, стоявший у истоков современной компьютерной науки, предложил элементарный тест для искусственного интеллекта, который заключался в том, чтобы во время разговора двух собеседников, один из которых - машина, третий человек попытался точно определить кто из них кто.

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

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

Как сообщает New Scientist, чтобы определить насколько близка современная компьютерная техника к созданию виртуальной реальности, Макгьуиган решил воспользоваться самым мощным суперкомпьютером в мире - Blue Gene/L, расположенном в Брукхэвенской лаборатории в Нью-Йорке. Суперкомпьютер состоит из 18 стоек в каждой из которых находится 2 тыс. стандартных процессора для ПК, при этом он работают в режиме параллельных вычислений, что и дает Blue Gene его огромную производительность в 103 терафлопс, или 103 трлн. операций с плавающей точкой в секунду. Для сравнения, обычный калькулятор выполняет 10 операций с плавающей точкой в секунду.

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

Полученные результаты показали, что обычная программа прослеживающая прохождение лучей на Blue Gene работает в 822 раза быстрее чем, на стандартном компьютере, даже несмотря на то, что программа не оптимизирована для работы с параллельными процессорами. Такая скорость позволяет на приемлемом уровне отображать естественное освещение в реальном времени.

"Хорошая новость заключается в том, что человеческий глаз воспринимает прорисовку этих лучей, как естественную, - говорит Макгьюиган. - Я использовал программу, которую было относительно просто портировать для работы с таким большим количеством процессоров. Другие программы могут работать значительно быстрее и еще более реалистично". И все таки, даже Blue Gene со всей его скоростью и реалистичностью не в состоянии достаточно быстро прорисовать изображения в высоком разрешении, чтобы пройти графический тест Тьюринга.

Однако, исследователь уверен в том, что суперкомпьютеры, способные пройти тест, появятся в течение ближайших лет. По его предположением прохождение теста станет возможным, когда производительность компьютеров достигнет отметки один петафлопс, или одна тысяча терафлопсов.

Другие исследователи считают, что прохождение графического теста Тьюринга потребует много большего, нежели просто фото-реалистичная графика, двигающаяся в реальном времени. Реальность гораздо сложнее, говорит Пол Ричмонд и университета Шеффилда, Великобритания. По его словам, искусственный объект может выглядеть как настоящий, но если он не будет двигаться в реалистичной манере, то с настоящим его не спутать. "Главной проблемой является создание реалистичной имиттации, которая включает в себя реалистичную имитацию поведения", - говорит он.

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

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