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

Нахождение индекса элемента ближайшего по значению от заданного с переменными условиями

28.10.2018, 13:08. Просмотров 262. Ответов 4
Метки нет (Все метки)

Здравствуйте уважаемые участники,

не раз помогали, надеюсь и в этот раз получится, ибо сам пару дней ломаю голову, но решения нет либо работает все как-то криво.
Задача из области акустики - но вопрос мой как ее "запрограммировать".

Даны векторы x,y, границы которых, как и шаг может быть задан и с другими параметрами. Далее создается "Сетка" с помощью meshgrid.

Имеется точка S с заданными координатами (x,y), далее рассчитывается расстояние R от точки S ко всем точкам "сетки".

Имеется другая матрица такой же размерности где записана некая величина K, которая зависит от (x, y) и меняется по определенному закону по двум этим координатам. В простом случае величина K является, так сказать, константой независящей от (x, y).

В общем цель такая, чтобы найти произведение K*R.

Но поскольку K меняется, произведение K*R можно выразить как сумму к1*r1 + к2*r2 и тд...Для лучшего понимания прошу взглянуть на картинку.

В данный момент пусть необходимо найти K*R для точки М1. Прямая S-М1 поделена на одинаковые отрезки - маленькие отрезки r (прямая бирюзового цвета) , которые можно найти зная угол Angle. В данном случае искомое произведение можно выразить как r * (к1 + к2 + ... кn), где n = R/step. Величина к1 "лежит" в точке S1, которая в данном случае не попадает на "сетку".

Зная значение r и сравнивая его со значениями "сверху и снизу" в точках S1 и S2, нужно найти индекс элемента (в данном случае точки S1 или S2) который имеет минимальное отклонение от r. Далее зная индексы, из матрицы K находим значение в данной точки, которое и будет к1. Далее вдоль прямой ситуация повторяется и для следующей точки и в конечном итоге находится произведение r * (к1 + к2 + ... кn).


Matlab M
1
2
3
4
5
6
7
8
9
step = 0.1;
x = 0: step : 10;
y = 0 : step : 9;
[X, Y] = meshgrid(x, y);
 
R = sqrt((X - x_s).^2 + (Y - y_s).^2);
 
Angle  = acosd((X - x_s))./ R);
r = step./cosd(Angle);
Спасибо! Очень надеюсь на вашу помощь.
0
Миниатюры
Нахождение индекса элемента ближайшего по значению от заданного с переменными условиями  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2018, 13:08
Ответы с готовыми решениями:

Найти номер строки элемента матрицы, ближайшего по значению к среднему арифметическому значению элементов этой матрицы
Двумерный массив. Дана прямоугольная матрица А(n,m). Найти номер строки элемента матрицы,...

Номер элемента массива ближайшего к среднеарифметическому его значению и разницу элементов
Вот я написал програмний код но немогу сделать вот это задание : номер элемента массива ближайшего...

В одномерном массиве найти среднеарифметическое и номер элемента, ближайшего к среднему по значению
В одномерном массиве найти среднеарифметическое и номер элемента, ближайшего к среднему по значению.

Нахождение элемента, ближайшего к среднему в массиве
нужно найти элемент, ближайший к среднему в массиве, помогите найти ошибку #include <conio.h>...

Найти среднее значение элементов и номер элемента массива, ближайшего к среднему по значению
В одномерном массиве, состоящем из n вещественных элементов, найти среднее значение всех элементов...

4
Centurio
Модератор
787 / 735 / 207
Регистрация: 13.09.2015
Сообщений: 2,619
28.10.2018, 19:42 2
Не очень понял, что вы хотите сделать. Не ясно мне, зачем такие сложности. Очевидно же, что все значения k одинаковы и равны k=step/cosd(Angle)
Если вам нужны координаты точек пересечения вектора и линий сетки, то координата х меняется с шагом step, а координата y меняется с шагом step*tand(Angle)
0
acstc
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 85
29.10.2018, 16:44  [ТС] 3
Centurio, Спасибо за сообщение и желание помочь

Извините, наверное со стороны это действительно не очень понятно.

Я обновил картинку (на старой была ошибка)

В данном случае k это отдельная матрица, величины которой распределены по определенному закону и зависят от x,y.

Это величину r для каждой из точек в матрице R можно найти как r = step/cosd(Angle). По сути это расстояние. Как вы заметили координаты точек пересечения вектора и линий сетки по оси x это step а по оси y это step*tand(Angle) . Но в данном случае как видно из картинки значение координаты пересечения по y попадает так сказать между сетки и вот мне нужно определить индекс (i,j) ячейки (верхней или нижней - в данном случае ячейки S1 и S2, у которых только y координата разная) в матрице расстояний R, которая по значению имеет наименьшее отклонение от значения r.

Далее я нахожу эти индексы и из матрицы K нахожу значение которое соответствует найденным индексам и далее использую его по своему назначению.

Вот и вся задача! Но нужно это сделать для каждой из точек в матрице R n раз, где n для каждой из точек это R (расстояние которое записано в матрице R для каждой из точек в соответствующей "ячейке") / step.


Я надеюсь более понятно описал задачу. Если что-то не понятно прошу сообщить, поскольку очень заинтересован в получении помощи.
0
Миниатюры
Нахождение индекса элемента ближайшего по значению от заданного с переменными условиями  
Centurio
Модератор
787 / 735 / 207
Регистрация: 13.09.2015
Сообщений: 2,619
29.10.2018, 17:48 4
Координаты точек М заданы отдельной матрицей, и их координаты не совпадают с координатами узлов сетки? Размер матрицы К совпадает с размерами матриц координат узлов или матрицы с координатами точек М?
0
acstc
0 / 0 / 0
Регистрация: 10.02.2016
Сообщений: 85
29.10.2018, 20:29  [ТС] 5
Centurio,

По сути изначально формируется сетка для всех вычислений следующим образом, x и y расстояние в [m]. (Представьте себе поле конкретизированное с шагом step):
Matlab M
1
2
3
4
step = 0.1;
x = 0: step : 10;
y = 0 : step : 9;
[X, Y] = meshgrid(x, y);
далее задаются координаты точки S (x и y - по сути это также координаты в [m])

Далее рассчитывается расстояние от точки S ко всем точкам М "сетки" следующим образом
Matlab M
1
2
3
x_s = 1;
y_s = 5;
R = sqrt((X - x_s).^2 + (Y - y_s).^2);
Матрица R содержит точки М которые соответственно совпадают с координатами узлов сетки, поскольку были рассчитаны в этих самых узлах. Так как размерность R это length(y) на length(x), соответственно имеем всего length(y) * length(x) точек М

Матрица K имеет ту же размерность что и матрица R.

Далее для каждой точки М (на рисунке для примера начнем с точки M1) рассчитываем r и далее как я уже и писал

Цитата Сообщение от acstc Посмотреть сообщение
Это величину r для каждой из точек в матрице R можно найти как r = step/cosd(Angle). По сути это расстояние. Как вы заметили координаты точек пересечения вектора и линий сетки по оси x это step а по оси y это step*tand(Angle) . Но в данном случае как видно из картинки значение координаты пересечения по y попадает так сказать между сетки и вот мне нужно определить индекс (i,j) ячейки (верхней или нижней - в данном случае ячейки S1 и S2, у которых только y координата разная) в матрице расстояний R, которая по значению имеет наименьшее отклонение от значения r.
Далее я нахожу эти индексы и из матрицы K нахожу значение которое соответствует найденным индексам и далее использую его по своему назначению.
Вот и вся задача! Но нужно это сделать для каждой из точек в матрице R n раз, где n для каждой из точек это R (расстояние которое записано в матрице R для каждой из точек в соответствующей "ячейке") / step.
0
29.10.2018, 20:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.10.2018, 20:29

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

Нахождение индекса элемента массива на c++
Помогите пожалуйста написать программу с таким заданием: В файле задан массив, состоящий из n...

Найти номер элемента массива Y ближайшего по значению к наименьшему элементу массива X
Найти номер элемента массива Y ближайшего по значению к наименьшему элементу массива X. ...


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

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

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