Форум программистов, компьютерный форум, киберфорум
Наши страницы

Matlab

Войти
Регистрация
Восстановить пароль
 
qDenisq
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
#1

Как векторизовать этот цикл? - Matlab

05.03.2013, 06:22. Просмотров 601. Ответов 6
Метки нет (Все метки)

Всем привет.

Есть проблема с векторизацией одного цикла в программке, которая создает массив точек, находящихся между 2 прямыми на заданном отрезке. +100500 в карму тому, кто мне поможет, а то я уже голову сломал и не знаю возможно ли это?

Matlab M
1
2
3
4
5
6
7
pdata=[];
data1=[1 1.1; 2 2.2; 3 3.3; 4 4.4; 5 5.5];
data2=[1 3.3; 2 4.8; 3 6.9; 4 10.2; 5 13];
for i=1:(size(data1,1)-1)
    pdata=cat(1, pdata, [ones(floor(data2(i,2))-ceil(data1(i,2))+1,1)*data1(i,1)...
 [ceil(data1(i,2)):1:floor(data2(i,2))]']); 
end
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 06:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как векторизовать этот цикл? (Matlab):

Можно ли векторизовать операцию, избавившись от цикла for? - Matlab
Дамы и Господа! Возникла такая задача. Есть массив Х размерностью (n,m), два массива Y и V размерностью (k,m) и массив Р размерностью...

Как упростить цикл? - Matlab
Добрый день! Есть вот такой код: Lx = 10; Ly = 10; hx = 0.10; hy = 0.10; Nx = Lx/hx; Ny = Ly/hy; Tbf = 0; lamda_fld =...

Как сделать цикл? - Matlab
Есть у меня формулки, которые нужно пересчитать 3000 раз. Для каждой формулы должно быть 3000 своих значений! Как мне это сделать? ...

Как реализовать бесконечный цикл While, но чтобы этот цикл не грузил процессор? - Visual C++
Допустим есть цикл: while (1) { ... } Как сделать так, чтобы бесконечный цикл не грузил процессор. Избавиться от...

Как работает этот цикл? - C#
Всем привет, начал изучать C# купил книгу и застрял на циклах. Ниже пример кода для вывода переменой count при нажатии кнопки. Проблема в...

Как работает этот цикл? - C++
как это работает? выдает k=7, y=270; хотя здравый смысл говорит,что на 1-ой итерации y=70,на 2-ой 720,... int y=6; int k=0; ...

6
Зосима
4888 / 3257 / 308
Регистрация: 02.04.2012
Сообщений: 6,190
Записей в блоге: 15
Завершенные тесты: 1
05.03.2013, 11:45 #2
А что оно должно делать? чтот не очень ясно
1
qDenisq
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
05.03.2013, 12:41  [ТС] #3
Вообще в целом задача состоит в нахождении всех точек с целыми координатами (т.е. [1 3], [2 8], а не [1.3 3]) внутри треугольника с заданными вершинами. В примере я просто немного ее упростил и убрал некоторые моменты для удобства понимания. Все бы ничего, но проблема в том, что мне крайне важна скорость работы этой маленькой программы, поэтому надо по максимуму избавиться от циклов.
0
Зосима
4888 / 3257 / 308
Регистрация: 02.04.2012
Сообщений: 6,190
Записей в блоге: 15
Завершенные тесты: 1
05.03.2013, 13:47 #4
Цитата Сообщение от qDenisq Посмотреть сообщение
убрал некоторые моменты для удобства понимания
И стало совсем ничего не понять объясни словами, как для домохозяйки, как из двух матриц data1 и data2 получается pdata
1
qDenisq
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
05.03.2013, 16:22  [ТС] #5
))) вобщем, data1 - массив точек лежащих на каком-то отрезке, как видно, взятых с шагом 1 по оси х (первый столбец мы взяли за х) С data2 то же самое - только отрезок другой (это даже может быть впринципе и не отрезок, а ломаная или кривая( суть не меняется). потом я просто для каждого х от 1 до 5 в этом случае создаю массив из точек лежащих между отрезками data1 и data2. потом объединяю и получаю один сплошной массив точек, которые лежат между этими двумя отрезками. как-то так))) на рисунке, например, я нахожу все точки в треугольнике и тут data1-массив от АВ, а data2-массив от АВС.
0
Миниатюры
Как векторизовать этот цикл?  
Зосима
4888 / 3257 / 308
Регистрация: 02.04.2012
Сообщений: 6,190
Записей в блоге: 15
Завершенные тесты: 1
07.03.2013, 12:08 #6
Гляди, что набросал Нашел интересную ф-цию inpolygon и вот что вышло:
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear, clc
 
% координаты вершин
x = [0.4 20.1 15.8];
y = [0.9 15.4 20.8];
% замыкаем многоугольник
X = [x x(1)];
Y = [y y(1)];
% массив целых значений координат
[xi yi] = meshgrid(floor(min(x)):ceil(max(x)), floor(min(y)):ceil(max(y)));
IN = inpolygon(xi,yi, X, Y);
 
plot(X,Y,'-b',xi(IN),yi(IN),'or')
grid minor
axis equal
M = [xi(IN) yi(IN)] % матрица с целочисленными кординатами внутри
Как векторизовать этот цикл?

Нетрудно догадаться, что можно указывать не три вершины, а больше
1
qDenisq
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
07.03.2013, 16:10  [ТС] #7
Ты волшебник...спасибо большое)
0
07.03.2013, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2013, 16:10
Привет! Вот еще темы с ответами:

Как работает этот цикл???) - C++
for(int i=0; (s1 = s2)!='\0';i++) Массивы s1 и s2 символьные

Векторизовать размытую линию - Графика и игры
Доброго времени! Собственно сабж. Проблема в том что линия на картинке не чёткая. Из-за антиалиасинга линия получается немного...

Объясните подробно этот цикл - C++
for (int i = 0; i < 6; i++){ cin >> x, a = x; } Что делает этот цикл? каким образом происходит присваивание? зачем мы используем...

Вопрос: что означает этот цикл? - C++
Что означает цикл for (int I=0; w; I++); если 1) w – числовой од-номерный массив, 2) w -- строка; 3) w – массив указателей.


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru