проблемы с базовой арифметикой в ​​​​функции (Matlab)

Я определил действительно базовую функцию в Matlab. Он не принимает никаких входных данных и возвращает массив из 10 чисел с плавающей запятой. У меня проблема в том, что когда я запускаю функцию для возврата массива, который я хочу, я получаю неверные значения, однако, когда я подставляю значение и просто распечатываю значение из функции, я получаю правильный ответ?! Я разместил образцы из кода ниже:

% Calculate the terms in our expression
FirstTerm  = sin(Alpha)*(atan(x+d)-atan(x-d));
SecondTerm = cos(Alpha)*0.5*log(((x+d).^2+h.^2)/((x-d).^2+h.^2));

% Combine and return result
Result = 2 * (FirstTerm - SecondTerm)

FirstTermTemp  = sin(Alpha)*(atan(-8+d)-atan(-8-d));
SecondTermTemp = cos(Alpha)*0.5*log(((-8+d).^2+h.^2)/((-8-d).^2+h.^2));
ResultTemp = 2 * (FirstTermTemp - SecondTermTemp)

Массив, который я хочу вычислить, начинается с -8, поэтому результаты должны совпадать. Кто-нибудь знает, почему они не будут? Ура Джек


person JMzance    schedule 14.10.2013    source источник
comment
Можете ли вы показать, что это за числа, а также то, что вы ожидаете от них? У меня такое чувство, что это недоразумение с точностью с плавающей запятой   -  person Dan    schedule 14.10.2013
comment
Да, конечно, я ожидаю (и я проверил это с помощью mathematica/maple/вручную), чтобы получить 0,0979, что я получаю от запуска, где я использую -8 напрямую, но когда я запускаю массив, я получаю 0,0181   -  person JMzance    schedule 14.10.2013
comment
Да, но что вы используете для alpha, d и h? Пожалуйста, предоставьте все, чтобы проблема могла быть воспроизведена   -  person Dan    schedule 14.10.2013
comment
Альфа = 45*пи/180; д = 0,25; ч = 1,0;   -  person JMzance    schedule 14.10.2013
comment
Используемый массив: x=-8.0:2.0:8.0   -  person JMzance    schedule 14.10.2013


Ответы (1)


Вы остановились на . перед /

% //Calculate the terms in our expression
FirstTerm  = sin(Alpha)*(atan(x+d)-atan(x-d));
SecondTerm = cos(Alpha)*0.5*log(((x+d).^2+h.^2)./((x-d).^2+h.^2));
% //Combine and return result
Result = 2 * (FirstTerm - SecondTerm)

Result =

 Columns 1 through 7:

   0.097944   0.133866   0.208270   0.425797   0.692904  -0.140347  -0.124798

 Columns 8 and 9:

  -0.095581  -0.076166
person Dan    schedule 14.10.2013