Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помогите с Matlab

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Открыть новую тему     Написать ответ в эту тему

SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7, большое спасибо. Разобрался более или менее.

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 09:12 20-09-2015
SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dimitriy7, еще вопрос, если вам не сложно. Как работают скобки в выражениях
 
W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)'
 
и
 
dc(:,ones(1, NumberOfHiddenNeurons))'),2)

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 17:14 20-09-2015
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)'

Берем кусок от матрицы W2 (строки с 1 по NumberOfOutputNeurons, столбцы с 1 по NumberOfHiddenNeurons) и его транспонируем:

Код:
>> NumberOfOutputNeurons=2, NumberOfHiddenNeurons=3
 
NumberOfOutputNeurons =
 
     2
 
 
NumberOfHiddenNeurons =
 
     3
 
>> W2=[1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]
 
W2 =
 
     1     2     3     4
     5     6     7     8
     9    10    11    12
    13    14    15    16
 
>> W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)
 
ans =
 
     1     2     3
     5     6     7
 
>> W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)'
 
ans =
 
     1     5
     2     6
     3     7
 
>>  

 

Цитата:
dc(:,ones(1, NumberOfHiddenNeurons))'),2)

А где начало выражения?

Цитата:
dc(:,ones(1, NumberOfHiddenNeurons))'

-- это уже было выше, столбец dc раздувается до ширины в NumberOfHiddenNeurons столбцов, затем транспонируется.
А ),2) -- это кусок от чего-то, что было до "dc" :)

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 20:13 20-09-2015
SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
db  = bpm_phi_d(sumHidden) .* ( sum( (W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)' .* dc(:,ones(1, NumberOfHiddenNeurons))'),2));  - это все выражение. Наверное, я неправильно вырезал.

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 20:31 20-09-2015
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Угу, надо ж по кол-ву скобок смотреть :)

Цитата:
sum( (W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)' .* dc(:,ones(1, NumberOfHiddenNeurons))'),2)

Вот.
Действие 1:
W2(1:NumberOfOutputNeurons,1:NumberOfHiddenNeurons)'
-- в прошлом посте написал.
 
Действие 2:
dc(:,ones(1, NumberOfHiddenNeurons))'
-- там же.
 
Действие 3:
(действие_1.*действие_2)
-- множим эти матрицы почленно. Не как именно матрицы, а просто отдельные их элементы попарно. Вот, сравни умножение с точкой и без:

Код:
>> a=[1 2; 3 4], b=[5 6; 7 8]
 
a =
 
     1     2
     3     4
 
 
b =
 
     5     6
     7     8
 
>> a*b
 
ans =
 
    19    22
    43    50
 
>> a.*b
 
ans =
 
     5    12
    21    32
 
>>  

 
Действие 4:
sum((действие_3),2)
получаем вектор-столбец, где К-й элемент равен сумме всех элементов в К-ой строки матрицы, полученной в 3-м действии:

Код:
>> matr=[1 2 3; 4 5 6; 7 8 9]
 
matr =
 
     1     2     3
     4     5     6
     7     8     9
 
>> sum(matr,2)
 
ans =
 
     6
    15
    24
 
>>  

 

Цитата:
db  = bpm_phi_d(sumHidden) .*действие_4

берем вектор "bpm_phi_d(sumHidden)" и множим почленно его элементы на соотв. элементы вектора, полученного в 4-м действии. И результат сохраняем как "db".

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 20:57 20-09-2015 | Исправлено: dimitriy7, 20:59 20-09-2015
SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большое вам спасибо. Теперь могу двигаться дальше

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 21:31 20-09-2015
SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Действие 4:
sum((действие_3),2)

 
Простите, забыл спросить в прошлый раз - что означает двойка?

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 12:07 22-09-2015
dimitriy7



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SergGur
то, что складываем по строкам:

Код:
>> a=[1 2 3; 4 5 6; 7 8 9]
 
a =
 
     1     2     3
     4     5     6
     7     8     9
 
>> sum(a,1)
 
ans =
 
    12    15    18
 
>> sum(a,2)
 
ans =
 
     6
    15
    24
 
>>  

Всего записей: 2946 | Зарегистр. 09-10-2008 | Отправлено: 20:24 22-09-2015
SergGur

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо, понятно

Всего записей: 37 | Зарегистр. 05-05-2006 | Отправлено: 20:27 22-09-2015
neizvestnyj375



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Доброго времени суток, на одном из сайтов найдена вот такая задачка - светофор на нечеткой логике.
По алгоритму нечеткого вывода все ясно, но не могу понять, как работает основная программа, точнее как ее реализовать, чтобы получить такие результаты, как приведено ниже на скриншоте. Как такие задачи вообще решаются в matlab, моделируются в simEvents либо пишутся так, с матлабом на этапе ознакомления.

Цитата:
 
В обычном светофоре время работы зеленого и красного света, а также время цикла фиксированы. Это создает некоторые трудности в движении машин, особенно, при изменении их потоков в часы пик, что довольно часто приводит к появлению автомобильных пробок.
 
