Calculando a distância máxima entre os elementos do vetor no MATLAB
-
20-09-2019 - |
Pergunta
Vamos supor que tenhamos um vetor como
x = -1:0.05:1;
ids = randperm(length(x));
x = x(ids(1:20));
Eu gostaria de calcular a distância máxima entre os elementos de x
De alguma maneira idiomática. Seria fácil apenas iterar em todas as combinações possíveis de x
Os elementos, mas sinto que poderia haver uma maneira de fazê-lo com as funções internas do Matlab de uma maneira louca, mas idiomática.
Solução
A respeito
max_dist = max(x) - min(x)
?
Outras dicas
Você quer dizer a diferença entre os elementos maiores e os menores do seu vetor? Se você fizer, algo assim funcionará:
max(x) - min(x)
Se não, então eu entendi mal a pergunta.
Este é um cálculo de distância entre pontos, embora simples, já que você está trabalhando em uma dimensão. Realmente, esse ponto que cai a uma distância máxima em uma dimensão é sempre um dos dois pontos possíveis. Portanto, tudo o que você precisa fazer é pegar o valor mínimo e o valor máximo da lista, e veja o que está mais longe do ponto em questão. Portanto, assumindo que os números em x são números reais, isso funcionará:
xmin = min(x);
xmax = max(x);
maxdistance = max(x - xmin,xmax - x);
Como alternativa, há algum tempo eu coloquei uma ferramenta geral de computação de distância interpoint na troca de arquivos (IPDM). É inteligente o suficiente para problemas especiais simples, como o problema de ponto mais distante. Esta chamada faria isso por você:
D = ipdm(x,'subset','farthest','result','struct');
Obviamente, não será tão eficiente quanto o código simples que escrevi acima, pois é uma ferramenta totalmente geral.
Uhh ... adoraria ter um Matlab em minhas mãos e ainda é de manhã cedo, mas que tal algo como:
max_dist = max(x(2:end) - x(1:end-1));
Não sei se é isso que você está procurando.