ВИТАМИНЫ. В DLL, вызываемой из MatLab'a, обязательно должна присутствовать экспортируемая функция mexFunction
В DLL, вызываемой из MatLab'a, обязательно должна присутствовать экспортируемая функция mexFunction. Вот её прототип:
void __cdecl mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]);
Эта mexFunction аналогична функции main() в обычных С-программах, т.е. с нее начинается выполнение Вашего кода. Рассмотрим параметры этой функции. Общий вызов MatLab-функции выглядит так:
[outParam1, outParam2, outParam3] = mlFunc(inParam1, inParam2),
где inParam1, inParam2 - входные параметры, а outParam1, outParam2, outParam3 - выходные параметры. При этом число и тех, и других параметров для одной и той же функции может быть разным. Так как Ваша DLL-функция должна работать так же, как и любая MatLab'овская, то при её выполнении Вы должны знать, сколько пользователь задал входных, а сколько выходных параметров. Для служат параметры
- int nlhs (количество ВЫХодных параметров)
- int nrhs (количество ВХодных параметров)
Сами параметры передаются в массивах
- plhs (ВЫХодные параметры)
- prhs (ВХодные параметры)
Эти параметры имеет тип mxArray*. mxArray - это тип данных, с помощью которого из MatLab'a передаются параметры всех типов - целые числа, дробные числа, комплексные числа и т.п. Существует ряд функций для работы с этип типом, например bool mxIsChar(const mxArray *array_ptr) указывает, является ли данный mxArray строкой, или нет, mxArrayToString возвращает строку, содержащуюся в mxArray'е, double *mxGetPr(const mxArray *array_ptr) возвращает указатель на первый элемент массива, содержащийся в параметре, и т.п. Все эти функции подробно описаны в Help'е Матлаба. Функция void mexErrMsgTxt(const char *error_msg) возвращающает сообщение об ошибке в командное окно MatLab'а. Эта функция прерывает работу DLL.
Массив выходных параметров пуст в начале работы. Вы должны заполнть каждый выходной парметр, создав переменную типа mxArray c помощью функций MatLab'а. Например, чтобы вернуть в первом выходном параметре строку 'Hello, world!!!', Вы должны написать следующую строчку: plhs[0] = mxCreateString("Hello, world!!!"); Для каждого типа из MatLab'а существует отдельная функция: для чисел это mxCreateDoubleMatrix, для строк - mxCreateString и т.п. После преобразования некоторых входных параметров Вы должны освободить указатели на преобразованные типы с помощью функции mxFree. Например, с помощью функции mxArrayToString Вы получаете указатель на char, являющийся обычной С-строкой. Эту строку Вы и должны освободить с помощью mxFree. Таким образом, общий порядок действий при работе функции следующий:
1. Проверить количество входных и выходных параметров, если эти количества неправильные, то вернуть сообщение об ошибке.
2. Проверить, те ли типы переданы во входных параметрах с помощью функций mxIsChar, mxIsDouble, mxIsComplex и т.п. Действительно, если Вы ожидаете, что Вам в первом параметре передадут строку, а Вам передадут комплексное число, то ничего хорошего такая функция не насчитает.
3. Преобразовать параметры в обыкновенные типы C/C++ с помощью функций mxGetPr, mxArrayToString и т.п.
4. Произвести необходимые действия с этими парметрами
5. Заполнить выходные параметры.
6. При необходимости освободить занимаемую память с помощью функции mxFree.
Необходимо также отметить, что кроме выполнения вычислительных операций, Вы можете вызывать функции WinAPI.
Порядок создания dll-файла в Visual C++, вызываемого из MATLAB:
1. File->New Откроется диалог "New" вкладка "Projects":
o выбираем тип создаваемого проекта: Win32 Dynamic-Link Library
o заполняем Project Name: {step1} Location: {указываем путь к нужной директории}
2. File->New Откроется диалог "New" вкладка "Files":
o выбираем тип создаваемого файла: C++ source file
o заполняем File Name: {step1}
3. Скопировать в директорию проекта файл matlab.lib (прилагается)
4. Добавить скопированный файл к проекту: Project->Add ToProject->Files-> matlab.lib
5. Работа с С++-ым файлом, входящим в проект: обязательно включить следующие хедера:
6. #include <windows>7. #include <mex.h>8. #include <matrix.h>9....10. (Далее пишем нужный код)11.... 12. Добавить к проекту файл {step.def}:
o File->New: откроется диалог "New" вкладка "Files":
o выбираем тип создаваемого файла: text files
o заполняем File Name: {step1.def}
13. Открыть {step.def} и заполнить его:
14. LIBRARY "{step1}"15. EXPORTS16. mexFunction 17. Tool->Options->Вкладка "Directories" включить путь:
18. С:\MATLAB\extern\include 19. Project->Settings: Output file name: {step1.dll}
20. F7 (Build) -> создастся файл {step1.dll}
21. Открываем MATLAB
22. File->Set Path: указываем путь к созданному dll-файлу
23. C командной строчки MATLAB: >>{step1} а выполнится нужный С++-ный код.
#$ Методичка по Matlab
# Вещественныечисла.
$ Вещественные числа.
+ 0010:0010
# Операциинадвещественнымичислами.
$ Операции над вещественными числами.
+ 0010:0020
# РабочеепространствосистемыMATLABиеёкомандноеокно.
$ Рабочее пространство системы MATLAB и её командное окно.
+ 0010:0030
# Элементарныематематическиефункции.
$ Элементарные математические функции.
+ 0010:0040
# КомплексныевычислениявсистемеMATLAB.
$ Комплексные вычисления в системе MATLAB.
+ 0010:0050
# МассивычиселвсистемеMATLAB.
$ Массивы чисел в системе MATLAB.
+ 0010:0060
# Синтаксисоперацийсмассивами.
$ Синтаксис операций с массивами.
+ 0010:0070
# Взаимныепреобразованиявекторовиматриц.
$ Взаимные преобразования векторов и матриц.
+ 0010:0080
# МногомерныемассивывсистемеMATLAB.
$ Многомерные массивы в системе MATLAB.
+ 0010:0090
# Функциидляработысмассивами.
$ Функции для работы с массивами.
+ 0010:0100
# Вычислениясмассивами.
$ Вычисления с массивами.
+ 0010:0110
# Глава2.
$ Глава 2.
# Построениедвумерныхграфиковфункций.
$ Построение двумерных графиков функций.
+ 0020:0010
# Оформлениеграфиковфункций.
$ Оформление графиков функций.
+ 0020:0020
# Трёхмернаяграфика.
$ Трёхмерная графика.
+ 0020:0030
# Положениекамерыивращениетрёхмерныхграфиков.
$ Положение камеры и вращение трёхмерных графиков.
+ 0020:0040
# СохранениевфайлахипередачавдругиепрограммыграфическихизображенийMA...
$ Сохранение в файлах и передача в другие программы графических изображений MA...
+ 0020:0050
# Показпроизвольныхрастровыхизображений.
$ Показ произвольных растровых изображений.
+ 0020:0060
# Глава3.
$ Глава 3.
# Понятияфункцииисценария.
$ Понятия функции и сценария.
+ 0030:0010
# СинтаксисопределенияивызоваM-функций.
$ Синтаксис определения и вызова M-функций.
+ 0030:0020
# Конструкцииуправления.
$ Конструкции управления.
+ 0030:0030
# ПроверкавходныхпараметровивыходныхзначенийM-функции.
$ Проверка входных параметров и выходных значений M-функции.
+ 0030:0040
# Видимостьимёнпеременныхиимёнфункций.
$ Видимость имён переменных и имён функций.
+ 0030:0050
# РазработкаиотладкаM-функций.
$ Разработка и отладка M-функций.
+ 0030:0060
# Массивысимволов.
$ Массивы символов.
+ 0030:0070
# Массивыструктур.
$ Массивы структур.
+ 0030:0080
# Массивыячеек.
$ Массивы ячеек.
+ 0030:0090
# Чтениеизаписьфайловданных.
$ Чтение и запись файлов данных.
+ 0030:0100
# Глава4.
$ Глава 4.
# ГрафическиеокнасистемыMATLABиэлементыуправления.
$ Графические окна системы MATLAB и элементы управления.
+ 0040:0010
# Созданиеосновныхэлементовуправления.
$ Создание основных элементов управления.
+ 0040:0020
# СозданиеграфическогообъектаAxes.
$ Создание графического объекта Axes.
+ 0040:0030
# Callbackфункции.
$ Callback функции.
+ 0040:0040
# Глава5.
$ Глава 5.
# Объектыиклассы.Переопределениеопераций.
$ Объекты и классы. Переопределение операций.
+ 0050:0010
# НаписаниерасширенийMATLABнаязыкеC.
$ Написание расширений MATLAB на языке C.
+ 0050:0020
# ВызовизMatLab'акода,написанногонаC/C.
$ Вызов из MatLab'а кода, написанного на C/C++.
+ 0050:0030
# МетодичкапоMatlab
$ Методичка по Matlab
ГЛАВА
ВО ИМЯ ЛЮБВИ К ЕДЕ
«Я заморский фрукт среди множества лука»
– ФАННИ БРАЙС, СМЕШНАЯ ДЕВЧОНКА
Моя мама всегда учила меня уважать свое тело, которое дается только один раз и вы должны сделать все чтобы позаботиться о нем. Я действительно слушала ее и никогда не относилась к своему телу, как к мусорке, а вместо этого пыталась обеспечить его наилучшими продуктами. В конце концов, правильное «топливо» является источником энергии, которая мне нужна для того, чтобы хорошо справится с моей работой. Это всегда помогало мне избегать вредных привычек. Я никогда не питалась фаст-фудом в детстве и вместо этого, как и в любой традиционной итальянской семье, мы готовили все наши блюда вместе. Еда была основной темой нашей жизни: мы показывали нашу любовь миской топленого Ziti [соус]. Так что многие из моих любимых детских воспоминаний состоялась за семейным обеденным столом. Там же я узнала, что еда может быть здоровой, вкусной и поводом для праздника. Проще говоря, я люблю еду: спросите моих друзей, и они скажут вам, что я человек, который может поговорить обо всем, что я съела сегодня, когда мы собираемся на ужин, и о вещах, которые мы могли бы заказать и съесть. Я реально люблю еду.
Поскольку это то, что меня поддерживает и заставляет меня чувствовать себя хорошо, я всегда упорно работаю, чтобы привести тело в форму. Очевидно, что очень важно найти умеренность, и с умеренностью, безусловно, приходит снисхождение. Есть дни, когда мне просто необходимо съесть целую пиццу «от Эми» перед телевизором. Потому что обычно, я поддерживаю оптимальный баланс в течение недели и никогда не ставлю себе трудные задачи в таких моментах. На самом деле, я обычно устраиваю себе «День Обмана» в субботу или в воскресенье, и я люблю эти дни. Потому что это удовольствие, но не норма, и я действительно наслаждаюсь этим. Такое чувство гораздо особеннее, чем если бы я обманывала себя каждый день.
Я также думаю, что поэтому у меня никогда не было проблем с едой и моим весом: я никогда не относилась к этому как к лекарству от всего, что беспокоило меня эмоционально, и я не относилась к еде, как к смертельному врагу. Я ходила в такую школу, где множество девушек, у которых, к сожалению, были проблемы с едой и которые боролись с пищевыми расстройствами. Конечно, я понимаю, что в этом мире слишком большое давление в том, как вы должны и не должны выглядеть. Хоть я и полностью понимаю, почему девушки думают, что они должны изменить свою внешность, чтобы приспособиться, но ведь это так важно сохранять здоровый баланс и любить себя, обеспечивая тело вкусными и полезными вещами. Плюс, посмотрите как все остальные гробят себя и вы поймете, что вы могли бы обеспечить себя лучшим! Я запомнила и узнала то, что вам нужно на самом деле любить себя, воспринимать свои «недостатки», и делать все для того, чтобы выглядеть и чувствовать себя лучше. И это начинается с употребления продуктов, которые хороши для вас.
Хоть я и полностью понимаю, почему девушки думают, что они должны изменить свою внешность, чтобы приспособиться, но ведь это так важно сохранять здоровый баланс и любить себя, обеспечивая тело вкусными и полезными вещами.
Так как я итальянка, то моя жизнь всегда сосредоточена вокруг молочных продуктов; я никогда не ела сладости. Если есть выбор, то я всегда выберу макароны с сыром на десерт нежели шоколадное суфле. И по этой причине, молочные продукты и углеводы были основой моего рациона, прежде чем я переехала в Лос-Анджелес. Когда я переехала, я прочитала книгу под названием «Тощая Сучка», у которой обманчивое название. Она не о том, как стать худой, в ней идет речь о правде, которая таится за всеми теми продуктами, которые мы едим. До этого момента, я думала, что бублик с утра, бутерброд с индейкой и сыром на обед, и миска макарон на ужин – основа для хорошо сбалансированной диеты. Я уже говорила, что люблю углеводы? Из этой книги, я не только узнала кучу вещей, о мясной индустрии, которые полностью изменили мое мнение о еде, но я также узнала о важности зелени. Ведь вы не увидите много зелени в Нью-Йорке. После того как я прочитала эту книгу, я также изменила свою диету и влюбилась в свежие продукты. Я искренне жажду свежих салатов, овощей и фруктов.
Лично я предпочитаю быть вегетарианкой, но ни разу не думала о том, что это такая вещь, которую следует навязывать другим людям. Я переключаюсь между вегетарианством, веганством и пескетарианством. И хоть я не люблю есть мясо на данный момент, это не значит, что я не могу изменить свое мнение. Что никогда не изменится, так это то, что я всегда буду давать своему телу топливо, которое ему необходимо для того чтобы я могла выглядеть и чувствовать себя на все 100%.
ВИТАМИНЫ
Я употребляю столько много витаминов, сколько смогу выпить в моем ежедневном рационе, но чтобы быть уверенной, что получаю достаточно, я посещаю врача для ввода витамина B12 капельно каждую неделю (я думаю, что это необходимая вещь для тех, кто живет в LA). Кроме того, моя мама подарила мне Vitamix, и по возможности, я дополняю мое питание свежим соком. К счастью, когда у меня нет времени, чтобы сделать это самой, есть множество хороших баров со свежевыжатым соком по всему городу. Вы должны экспериментировать с вашими любимыми вкусами и добавлять больше или меньше каждого ингредиента в зависимости от вашего вкуса. А вот некоторые из моих любимых рецептов:
Для огромного заряда энергии, я смешиваю три листа капусты, пучок шпината, четыре штучки сельдерея, сок двух лимонов, и 5-6 долек зеленого яблока. Измельчаю в соковыжималке и добавляю несколько листьев ромэна [салат] или горсть петрушки.
Для добавки к еде, я смешиваю один банан с половинкой авокадо и горстью черники.
Для расслабления, я смешиваю стакан воды с соком двух целых лимонов, половиной огурца, 5-6 кубиками арбуза, и несколькими стружками свежего имбиря.
Дата добавления: 2015-01-18 | Просмотры: 675 | Нарушение авторских прав
1 | 2 | 3 | 4 | 5 |
|