Я написал функцию, которая должна сделать следующее:Matlab - Не получив ожидаемого результата
- Возьмем в качестве входа два набора
- Возьмите расстояние между двумя наборами, используя
pdist2
код которого показаны here. - Это займет расстояние между двумя наборами в начале. Затем для второго установите на каждой итерации значение (i, j) на
0
и вычислите расстояние с этим изменением. An, когда он переходит к следующей итерации, он должен изменить следующее значение местоположения на «0», в то же время вернуть предыдущее значение, которое было установлено на «0», на его исходное значение . - Обратите внимание, что результат от
pdist2
первоначально возвращается как матрица, но для сравнения я суммирую значения матрицы, чтобы использовать их для сравнения.
Исходя из этого, я написал следующую функцию (обратите внимание, что вы можете использовать функцию pdist2.m
по ссылке here):
function m = pixel_minimize_distance(x,y)
sum1=0;
sum2=0;
[r c] = size(y);
d1 = pdist2(x,y);
[r1 c1] = size(d1);
for i=1:r1
for j=1:c1
sum1=sum1+d1(i,j);
end
end
maximum = sum1;
for i=1:r
for j=1:c
o = y(i,j)
y(i,j) = 0;
d2 = pdist2(x,y);
[r2 c2] = size(d2);
for i=1:r2
for j=1:c2
sum2=sum2+d2(i,j);
end
end
if sum2 >= maximum
if o ~= 0
maximum = sum2;
m = o;
end
end
if sum2 <= maximum
maximum = maximum;
end
y(i,j)=o;
end
end
end
Теперь, это то, что я работать в качестве теста:
>> A=[1 2 3; 6 5 4];
>> B=[4 5 3; 7 8 1];
>> pixel_minimize_distance(A,B)
o =
4
o =
4
o =
1
o =
7
o =
7
o =
0
ans =
7
Смотрите ответ здесь 7
(прокрутите вниз, если вы не можете увидеть его), в то время как ожидаемое значение, когда я вычислить это вручную должен быть 3
как SINC e, когда мы установили его на 0
, сумма расстояния будет 142
.
Любая идея, что может быть неправильным в коде? Я думаю, что это было бы в месте установки кода o = y(i,j)
, где o
обозначает оригинальное значение, но на самом деле не могло понять способ решения этого.
Спасибо.
У вас есть 'end', который не имеет соответствующего' for' – ogzd
@ogzd. Я думаю, вы имеете в виду последний «конец», который для функции. Кажется, в моем посте первые несколько строк не отображались, но теперь изменили мой код. Спасибо – Simplicity
Не могли бы вы поместить комментарии в код с '%', так как не совсем ясно, какая часть должна делать то, что. Также попробуйте пройти через код, пока не увидите что-то странное с f10. –