Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/37: Рейтинг темы: голосов - 37, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22

Создание матриц matlab

12.02.2015, 23:26. Показов 7321. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Я новичок в матлабе, пытаюсь понять, можно ли сгенерировать матрицу определенного размера для пользователя, заполненную к примеру 1 и 0, но не рандомно, как с помощью функции randint (если я правильно понял, как она работает),
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
randint(8)
 
ans =
 
     1     1     0     1     0     0     1     1
     1     1     1     1     0     0     1     0
     0     0     1     1     0     1     0     1
     1     1     1     0     1     1     1     0
     1     1     1     1     1     0     1     1
     0     0     0     0     0     0     0     0
     0     1     1     1     1     0     0     1
     1     0     1     0     0     1     0     1
а чтобы можно было обозначить, к примеру, что в матрице с N строками первая строка заполнена нулями, вторая тоже, третья единицами и т.п. И например, чтобы не вся строка была заполнена к примеру нулями, а кое-где были единицы среди них. Можно ли это представить в виде функции?
Извините за невнятную речь
И да, можно ли строки менять местами к примеру?
Помогите, пожалуйста
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.02.2015, 23:26
Ответы с готовыми решениями:

Как устроены алгоритмы вычисление матриц "matlab"?
Как устроены вычисления в matlab? В частности, как он работает с матрицами? Может ли кто-нибудь объяснить, или дать ссылки на...

Создание диаграмм в Matlab
Помогите, пожалуйста, построить совмещенную диаграмму, изображение которой приложено к сообщению. Сколько не пыталась создать подобный вид,...

Matlab создание графиков
задал в matlab переменные (картинка №1), прописал в m-file код уравнений, что нужно посчитать (картинка 2). Но вот не совсем пойму что...

19
319 / 258 / 30
Регистрация: 30.03.2013
Сообщений: 755
13.02.2015, 11:18
Matlab M
1
2
3
4
5
6
7
8
9
X1=randi([0 1],8)
X2=ones(8);
X3=zeros(8);
n=randperm(8,4); % генератор случайных целых НЕ повторяющихся чисел
% 4 числа в диапазоне 1-8
%
X1(n(1:2),:)=X2(n(1:2),:);
X1(n(3:4),:)=X3(n(3:4),:);
X1
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
13.02.2015, 13:48  [ТС]
sergsh, разве Вы правильно описали функцию?
Цитата Сообщение от sergsh Посмотреть сообщение
n=randperm(8,4); % генератор случайных целых НЕ повторяющихся чисел
% 4 числа в диапазоне 1-8
если не ошибаюсь, функция randperm(n) выполняет случайную перестановку целых чисел от 1 до n, а Вы написали 2 аргумента. И мне нужно получить не то, элементы матрицы должны быть либо 0, либо 1.
А по заданию смысл в том, что сначала нужно получить матрицу к примеру с чередующимися строками из 0 и 1,например
А=[11111
00000
11111
00000
11111
00000
11111
00000
11111
...
00000]
потом перемещать строки местами, к примеру
А=[11111
00000
11111
11111
11111
00000
11111
00000
00000
...
00000]
и рассмотреть ту ситуацию, когда строка заполнена не одинаковыми элементами,будь то 0 или 1, а совокупностью
А=[10011
00100
11111
10011
11111
00000
00111
00000
01110
...
00000]

Пожалуйста, если кто понял, помогите. Суть понимаю, но как реализовать совершенно нет. Почитал литературу, подобного не встретил, если честно
И оформление в виде функции возможно ли?
0
319 / 258 / 30
Регистрация: 30.03.2013
Сообщений: 755
13.02.2015, 22:31
Лучший ответ Сообщение было отмечено toshacolosow как решение

Решение

Matlab M
1
2
3
4
5
6
% 1
for i=1:2:8; X1(i,:)=ones(8,1); X1(i+1,:)=zeros(8,1); end; X1
% 2
n=randperm(8,8); for i=1:4; X2(n(i),:)=ones(8,1); X2(n(i+4),:)=zeros(8,1); end; X2
% 3
X3=randi([0 1],8)
1
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
14.02.2015, 16:45  [ТС]
sergsh,
n=randperm(8,8);
на эту строку матлаб вновь ругается
0
319 / 258 / 30
Регистрация: 30.03.2013
Сообщений: 755
14.02.2015, 19:36
видимо у вас старая версия, у меня все работает как и написано в описании:
http://www.mathworks.com/help/... dperm.html
1
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
15.02.2015, 00:11  [ТС]
sergsh, да нет вроде бы, недавно 2013 установил. а у Вас какая?

