Вернуться на главную страницу

Комментарии

Прежде всего, приношу извинения за то, что фрагменты книги были перепечатаны и помещены в интернете без официального уведомления об этом Николая Николаевича Мартынова и издательства "ОЦ КУДИЦ-ОБРАЗ".

Для того, чтобы искупить свою вину, помещаю информацию о данном издании: Н.Н. Мартынов "Введение в MATLAB 6". - М.: КУДИЦ-ОБРАЗ, 2002 - 352 с.

Итак, что же меня побудило потратить несколько часов на сканирование, распознование и HTML-форматирование данного фрагмента? Очень простая и незатейливая вещь. Полное отсутствие информации о способах включения в свой проект на языках C/C++ вызовов функций библиотеки MATLAB. После около полугодовых поисков в интернете, расспрашивания знакомых и незнакомых людей я наконец-то обнаружил искомое в данной книге. Необходимая информация расположена на страницах 326-347, но некоторые операции подробно описаны в предыдущей главе, поэтому было принято командирское решение, и сканированию подверглись страницы 296-347, то есть главы 12 и 13.

Настоятельно рекомендую добыть и прочитать эту книгу. Помимо чёткого и ясного изложения материала, она пронизана искромётным юмором и тонкой иронией, сплетающихся в изящный узор повествования. Так, на одном развороте книги можно обнаружить следующие положения: Basic - наиболее распространённый в мире язык программирования, деревья являются сверхсложной структурой данных, а языку C присвоено чемпионство в номинации Programming Unlimited. Ещё одним примером проявления неотразимого чувства юмора являются размышления о том, что можно называть отладкой процесс просмотра текста программы.

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

Также признаюсь, что многое из приведённого материала осталось за пределами понимания Вашего покорного слуги. Приведу несколько примеров:


Считаю своим долгом выразить благодарность Николаю Николаевичу Мартынову за ясное изложение актуального материала.

Послесловие.

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

Что хотелось бы сказать в заключение? Выяснилось, что рекомендации, изложенные в книге в равной степени подходят и для подключения математических библиотек к MFC проекту. А не только для Win32Api и консольных приложений. Тестовая функция приведена ниже.

#include "e:\work\matlabr12\extern\include\matlab.h"
void CMfcMlabTestDlg::OnButtonTest()
{
	// Create arguments matrix X:
	mxArray* X=mxCreateDoubleMatrix( 4, 2, mxREAL );

	// Set its 8 elements:
	double x[] = {1,3,5,7,2,4,6,8};
	memcpy( mxGetPr( X ), x, sizeof(x) );

	// Calculate sin for all values at one time:
	mxArray* Y= mlfSin( X );

	// Get elements of mxArray Y:
	double* pEl = mxGetPr( Y );
	int M = mxGetM( Y );
	int N = mxGetN( X );

	int i;
	CString out,tmp;
	for( i=0; i< M*N; i++)
		tmp.Format("%lf\n", pEl[i] ),out+=tmp;
	MessageBox(out);

	// Free all mxArray memory buffers:
	mxDestroyArray( X );
	mxDestroyArray( Y );
}

Данная функция является переработанным вариантом примера из книги, который, кстати, содержит 2 ошибки, делающих его нерабочим. Во первых, вместо data следует поставить x, во-вторых, объявить переменную pEl.

Поясню ещё, что данная функция вызывается при нажатии кнопки Test на форме диалогового приложения. А для успешной линковки в установках проекта указаны lib файлы, в точности, как описано в книге.

Кроме того, в комплекте Matlab, установленном на моей машине, обнаружился полный комплект lib файлов, которые, таким образом, совершенно не требуется собирать, согласно рекомендациям книги. На моей машине файлы нашлись по адресу: E:\work\matlabR12\extern\lib\win32\microsoft\msvc60

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

Используются технологии uCoz