2013-09-18 2 views
0

Я хотел бы написать функцию, которая получает матрицу 2x1, совпадающую с x и y. (Без скалярных входов) Возможно ли это? Я попытался, как показано ниже:вектор как вход функции в matlab?

function [d] = dist(A,B) 

d=sqrt(((A(1)-B(1))^2+(A(2)-B(2))^2)); 
end 

А и В 2 * 1 матрицы. как положить вектор в качестве функции?

+0

Ваш код выглядит ОК. Разве это не работает для вас? Не уверен, что я понимаю ваш вопрос. Как вы называете свою функцию 'dist'? – Floris

+0

Немного непонятно, что вы спрашиваете, возможно, вы можете отредактировать свой вопрос и добавить небольшой пример с числами? – Dan

ответ

1

Если вы хотите передать два вектора (поскольку у вас есть A и B, каждый из которых имеет два элемента) в качестве одного параметра, вы можете либо создать матрицу 2x2, либо вектор 4x1 для прохождения. Или вы можете принять решение массив ячеек (что дает вам немного большую гибкость). Пример:

A = [1 2]; 
B = [4 5]; 

C = [A; B]; 

d = myDistance(C); 

function m = myDistance(x) 
    dxy = diff(x); % do both x(2,1) - x(1,1) and x(2,2) - x(1,2) in one operation 
    m = sqrt(sum(dxy.^2)); 

В качестве альтернативы, проходя A и B как два отдельных параметров (что делает много смысла из читаемости) должны работать так, как вы описали в своем вопросе ...

1

У меня есть разные интерпретация вашего вопроса, я думаю, вы спрашиваете, как заставить вашу функцию выводить все расстояния для двух списков (x, y) коордов? Если да, то как это:

function [d] = Dist(A,B) 
    d=sqrt(((A(:,1)-B(:,1)).^2+(A(:,2)-B(:,2)).^2)); 
end 

Таким образом, вы должны изменить свой ^ от матричной операции к операции поэлементно вектора .^, а затем вы должны получить доступ к первой колонке, но все строки, т.е. (1,:)

например

A = [0,0; 
    0,1; 
    1,1] 
B = [1,1; 
    1,1; 
    1,1] 

Dist(A,B) 

ans = 

    1.41421 
    1.00000 
    0.00000 

Кстати можно обметать эту функцию, как это и до сих пор получить тот же результат:

function [d] = Dist(A,B) 
    d=sqrt(sum((A-B).^2,2)); 
end 
+0

+1 для компактной второй формулировки, которая будет работать, когда 'A' ​​и' B' являются матрицами. Согласитесь, что этот вопрос был открыт для множественных интерпретаций, и ваш ответ полезен для альтернативной интерпретации. – Floris

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