Кто сказал "стракчурал инжиниринг"?

Бауск о разном.

Архив рубрики ‘Matlab

MASTAN2. Бывает ли бесплатным хороший МКЭ?

с одним комментарием

Бесплатные МКЭ пакеты бывают, за редкими исключениями, такие: либо их почти невозможно использовать для инженерных расчетов из-за серьезных недоработок пользовательского интерфейса, либо они по сути являются библиотеками функций для программистов, либо их разработка закончилась (а сайты, соответственно, умерли) лет десять назад.

Но зато я знаю теперь уже два исключения – это страшноватый с точки зрения UI, добрый и полезный внутри Framework2D/3D и теперь еще одно -

MASTAN2 v3.2

Реализованы стержневые трехмерные системы с физической нелинейностью материала, частоты собственных колебаний, полужесткие шарниры и другое по мелочи.
Два варианта установки – 200MB отдельностоящая и 2MB под Matlab.
Самое интересное заключается в том, что при установке в среду Matlab под него можно писать произвольные пользовательские дополнения. Получается решатель МКЭ и библиотека функций в одном флаконе.

Программа полностью бесплатная и может быть использована для коммерческих целей.
Есть довольно приличный пользовательский интерфейс. Можно загнать в нее свою базу сечений (в дополнение к уже имеющейся американской AISC).
Первое впечатление – весьма положительное.

Mastan Screenshot

Написано Alexander Bausk

Октябрь 13, 2008 в 1:55 пп

Опубликовано в Инженерия, Программы, Matlab

Matlab: статистические штучки для получения реализаций случайной величины

с одним комментарием

Это первое (upd.: и единственное) сообщение, отосланное через ScribeFire, аддон к браузеру FireFox.
Так-с. Исходные данные. Предполагается, что читатель знаком с:

Предположим, что у нас есть случайная прочность R с параметрами m=350, s=30. Это выглядит так:

Функции распределения и функции плотности в Матлабе соответствуют команды

cdf('norm', x, Mean1, StdDev1)pdf('norm', x, Mean1, StdDev1)
Команда cdf(…) отвечает на вопрос “какова вероятность того, что реализация случайной переменной будет меньше, чем x?”
Но для задачи вероятностного расчета методом Монте-Карло нам нужно средство генерации множества реализаций нашей случайной прочности.
Для равномерного распределения такое средство одинаково в любом языке программирования и называется RND. И в Екселе тоже есть.
Для любого другого распределения для генерации случайных чисел нам нужна функция, обратная CDF, отвечающая на вопрос “какое число соответствует вероятности непревышения такой-то?”. Такой способ получения случайных чисел называется методом обратного преобразования.
Откуда нам взять такого зверя? На помощь приходит замечательный статистический пакет Stixbox, о котором я обещал написать :
>> MonteCarloData1 = rnorm(1000, 350, 30); 
 >> Mean1 = mean(MonteCarloData1) 
 Mean1 =349.9133 
 >> StdDev1 = std(MonteCarloData1) 
 StdDev1 =30.7880
Функция rnorm(количество_реализаций, среднее, стд_отклонение) выдает столько реализаций случайной величины с нормальным распределением, сколько нам заблагорассудится. С ее помощью и построена наложенная на рисунок гистограмма реализаций случайной величины (красненьким).
Аналогичные функции есть в этом пакете и для других известных распределений. Для задач вероятностного анализа расчетных моделей конструкций более чем достаточно. Спасибо за этот замечательный инструмент Андерсу Хольтсбергу.

Написано Alexander Bausk

Февраль 22, 2008 в 9:28 пп

Опубликовано в Матан, Надежность, Matlab

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,
* про инвертирование с его помощью функции распределения для генерации случайных чисел в методе Монте-Карло.

Короче, полезная в расчетах надежности статистика.
Но самое интересное впереди. Самое интересное будет про нечёткие множества.

Написано Alexander Bausk

Февраль 19, 2008 в 9:31 дп

Опубликовано в Matlab

Блог жив

с одним комментарием

Как только найдется время, систематизирую с десяток очередных дилетантских проблем в MATLAB.
Пока же руки дошли до реализации в MATLAB метода Монте-Карло (с использованием произвольной расчетной модели, описываемой m-функцией в отдельном m-файле), а также методов анализа неопределенностей на базе размытых множеств. С расчетной частью диссертации покончено, осталось картинок-графиков нарезать.

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

Если вы это читаете, то вы наверняка с dwg.ru. Хе-хе.

Написано Alexander Bausk

Февраль 8, 2008 в 9:54 пп

Опубликовано в Оффтопик, Matlab

Проблема управления памятью в 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

Написано Alexander Bausk

Ноябрь 28, 2007 в 8:34 дп

Опубликовано в Мелочи, Matlab

Как в 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);

Написано Alexander Bausk

Ноябрь 27, 2007 в 6:47 пп

Опубликовано в Мелочи, Matlab

XML_IO для MATLAB

оставьте комментарий »

Замечательная вещь для экспорта-импорта XML в среде MATLAB.
Написана полностью на языке MATLAB, очень удобно. Потом, если получится, отпишу о ее использовании в своем пакете интервального анализа.

Сама утилита
Небольшая демонстрация и руководство

Спасибо автору:
Jaroslaw Tuszynski
jaroslaw.w.tuszynski@saic.com

Написано Alexander Bausk

Ноябрь 26, 2007 в 11:54 пп

Опубликовано в Программы, Matlab, XML

Follow

Get every new post delivered to your Inbox.

Join 112 other followers