Архив рубрики ‘Matlab’
MASTAN2. Бывает ли бесплатным хороший МКЭ?
Бесплатные МКЭ пакеты бывают, за редкими исключениями, такие: либо их почти невозможно использовать для инженерных расчетов из-за серьезных недоработок пользовательского интерфейса, либо они по сути являются библиотеками функций для программистов, либо их разработка закончилась (а сайты, соответственно, умерли) лет десять назад.
Но зато я знаю теперь уже два исключения – это страшноватый с точки зрения UI, добрый и полезный внутри Framework2D/3D и теперь еще одно -
Реализованы стержневые трехмерные системы с физической нелинейностью материала, частоты собственных колебаний, полужесткие шарниры и другое по мелочи.
Два варианта установки – 200MB отдельностоящая и 2MB под Matlab.
Самое интересное заключается в том, что при установке в среду Matlab под него можно писать произвольные пользовательские дополнения. Получается решатель МКЭ и библиотека функций в одном флаконе.
Программа полностью бесплатная и может быть использована для коммерческих целей.
Есть довольно приличный пользовательский интерфейс. Можно загнать в нее свою базу сечений (в дополнение к уже имеющейся американской AISC).
Первое впечатление – весьма положительное.

Matlab: статистические штучки для получения реализаций случайной величины
Так-с. Исходные данные. Предполагается, что читатель знаком с:
- методом Монте-Карло (вкратце: случайные параметры -> много-много расчетов посредством произвольной расчетной модели -> вероятностный результат, надежность и прочие радости)
- и с тем, что такое функция распределения и функция плотности случайной величины.
Предположим, что у нас есть случайная прочность R с параметрами m=350, s=30. Это выглядит так:
cdf('norm', x, Mean1, StdDev1)pdf('norm', x, Mean1, StdDev1)
Но для задачи вероятностного расчета методом Монте-Карло нам нужно средство генерации множества реализаций нашей случайной прочности.
Для равномерного распределения такое средство одинаково в любом языке программирования и называется RND. И в Екселе тоже есть.
Для любого другого распределения для генерации случайных чисел нам нужна функция, обратная CDF, отвечающая на вопрос “какое число соответствует вероятности непревышения такой-то?”. Такой способ получения случайных чисел называется методом обратного преобразования.
Откуда нам взять такого зверя? На помощь приходит замечательный статистический пакет Stixbox, о котором я обещал написать :
>> MonteCarloData1 = rnorm(1000, 350, 30); >> Mean1 = mean(MonteCarloData1) Mean1 =349.9133 >> StdDev1 = std(MonteCarloData1) StdDev1 =30.7880
Аналогичные функции есть в этом пакете и для других известных распределений. Для задач вероятностного анализа расчетных моделей конструкций более чем достаточно. Спасибо за этот замечательный инструмент Андерсу Хольтсбергу.
Matlab: количество отображаемых знаков
Этот пример считает обеспеченность величины, находящейся на расстоянии трех стандартных отклонений от среднего значения нормального распределения:
>> 1 - cdf('norm', 1000-3*50, 1000, 50)
ans = 0.9987
Короче говоря, с инженерной точки зрения это обеспеченность расчетного значения случайной величины со средним значением 1000 и стандартным отклонением 50. Как видим, Матлаб съел все знаки после четвертого, хотя на самом деле посчитал точное число. Чтобы не путаться, можно отформатировать вывод Матлаба, чтобы он показывал число с точностью ‘long’:
>> format('long')
>> 1 - cdf('norm', 1000-3*50, 1000, 50)
ans = 0.998650101968370
Вот она, наша знаменитая обеспеченность 0,99865.
В следующий раз будет
* про то, чем отличается 0,997 от 0,99865,
* про замечательный статистический аддон Stixbox,
* про инвертирование с его помощью функции распределения для генерации случайных чисел в методе Монте-Карло.
Короче, полезная в расчетах надежности статистика.
Но самое интересное впереди. Самое интересное будет про нечёткие множества.
Блог жив
Как только найдется время, систематизирую с десяток очередных дилетантских проблем в MATLAB.
Пока же руки дошли до реализации в MATLAB метода Монте-Карло (с использованием произвольной расчетной модели, описываемой m-функцией в отдельном m-файле), а также методов анализа неопределенностей на базе размытых множеств. С расчетной частью диссертации покончено, осталось картинок-графиков нарезать.
Про размытые множества и вообще про тему моей работы надо будет отписаться отдельно; впрочем, для этого блога это оффтопик.
Если вы это читаете, то вы наверняка с dwg.ru. Хе-хе.
Проблема управления памятью в Matlab
В Matlab есть одна неприятная штука — Out of memory error. Фактор управления памятью приходится учитывать при операциях с большими матрицами, которые требуют немпрерывных массивов памяти.
Существует ряд способов решения проблем, связанных с выделением памяти.
Читать про них:
Memory Management Guide
Так, сегодня проблему с очень большой матрицей вектора перемещений в методе конечных элементов UX(i,j) размером 836×2007 мне удалось решить, используя очень простую запись в виде массиыва ячеек UX{i}(j) (массив ячеек хранит указатели на массивы, а не всю матрицу сразу. Просто? А вот я полдня с со своей программой мучился).
Следует отметить, что Matlab вываливался с ошибкой от матрицы, считываемой с диска с явно заданными элементами:
UX(1,1)=5.8; UX(1,2)=5.4; UX(1,2)=5.2; ...
Если вы создадите случайную матрицу rand(836,2007) прямо в командной строке, никакой ошибки не случится.
Про массивы ячеек (cell arrays) можно почитать очень дельную статью:
Cell Arrays and their contents
Как в Matlab соединить два текстовых файла
Пусть мы записываем что-нибудь в файл file1.txt и нам надо добавить туда содержимое файла file2.txt. Это выглядит следующим образом:
fid = fopen('file1.txt', 'wt');
%открыли для записи
fid2 = fopen('file2.txt', 'r');
%открыли для чтения
while 1
tline = fgetl(fid2);
disp(tline)
fprintf(fid, '%s\n', tline);
if feof(fid2), break, end
end
fclose(fid2);
XML_IO для MATLAB
Замечательная вещь для экспорта-импорта XML в среде MATLAB.
Написана полностью на языке MATLAB, очень удобно. Потом, если получится, отпишу о ее использовании в своем пакете интервального анализа.
Сама утилита
Небольшая демонстрация и руководство
Спасибо автору:
Jaroslaw Tuszynski
jaroslaw.w.tuszynski@saic.com