В предлагаемом нечетком светофоре время цикла остается постоянным, однако, время его работы в режиме зеленого света должно меняться в зависимости от количества подъезжающих к перекрестку машин.
 
Пусть время цикла традиционного и нечеткого светофоров будет одинаковым и равным 1мин.=60сек. Длительность зеленого света обычного светофора зададим 30сек., тогда красный свет будет гореть тоже 30сек.
 
Для работы нечеткого светофора на перекрестке улиц Север-Юг (СЮ) и Запад-Восток (ЗВ) необходимо установить 8 датчиков (рис.1), которые считают проехавшие мимо них машины.

Светофор использует разности показаний четырех пар датчиков: (Д1-Д2), (Д3-Д4), (Д5-Д6) и (Д7-Д8). Таким образом, если для улицы СЮ горит зеленый свет, машины проезжают перекресток и показания двух пар датчиков равны: Д1=Д2, Д5=Д6, а, следовательно, их разность равна нулю. В это же время на улице ЗВ перед светофором останавливаются машины, которые успели проехать только Д4 и Д7. В результате можно рассчитать суммарное количество автомобилей на этой улице следующим образом:
 
(Д4-Д3)+(Д7-Д8)=(Д4-0)+(Д7-0)=Д4+Д7.
 
Для сравнения работы обоих светофоров введем показатель эффективности, в качестве которого будем рассматривать число машин, не проехавших перекресток за один цикл светофора.
 
Данную задачу можно сравнить с системой массового обслуживания (СМО), по двум каналам которой поступают заявки на обслуживание в виде автомашин. Показатель эффективности в этом случае число заявок, получивших отказ.
Для решения поставленной задачи используется пакет Matlab, т.к. он имеет в своем составе fuzzy-приложение, необходимое для моделирования работы нечеткого светофора.
 
Более подробно рассмотрим проектирование нечеткой подпрограммы. Здесь однозначно должны быть определены все входы и выходы.
 
Поскольку работа светофора зависит от числа машин на обеих улицах и текущего времени зеленого света, для нашей подпрограммы предлагается использовать 3 входа: число машин на улице СЮ по окончанию очередного цикла, число машин на улице ЗВ по окончанию цикла и время зеленого света нечеткого светофора.
 
Теперь для каждой переменной надо задать лингвистические термы, соответствующие некоторым диапазонам четких значений. Так, для переменной время зеленого света предлагается использовать три терма (рис.2):
 
малое (10-25сек.);
среднее(20-40сек.);
большое(35-50сек.).

Степень принадлежности четких значений термам задается с помощью функций принадлежности (в нашем случае эти функции имеют форму трапеции).
 
Аналогично, термы для двух оставшихся переменных будут (рис.3):
 
очень малое (0-18);
малое (16-36);
среднее (34-56);
большое (54-76);
очень большое (72-90).

Функции принадлежности здесь также имеют форму трапеции.
 
Так как суть работы светофора состоит в изменении времени зеленого света, в качестве выходного параметра предлагается использовать величину этого изменения. Термы в этом случае будут следующие (рис.4):
 
уменьшить (-20-0сек.);
не изменять (-15-15сек.);
увеличить (0-20сек.).

 
Функции принадлежности имеют форму Гаусса.
 
Кроме того, в подпрограмму записывается таблица правил на основе условных высказываний, которая формирует выходное значение исходя из величин входных параметров, например:
 
Если (число машин на улице СЮ=малое)&(число машин на улице ЗВ=большое)&(время зеленого света на улице СЮ=большое), то (время зеленого света=уменьшить).
 
Результаты моделирования и программа на Матлабе представлены в соттветствующих пунктах.
Основная программа работает следующим образом: с помощью встроенного в Matlab генератора случайных чисел происходит генерирование числа машин за один цикл светофора для улиц СЮ и ЗВ.
 
Часть машин из этого числа успевает проехать на зеленый свет, остальные останавливаются перед перекрестком, ожидая окончания действия красного света светофора. Все те автомобили, которые остались стоять перед светофором после одного цикла, считаются не обслуженными заявками.
 
За показатель эффективности данной системы принимается среднее число не обслуженных заявок за заданное количество циклов светофора. Соответственно, чем меньшее значение имеет показатель эффективности, тем большее количество машин пропускает светофор.
 
Число циклов светофора не должно быть слишком малым, т.к. в этом случае не получается объективной информации, или слишком большим, т.к. программа будет очень долго вычислять требуемую величину. Рекомендуемое количество циклов - 100.
 
Таким образом, алгоритм программы следующий: на светофор с датчиков поступает информация о количестве автомобилей на двух улицах. Эти данные переводятся в нечеткий формат согласно заданным функциям принадлежности, далее, внутри подпрограммы происходит их обработка, полученное значение изменения времени зеленого света дефаззифицируется (т.е. переводится обратно в четкий формат) и поступает в виде управляющего сигнала на светофор. В соответствии с этим сигналом время зеленого света светофора в следующем цикле будет другим.
 
Результат вычислений

