2017-01-20 3 views
0

Im пытается написать код в Matlab, чтобы рассчитать вопрос типа области влияния. Это Exert из моих данных (Взвешивание, х-Корд, у-коорд):Суммирующие значения на основе площади в Matlab

M =

15072.00 486.00 -292 
13269.00 486.00 -292 
12843.00 414.00 -267 
10969.00 496.00 -287 
9907.00 411.00 -274 
9718.00 440.00 -265 
9233.00 446.00 -253 
9138.00 462.00 -275 
8830.00 496.00 -257 
8632.00 432.00 -253 

R =

-13891.00 452.00 -398 
-13471.00 461.00 -356 
-12035.00 492.00 -329 
-11309.00 413.00 -353 
-11079.00 467.00 -375 
-10659.00 493.00 -333 
-10643.00 495.00 -338 
-10121.00 455.00 -346 
-9795.00 456.00 -367 
-8927.00 485.00 -361 
-8765.00 467.00 -351 

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

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

Я также подумал о назначении интенсивности цвета для каждого круга и наложения на них, но я не знаю, как изменить интенсивность цвета на основе значения, это моя попытка до сих пор (я хотел бы иметь визуальный результат):

function [] = Influence() 

    M = xlsread('MR.xlsx','A4:C310'); 
    R = xlsread('MR.xlsx','E4:G368'); 
    %these are my values around 300 coordinates 

    %M are negative values and R positive, I want to see which are dominant in their regions 

    hold on 
    scatter(M(:,2),M(:,3),3000,'b','filled') 
    scatter(R(:,2),R(:,3),3000,'y','filled') 
    axis([350 650 -450 -200]) 
    hold off 
end 

%had to use a scalar of 3000 for some reason as it isnt correlated to the graph size 

Я бы признателен за любые идеи/решения спасибо

This is the same but with ca. 2000 data points

ответ

0

Как об этом:

r_influence = 30;          % radius of influence 
r = @(p,A) sqrt((p(1)-A(:,2)).^2 + (p(2)-A(:,3)).^2); % distance 
wsum = @(p,A) sum(A(find(r(p,A)<=r_influence),1)); % sum where distance less than roi 
% compute sum on a grid 
xrange = linspace(350,550,201); 
yrange = linspace(-200,-450,201); 
[XY,YX] = meshgrid(xrange,yrange); 
map_M = arrayfun(@(p1,p2) wsum([p1,p2],M),XY,YX); 
map_R = arrayfun(@(p1,p2) wsum([p1,p2],R),XY,YX); 

figure(1); 
clf; 
imagesc(xrange,yrange,map_M + map_R); 
colorbar; 

дает картину так:

Resulting figure

Это то, что вы ищете?

+0

Позвольте мне попробовать его на полном наборе данных, как вы ввели изображение? Это выглядит действительно хорошо! – JLenz

+0

Картинка - это скриншот от Matlab, я использовал кнопку вставки изображения из SO (это шестой, горячая клавиша - Ctrl + G), чтобы добавить его в сообщение ... – Florian

+0

Любые идеи, почему нейтральный цвет получил направление в направлении желтый ? Похоже на то, как быстро вы это сделали. – JLenz

Смежные вопросы