2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2
 
 Re: Комбинации элементов - перебрать по 3
Сообщение18.11.2014, 21:19 
Заслуженный участник
Аватара пользователя


18/01/13
12065
Казань
Странная задача. У плоскости две нормали, одна направлена "вверх", другая - "вниз". Если только обе не горизонтальны. Из каких соображений выбираете одну? На знак влияет порядок векторов, но ведь вы выбрали его произвольно (при организации цикла). Подозреваю, что вам нужна не положительность угла, а то, чтобы он не оказался равным $\pi/2$, а то тангенса не найдете.

 Профиль  
                  
 
 Re: Комбинации элементов - перебрать по 3
Сообщение18.11.2014, 21:22 
Заслуженный участник


09/05/12
25179
d_integral в сообщении #932950 писал(а):
Вообще, если поставить не до 232 цикл, а меньше, то оно считает. И даже выдает значения, и, возможно, верные. Просто очень уж долго.
"Долго" - это сколько?

И, да, Nemiroff совершенно прав: первое, что тут нужно сделать - избавиться от структур и начать использовать векторные операции.

Кроме этого, было бы неплохо увидеть, что, собственно, Вы хотите получить (не в виде кода, а какой-то более нормальной формулировки). Вектор нормали к плоскости у Вас может получиться направленным и вверх, и вниз, это определяется только порядком обхода точек, так что условие какое-то совсем странное.

 Профиль  
                  
 
 Re: Комбинации элементов - перебрать по 3 [Matlab]
Сообщение20.11.2014, 12:17 


14/07/14
36
Москва
Хочу получить примерно следующее: частицы проходят через среду, вероятность взаимодействия оценивается по экспоненте, и мне нужно посчитать, какое расстояние они будут проходить с разными направлениями. То есть высоту (толщину) я делю на косинус угла. Для этого мне нужны косинусы всех возможных углов, которые могут составлять векторы нормали, проведенные к плоскостям, в которых попадают как минимум три точки из данного массива. (Такой критерий, меня интересуют вот только эти направления)

В общем, пока как-то так:

код: [ скачать ] [ спрятать ]
Используется синтаксис Matlab M
m = 1;
for i1 = 1:230
    for i2 = (i1+1):231
        R12 = (HyM(1,i1)-HyM(1,i2))^2 + (HyM(2,i1)-HyM(2,i2))^2 + (HyM(3,i1)-HyM(3,i2))^2;
        if R12 >100
        for i3 = (i2+1):232
            R23 = (HyM(1,i3)-HyM(1,i2))^2 + (HyM(2,i3)-HyM(2,i2))^2 + (HyM(3,i3)-HyM(3,i2))^2;
            R13 = (HyM(1,i1)-HyM(1,i3))^2 + (HyM(2,i1)-HyM(2,i3))^2 + (HyM(3,i1)-HyM(3,i3))^2;
            if  R23>100 && R13>100
Norm3 = (HyM(1,i2) - HyM(1,i1))*(HyM(2,i3) - HyM(2,i1)) - (HyM(2,i2) - HyM(2,i1))*(HyM(1,i3) - HyM(1,i1));
Norm1 = (HyM(2,i2) - HyM(2,i1))*(HyM(3,i3) - HyM(3,i1)) - (HyM(2,i3) - HyM(2,i1))*(HyM(3,i2) - HyM(3,i1));
Norm2 = -(HyM(1,i2) - HyM(1,i1))*(HyM(3,i3) - HyM(3,i1)) + (HyM(1,i3) - HyM(1,i1))*(HyM(3,i2) - HyM(3,i1));
                    coss = abs(Norm3)/(Norm1^2 + Norm2^2 + Norm3^2)^0.5;
                    dist(m) = 3000/coss;
                    teta(m) = 180/3.14*acos(coss);
                    m = m+1;

            end
        end
        end
    end
end
 


Мой лептоп, конечно, не самая мощная машина, но считает он такое где-то с полчаса..

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

 Профиль  
                  
 
 Re: Комбинации элементов - перебрать по 3 [Matlab]
Сообщение21.11.2014, 00:11 
Заслуженный участник


09/05/12
25179
d_integral в сообщении #933743 писал(а):
Хочу получить примерно следующее: частицы проходят через среду, вероятность взаимодействия оценивается по экспоненте, и мне нужно посчитать, какое расстояние они будут проходить с разными направлениями.
В общем, Вы пытаетесь решать что-то вроде уравнения переноса излучения в среде с чистым поглощением, только, кхм... несколько странным способом. Подозреваю, что если написать полную математическую формулировку задачи, то все можно будет сделать несколько проще.

d_integral в сообщении #933743 писал(а):
Мой лептоп, конечно, не самая мощная машина, но считает он такое где-то с полчаса..
А зачем Вы используете MATLAB? В том виде, в которым Вы это делаете, никаких преимуществ не появляется, а совершенно аналогичная программа на любом компилируемом языке общего назначения будет работать на порядки быстрее (попробовал написать нечто подобное, конечно, со случайными данными - 0.4 секунды).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group