Добавлено через 1 час 7 минут
sergsh, переустановил программу, все заработало, спасибо!
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 00:47  [ТС]
Ребят, я опять к вам. А можно ли каким-то образом выбирать нужное количество нулевых строк?
т.е имея матрицу
А=[11111
11111
11111
11111
11111
11111
11111
11111]

мы можем указать строку или строки в которых необходимо "вставить" нулевые вектора
например 3
А=[11111
11111
00000
11111
11111
11111
11111
11111]

3,5
А=[11111
11111
00000
11111
00000
11111
11111
11111]
и т.д

Добавлено через 40 минут
Точнее даже не именно в каких строках, а вообще количество их. Одна строка во всей матрице, две, три..

Добавлено через 9 часов 23 минуты
Если к примеру с помощью генератора случайного числа выбрать строку, заполнить нулями, но возможно ли задание определенного количества случайных чисел?
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.02.2015, 00:52
Цитата Сообщение от toshacolosow Посмотреть сообщение
но возможно ли задание определенного количества случайных чисел?
Почему нет?

Алгоритм:
1.Задаем число N = количеству.
2. Создаем список L случайных не повторяющихся чисел от 1 до количества элементов.
3. Если индекс элемента входит в список L вызываем функцию генерации числа.
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 01:11  [ТС]
S_el, немного не могу понять. задаем N=2
далее список чисел L=randperm(n,8) - вроде так?
Цитата Сообщение от S_el Посмотреть сообщение
3. Если индекс элемента входит в список L вызываем функцию генерации числа.
а каким образом это реализовать? я до такой степени засиделся,что голова трудно соображает
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.02.2015, 01:39
Цитата Сообщение от toshacolosow Посмотреть сообщение
вроде так?
попробуйте и узнаете

Цитата Сообщение от toshacolosow Посмотреть сообщение
а каким образом это реализовать? я до такой степени засиделся,что голова трудно соображает
Это-то как раз просто:
Matlab M
1
2
3
A=zeros(3,3)
L=[1,2,8]
A(L)=rand()
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 11:07  [ТС]
S_el,
Matlab M
1
2
3
n=2;
    L=randperm(8,n)
    A(L)=rand();
сгенерировал, получил L = два числа
а каким образом заполнить нулями обе этих строки связав номера строк, сгенерированные в L?

Добавлено через 2 часа 14 минут
И можно ли сгенерировать само число N (строк, которые мы хотим заполнить нулями)
Помогите пожалуйста перечитал много функций, не могу подобрать. в большинстве генерируется либо массив числе, либо матрица
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.02.2015, 11:26
Цитата Сообщение от toshacolosow Посмотреть сообщение
Помогите пожалуйста перечитал много функций, не могу подобрать. в большинстве генерируется либо массив числе, либо матрица
Я не понимаю,что от вы хотите сделать.
0
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 11:47  [ТС]
Допустим у меня есть матрица
А= [1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1
...
1 1 1 1 1 1 1 ... 1 1 1
1 1 1 1 1 1 1 ... 1 1 1]
Мне нужно заполнить некоторые из ее строк нулями

соответственно для начала нужно сгенерировать случайное число строк , в которых мы хотим заменить все значения единиц на 0 (но чтобы количество этих строк не превышало 10% от общего количества строк в матрице ) / Например если матрица будет 100*100, то максимальное количество этих строк - 10.

после того, как это число строк выбрано , тоже методом случайного выбора строк заполняем их нулями
Как то так.
0
143 / 143 / 37
Регистрация: 14.12.2013
Сообщений: 221
17.02.2015, 11:49
toshacolosow, а в чем проблема? рандомно генерируете число строк n, затем на основании этого количества строк заполняете массив (массив номеров строк) так же рандомно номерами строк (т.е. рандомное число строк n содержит рандомные номера строк в массиве) и потом на основании этого когда уже все определено меняете эти строки на нули
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
17.02.2015, 11:52
Цитата Сообщение от toshacolosow Посмотреть сообщение
после того, как это число строк выбрано , тоже методом случайного выбора строк заполняем их нулями
И в чем сложность?Принцип тот-же.

Matlab M
1
2
3
d=ones(5,5)
L=[1,3,5]
d(L,:)=0
1
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 16:21  [ТС]
Matlab M
1
2
3
4
d=ones(100,100); %матрица 100*100
n=              %c помощью какой функции сгенерировать число изменяемых строк?
L=randperm(100,n);
d(L,:)=0
Добавлено через 3 минуты
n=randperm(10,1);

Добавлено через 6 минут
Все, получилось, спасибо Вам.
А можно ли как-то пометить, чтобы в выбранном количестве строк не было строк, идущих друг задругом?
например при выборе количества строк 5
не было строк
22,23,56,87,91