Всего записей: 748 | Зарегистр. 23-11-2009 | Отправлено: 22:38 06-04-2017 | Исправлено: neizvestnyj375, 22:50 06-04-2017
AnnaShe

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте. Помогите, пожалуйста, новичку в Матлаб. Пытаюсь построить поверхность по точкам. Не пойму где ошибка. Пишет  
 
[x,y,z]=meshgrid(298:30:547,45:1:55,177584:5000:35000);  
z=[563   55   348425.2;  
371   52   229569.6;  
298   50   177584.7;  
476   50   284615.6;  
476   54   287818.1;  
476   48   281484.1;  
532   48   314816.9;  
532   53   320469.8;  
547   45   323765.4;  
547   55   332505.0];  
meshgrid(z),xlabel('x'),ylabel('y'),zlabel('z'),title('Z-поверхность').  
 
??? meshgrid(z),xlabel('x'),ylabel('y'),zlabel('z'),title('Z-поверхность').  
                                                                           |  
Error: Expression or statement is incomplete or incorrect.

Всего записей: 6 | Зарегистр. 20-04-2017 | Отправлено: 19:10 20-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnnaShe

Цитата:
Не пойму где ошибка.

Я же написал - Нарисуйте поверхность сначала. Где у вас surf или ее аналоги?

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 19:16 20-04-2017
AnnaShe

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я же написал - Нарисуйте поверхность сначала. Где у вас surf или ее аналоги?

 
Дело в том, что я в Матлаб ранее не работала, поэтому буду признательна, если вы объясните что требуется
>> [x,y,z]=meshgrid [298:30:547,45:1:55,177584:5000:35000];
z=[563   55   348425.2;
371   52   229569.6;
298   50   177584.7;
476   50   284615.6;
476   54   287818.1;
476   48   281484.1;
532   48   314816.9;
532   53   320469.8;
547   45   323765.4;
547   55   332505.0];
surf(x, y, z)
             colormap(gray)
             shading interp
             colorbar
meshgrid(z),xlabel('x'),ylabel('y'),zlabel('z'),title('Z-поверхность').
??? [x,y,z]=meshgrid [298:30:547,45:1:55,177584:5000:35000];
                     |
Error: Unbalanced or unexpected parenthesis or bracket.

Всего записей: 6 | Зарегистр. 20-04-2017 | Отправлено: 19:22 20-04-2017 | Исправлено: AnnaShe, 19:26 20-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnnaShe
Ну это уже не смешно.. Сами не замечаете пробел между функцией и (зачем то) квадратными скобками? Хотя раньше писали без пробела и с круглыми.
Плюс тут
Цитата:
surf(x, y, z)  

использовать нельзя, так как размерности x, y, z не совпадают.
первый meshgrid (непонятно зачем второй на последней строке вообще) вернет пустые матрицы, так как 177584:5000:35000 не сработает, начальное значение больше конечного. Тут проблема не в незнании, а в невнимательности.

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 20:06 20-04-2017 | Исправлено: Mavrikii, 20:11 20-04-2017
AnnaShe

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за подсказку
 

Цитата:
использовать нельзя, так как размерности x, y, z не совпадают.  

что в таком случае нужно использовать?

Всего записей: 6 | Зарегистр. 20-04-2017 | Отправлено: 22:11 20-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AnnaShe

Цитата:
что в таком случае нужно использовать?

что угодно, но правильно.
 

Код:
data = [563   55   348425.2;  
371   52   229569.6;  
298   50   177584.7;  
476   50   284615.6;  
476   54   287818.1;  
476   48   281484.1;  
532   48   314816.9;  
532   53   320469.8;  
547   45   323765.4;  
547   55   332505.0];
x = data(:, 1);
y = data(:, 2);
z = data(:, 3);
[mx, my] = meshgrid(min(x) : max(x), min(y) : max(y));
z_data = griddata(x, y, z, mx, my);
surf(mx, my, z_data)
colormap(gray)  
shading interp  
colorbar  
xlabel('x'),ylabel('y'),zlabel('z'),title('Z-surface')
 
 
figure;
scatter3(x, y, z)
xlabel('x'),ylabel('y'),zlabel('z-points'),title('Z-scatter')

и поверхность и отдельно точки
 
   
 

Всего записей: 15099 | Зарегистр. 20-09-2014 | Отправлено: 22:31 20-04-2017 | Исправлено: Mavrikii, 22:33 20-04-2017
AnnaShe

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii спасибо вам! я ноль в Матлабе, а вы меня выручили!!  

Всего записей: 6 | Зарегистр. 20-04-2017 | Отправлено: 09:38 21-04-2017
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
я ноль в Матлабе
на фиг он тогда нужен?
я типа учусь на прикладного программиста...

Всего записей: 24107 | Зарегистр. 06-12-2002 | Отправлено: 14:58 27-04-2017
landy



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А есть способ в матлабе выводить числа в окне Variables в естественном виде, как 12345.45 вместо экспоненциальной формы? Все форматы, которые есть на вкладке View - Number Display Format перебрал, ни одного похожего нет...

Всего записей: 576 | Зарегистр. 17-01-2003 | Отправлено: 12:35 02-05-2017
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » помогите с Matlab


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru