Я пишу инструмент, который создает своего рода справочную таблицу (две), содержащую образцы измерений, а затем я хочу дать себе измерение, проверить внутри справочной таблицы ту, которая является ближайшей, и вернуть мне извлеченную значение. Я хотел бы получить в результате то же значение, которое я передал инструменту вручную.
Допустим, я построил две матрицы, которые являются моими справочными таблицами, содержащими два набора измерений, после того как я определил свою систему координат X,Y
как сетку сетки
x = rand(101); y = rand(101);
[X,Y] = meshgrid(x,y);
для каждой точки (Xi,Yi)
соответствует пара измерений (Ai,Bi)
A = rand(101); B = rand(101);
Таким образом, я получаю что-то, что отображает мои измерения, как это, для A и B
Теперь я хотел бы дать направление, в котором вручную пересчитать измерения, сказал x = rand(1)
и y = rand(1)
, которым будет соответствовать пара a,b
, которые необязательно равны точке карты, например это,
сравните эти значения со значениями внутри A,B
и распечатайте их. Теоретически, если пара a,b
точно соответствует конкретному элементу A,B
, это означает, что я могу извлечь соответствующую точку на карте.
Я делаю нечто подобное
row = (size(A,1)+1)/2;
col = (size(B,2)+1)/2;
[~,m] = min(abs(A(row,:)-a));
[~,n] = min(abs(B(:,col)-b));
x_estimated = X(n,m);
y_estimated = Y(n,m);
пытается извлечь точку моей карты, ближайшую к набору значений, которые я положил вручную, в результате чего
Как видите, существует ошибка выборки между фактической точкой и извлеченной точкой из этого кода. Мне нужно, чтобы расчетная точка (светло-зеленая) была равна точке, вычисленной «вручную» (розовым цветом).
Поэтому я думаю, что мне нужно своего рода взвешенное извлечение, а не то, что проверяет ближайший набор значений.
Существует ли что-то похожее в Matlab (в основном интерполяция), которое делает это автоматически? Если нет, можете ли вы предложить мне простой способ извлечь эти значения?
EDIT :
как предложено, я попытался с interp2
, как это
x_estimation = interp2(A,B,X,a,b);
y_estimation = interp2(A,B,Y,a,b);
но выдает ошибку компиляции для "недопустимого MESHGRID", поэтому я попытался с scatteredInterpolant
вот так
F_x = scatteredInterpolant(X(:),Y(:),A);
x_estimation = F_x(a,b);
но дает мне совершенно неправильное значение
EDIT2
Итак, я пытаюсь прояснить свою проблему.
Я определяю X
и Y
как свою систему координат, строящую сетку, в которой все, что я вычисляю, находится внутри этой сетки.
Затем я выполняю сначала полные вычислительные вычисления некоторым образом A
и B
, которые дают мне измерение в одном из двух направлений. Поэтому мне нужно, чтобы они оба имели информацию в двух направлениях.
Пока у меня внутри этих двух матриц выборочные измерения. Затем я даю от руки фиксированное положение, в котором выполняется измерение (которое все еще находится внутри моей сетки, но в произвольном положении), заново вычисляю измерения, получая два скаляра a
и b
и извлекаю из матриц A
и B
ближайший элемент к паре a-b
. Предполагается, что результат будет таким же, как тот, который я дал вручную в начале процедуры, с очень маленькой ошибкой (настолько малой, насколько это возможно, в надежде 0)