Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КУРСОВИК ИИС.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
625.05 Кб
Скачать

Общие замечания по моделированию систем

Испытание готовых и отлаженных демонстрационных примеров может создать у малоопытного пользователя иллюзию простоты моделирования. На самом деле в большинстве случаев это возможно только при работе достаточно опытного пользователя, реально проработавшего с тем или иным пакетом расширения не один десяток часов и способного анализировать правоту (или неправоту) своих действий [14].

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

– неверное задание параметров моделей;

– нестыковка входных, выходных и управляющих параметров блоков;

– несоответствие блоков по типу;

– ошибочные записи математических выражений;

– неверный выбор метода моделирования и т. д.

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

Довольно часто причиной ошибок является несоответствие типов блоков и их входных и выходных параметров. В таких случаях надо предусматривать переходные элементы. Наглядный пример – переход от тока к напряжению включением резистора 1 Ом в цепь тока.

Особенно часто нестыковка блоков наблюдается при совместном использовании блоков из разных пакетов расширения, например, из пакетов PowerSystem и Simulink. Размерные величины, используемые в пакете  PowerSystemBlockset, зачастую недопустимы для блоков Simulink, использующих безразмерные величины (например, при задании функций).

По-видимому, стоит разумно ограничить применение компонентов из различных пакетов расширения. Как показывает практика, каждый из пакетов расширения имеет довольно широкую сферу применения и позволяет решать множество практически полезных задач. Совместное применение нескольких пакетов расширения системы MATLAB+Simulink требует длительной практики работы в этой системе. Наименьший риск натолкнуться на трудности моделирования имеет место при использовании пакетов расширения группы Blockset, отнесенной к сфере прямого применения с расширением Simulink.

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

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

2.2. Детальное описание особенностей выполнения демонстрационного примера

Для загрузки демонстрационного примера «Обучение персептрона с использованием нормированной функции настройки» достаточно ввести в CommandWindow команду demop5. В окне Figures появится результат работы программы – график, который пытается классифицировать линейно неразделимые вектора. График свидетельствует о неудачи классификации.

Как же работает демонстрационный пример «Обучение персептрона с использованием нормированной функции настройки»?

Персептрон обучается для классификации 5 входных векторов с помощью 2 категорий. Несмотря на то,что одинвходной векторнамного больше, чемдругие,обучение сLEARNPN происходит быстро.

Р определяет последовательность входа для 5 векторов, а Т – последовательность цели (категорию вектора). Построим график для этих векторов с помощью функции PLOTPV.

P = [ -0.5 -0.5 +0.3 -0.1 -40; ...

-0.5 +0.5 -0.5 +1.0 50];

T = [1 1 0 0 1];

plotpv(P,T);

Обратим внимание, что4входных вектораимеют намного меньшиевеличины, чем пятыйвектор влевом верхнем углуграфика. Персептрон долженправильно классифицировать5 входных векторовPна две категории,определенные Т. NEWP создает персептрон.Первый аргумент определяет ожидаемые диапазоны из двух входов.Второй аргумент определяет, чтоесть только одиннейрон вслое.LEARNPNменее чувствителен кбольшим изменениямво входныхразмерахвектора, чем LEARNP(по умолчанию).

net = newp([-40 1;-1 50],1,'hardlim','learnpn');

Добавление нейрона инициализирует попытку классификации графика.

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

holdon

linehandle = plotpc(net.IW{1},net.b{1});

ADAPT – возвращает новый объект сети, который работает лучше как классификатор, выход сети и ошибка. Этот цикл позволяет сети адаптироваться за 3 прохода, график классифицирует линию, и продолжит, пока ошибка не будет равна 0.

E = 1;

net.adaptParam.passes = 3;

while (sse(E))

[net,Y,E] = adapt(net,P,T);

linehandle = plotpc(net.IW{1},net.b{1},linehandle);

drawnow;

end

Обучение сLEARNPпотребовалось всего 3прохода, а при решениитой же задачи сLEARNPNнеобходимо 32 прохода.Таким образом,LEARNPNработает гораздолучше, чемLEARNPкогда естьзначительные различияво входныхразмерахвектора.

ТеперьSIMможетбыть использован для классификациилюбого другого векторавхода.Например, классифицировать входной вектор[0,7; 1,2]. График этой новой точкис оригинальнымобучениемпоказывает, каквыполняется сеть.Чтобыотличить его отобучающего множества, его цвет красный

p = [0.7; 1.2];

a = net(p);

plotpv(p,a);

circle = findobj(gca,'type','line');

set(circle,'Color','red');

.

Подключим «hold», чтобы предыдущий график не стирался. Добавим набор обучения и классифицирующую линию на график.

hold on;

plotpv(P,T);

plotpc(net.IW{1},net.b{1});

holdoff;

Наконец, Увеличиваем интересующую область.

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

axis([-2 2 -2 2]);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]