Форум программистов, компьютерный форум, киберфорум
Наши страницы
Matlab
Войти
Регистрация
Восстановить пароль
 
qDenisq
0 / 0 / 0
Регистрация: 05.03.2013
Сообщений: 10
#1

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

05.03.2013, 06:22. Просмотров 631. Ответов 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

http://www.cyberforum.ru/matlab/thread1919625.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2013, 06:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как векторизовать этот цикл? (Matlab):

Как этот график можно аппроксимировать
А можете подсказать, как этот график можно апроксимировать?

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

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

Как составить правильный цикл
Друзья! Помогите, пожалуйста. В звуковом файле производится дискретизация...

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

6
Зосима
4915 / 3284 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 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
Зосима
4915 / 3284 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 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
Миниатюры
Как векторизовать этот цикл?  
Зосима
4915 / 3284 / 308
Регистрация: 02.04.2012
Сообщений: 6,191
Записей в блоге: 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
Привет! Вот еще темы с решениями:

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

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

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

расскажите как работает этот цикл?
for (i = 0; i < n; i++) { min = 0; max = 0; for (j = 1; j < m; j++) ...


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

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

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