вектор как вывод для функции Matlab

Я новичок в Матлабе.

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

function [H] = jacobH(x1,x2)
H = [ -(2*x1(1,:,:) - 2*x2(1,:,:))/(8*pi*((x1(1,:,:) - x2(1,:,:))^2 + (x1(3,:,:) - x2(3,:,:))^2)^(3/2)), 0,
      -(2*x1(3,:,:) - 2*x2(3,:,:))/(8*pi*((x1(1,:,:) - x2(1,:,:))^2 + (x1(3,:,:) - x2(3,:,:))^2)^(3/2)), 0];
end

Якобиан в основном дифференцирует 1/(4*pi*sqrt((x1-x2)^2+(y1-y2)^2)) относительно x,y

Например, если я передаю jacobH(x1(:,1,1), x2(:,1,1)) тогда я должен получить H как матрицу 1x4 с [value1, 0, value2, 0]. value1 и value2 различаются для разных входов.

Но я получаю только одно значение. Я не знаю, где я ошибся.

Я искал похожие вопросы, но ни один из них не имеет отношения к моей проблеме.

Кроме того, есть ли более эффективный способ сделать это?

Любая помощь приветствуется!


person nv-2008    schedule 08.02.2015    source источник
comment
Вы должны написать свою собственную функцию? Потому что, если у вас есть набор инструментов для работы с символами, вы могли бы также использовать встроенную функцию jacobian, которая дает вам красивое символьное выражение (которое вы, конечно, можете преобразовать в числовое, если хотите).   -  person Wouter Kuijsters    schedule 08.02.2015
comment
Вы хотите сказать, что получаете H как одно значение, а не как матрицу 1x4?   -  person articuno    schedule 08.02.2015
comment
@WouterKuijsters спасибо за предложение. Я попробую это.   -  person nv-2008    schedule 08.02.2015
comment
@articuno да, когда я пытаюсь вызвать функцию в другой программе, я получаю одно значение   -  person nv-2008    schedule 08.02.2015
comment
просто чтобы уточнить, под тем же значением я имею в виду, что я получаю [value1, 0, value1,0] вместо [value1,0, value2,0]   -  person nv-2008    schedule 08.02.2015


Ответы (1)


С вашей функцией я получаю правильное поведение, когда пытаюсь:

x1 = ones(3,3,3);
x2 = ones(3,3,3);    
jacobH(x1(:,1,1), x2(:,1,1))

ans =

   NaN     0   NaN     0
person Community    schedule 08.02.2015
comment
@joker спасибо за ответ. Однако я получаю результат с одним значением, когда пытаюсь вызвать свою функцию в другом коде Matlab. - person nv-2008; 08.02.2015
comment
Как выглядят входы? Вы можете опубликовать x1 и x2 ? - person ; 08.02.2015
comment
один выборочный набор значений для x1, x2: x1 = [0,0.5,1,.5;1,0.5,2,.5]' ; x2 = [3, 0,7, 4, 0,7; 3,5, 0,7, 4,75, 0,75]' Здесь обе матрицы x1,x2 являются матрицами 4x2x1. Но я получаю [0,0031 0 0,0031 0], то есть то же значение в H, то есть [значение1, 0, значение1, 0] вместо [значение1,0, значение2,0] - person nv-2008; 08.02.2015
comment
хорошо, в вашей формуле вы в основном вычисляете -2(x1(1)-x2(1))/d и -2(x1(3)-x2(3))/d. В вашем примере, как x1(1)-x2(1) = x1(3)-x2(3) = -3, совершенно логично получить одно и то же значение для двух величин. - person ; 08.02.2015
comment
спасибо за это полезное понимание! Я не думал об этом таким образом. Кроме того, есть ли более элегантный способ вычисления этого якобиана? - person nv-2008; 08.02.2015