Добавлено через 23 минуты
наткнулся на подобную тему, но там удаление повторяющихся символов в строке

Добавлено через 1 час 17 минут
Нигде не могу найти,никто не сталкивался с подобным, возможно ли это сделать?
В большинстве случаев при рассмотрении строк есть лишь операции удаления одинаковых символов. Как сделать здесь не могу придумать
Если после выбора номеров случайных строк
Цитата Сообщение от toshacolosow Посмотреть сообщение
L=randperm(100,n);
создать переменные с некоторыми значениями, а потом рандомно одну из них прибавлять к номеру строки? Хотя толку от этого не будет.

Добавлено через 2 часа 26 минут
Можно каким-то образом из цепочки выбросить рядом стоящие значения, чтобы она укоротилась?
0
143 / 143 / 37
Регистрация: 14.12.2013
Сообщений: 221
17.02.2015, 17:22
Лучший ответ Сообщение было отмечено toshacolosow как решение

Решение

toshacolosow, попробуйте так

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
L = [1 2 3 5 7 8 9 12 13]; %исходный массив
S=[ ];% новый массив
for k=2:2:length(L)%цикл через два
if L(k)-L(k-1) == 1% если разница равна единице
    S(end+1)=L(k-1);% то в новый массив записываем первый элемент, второй отпадает
else% в противной случае пишем оба
    S(end+1)=L(k-1);
    S(end+1)=L(k);
end
end
if rem(length(L),2) ~=0 && L(length(L))-L(length(L)-1)~=1 % проверка последнего элемента, если массив нечетный
    S(end+1)=L(length(L));
end
1
0 / 0 / 0
Регистрация: 12.02.2015
Сообщений: 22
17.02.2015, 18:37  [ТС]
oblomov, Все равно проскакивают подряд идущие

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
d=ones(100,100);
n=randperm(10,1);
L=randperm(100,n);%исходный массив
S=[ ];% новый массив
for k=2:2:length(L)%цикл через два
if L(k)-L(k-1) == 1% если разница равна единице
    S(end+1)=L(k-1);% то в новый массив записываем первый элемент, второй отпадает
else% в противной случае пишем оба
    S(end+1)=L(k-1);
    S(end+1)=L(k);
end
end
if rem(length(L),2) ~=0 && L(length(L))-L(length(L)-1)~=1 % проверка последнего элемента, если массив нечетный
    S(end+1)=L(length(L));
end
d(L,:)=0;
L= 18 , 70, 4, 27, 5, 10, 78
S=18 , 70, 4, 27, 5, 10, 78

Добавлено через 3 минуты
странно, а именно на вашем примере все нормально

Добавлено через 1 минуту
наверное проблема в том, что сгенерированный массив L в моем случае не упорядочен! Сейчас попробую

Добавлено через 2 минуты
Да, причина была в этом!
Огромное Вам спасибо! Вы меня спасли

Добавлено через 6 минут
Рано радовался. почему-то когда увеличил количество элементов матрицы, все вернулось и соседние элементы остались

Добавлено через 7 минут
Да, и с массивом 100*100 тоже через пару-тройку проверок выползает. что же такое
0
143 / 143 / 37
Регистрация: 14.12.2013
Сообщений: 221
18.02.2015, 02:58
toshacolosow, упс, не сразу вас понял
держите

Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
d=ones(100,100);
n=10;
L = randperm(100,n); %скорректированный массив
L=sort(L);
S = L; %исходный массив
m=0;
for k=2:1:length(L)
    if abs(L(k-m)-L(k-1-m)) == 1
            L(k-m)=[ ];
   m=m+1;
   end
end
L=unique(L);
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2015, 02:58
Помогаю со студенческими работами здесь

создание функции в matlab
Создал функцию, сохранили её. function = may_diff(x0,xk,dx,e,dell) x=x0:dx:xk; if e==1 Er=randn(size(x))/dell; % рандомный...

Создание меню MATLAB GUI
Добрый день! Я новичок) Раньше ни с чем подобным дела не имела. Нужно создать хотя бы примитивное меню. Делаю как на картинке во...

Создание анимации вектора в matlab
Всем здравствуйте! Прошу помощи по некоторому вопросу. Есть несколько векторов: а1(x1, y1, z1), a2(x2, y2, z2), ... an(xn, yn, zn). Мне...

Создание самостоятельных приложений в Matlab 7
Добрый день. Подскажите, можно ли создать самостоятельное приложение со своим интерфейсом в Matlab , которое будет работать отдельно от...

Matlab Simulink создание контроллера
Не могу понять как создавать такие вещи. Надо сделать State Controller как на картинке(бледно зелёный на миниатюре), описание работы у...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru