Решите функцию определения дальности звука с помощью fsolve в Matlab

Я пытаюсь решить проблему дальности звука, описанную в этой ссылке:

http://en.wikipedia.org/wiki/Sound_ranging#cite_note-old-5

У меня есть такая функция Matlab:

function [f]=equation1(x)
c = 330 ;%speed of sound meters per second 
% unknown variable : 
% r1 => x(1) 
% theta => x(2)

time2 = 0.455; % Microphone 1 to Microphone 2 time delay
time3 = 0.606; % Microphone 1 to Microphone 3 time delay
% gives : 
r2 = 150 %time2*c;
r3 = 200 %time3*c; 

r4 = 1267.9; % Distance from Microphone 2 to Microphone 3
r5 = 499.1; % Distance from Microphone 1 to Microphone 3

phi = 16.177; % Angle between Microphone 1 and Microphone 2 measured from Microphone 3

f(1)= -(x(1) + r2)^2 + (x(1)+r3)^2 +r4^2 -2*(x(1)+r3)*r4*cosd(x(2));
f(2)= - x(1)^2  + (x(1)+r3)^2  + r5^2 - 2*(x(1)+r3)*r5*cosd(x(2)-phi);
end

Когда я запускаю [x,feval]=fsolve(@equation1,[100 10]), код возвращает результаты x= 581.4332 -31.8492. Но в примере r1 это 1621 метр. Я не вижу своей ошибки в этой программе.


person user3646248    schedule 20.04.2015    source источник
comment
Не могли бы вы предоставить дополнительную информацию о том, из какой части статьи вы берете свои уравнения?   -  person Buck Thorn    schedule 20.04.2015
comment
чуть ниже рисунка 2: Пример проблемы с расположением артиллерии. ссылка и ссылка   -  person user3646248    schedule 20.04.2015


Ответы (1)


Вы поменяли местами значения r4 и r5, это должно быть:

r4 = 499.1; % Distance from Microphone 2 to Microphone 3
r5 = 1267.9; % Distance from Microphone 1 to Microphone 3

Кроме того, консоль возвращает значение feval, а не x. С правильными значениями r4 и r5 я отобразил правильный ответ следующим образом:

[x,feval]=fsolve(@equation1,[100 10]);
disp(x);

который выводит

1.0e+03 *

1.6230    0.0764

как и ожидалось.

person MattG    schedule 20.04.2015