Matlab интерполирует значение из таблицы поиска - PullRequest
0 голосов
/ 10 января 2019

Я пишу инструмент, который создает своего рода справочную таблицу (две), содержащую образцы измерений, а затем я хочу дать себе измерение, проверить внутри справочной таблицы ту, которая является ближайшей, и вернуть мне извлеченную значение. Я хотел бы получить в результате то же значение, которое я передал инструменту вручную. Допустим, я построил две матрицы, которые являются моими справочными таблицами, содержащими два набора измерений, после того как я определил свою систему координат X,Y как сетку сетки

x = rand(101); y = rand(101);
[X,Y] = meshgrid(x,y);

enter image description here

для каждой точки (Xi,Yi) соответствует пара измерений (Ai,Bi)

A = rand(101); B = rand(101);

Таким образом, я получаю что-то, что отображает мои измерения, как это, для A и B

enter image description here

Теперь я хотел бы дать направление, в котором вручную пересчитать измерения, сказал x = rand(1) и y = rand(1), которым будет соответствовать пара a,b, которые необязательно равны точке карты, например это,

enter image description here

сравните эти значения со значениями внутри 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);

пытается извлечь точку моей карты, ближайшую к набору значений, которые я положил вручную, в результате чего enter image description here

Как видите, существует ошибка выборки между фактической точкой и извлеченной точкой из этого кода. Мне нужно, чтобы расчетная точка (светло-зеленая) была равна точке, вычисленной «вручную» (розовым цветом).

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

Существует ли что-то похожее в 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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...