вызов arrayfun;оценка параметров; - PullRequest
0 голосов
/ 08 августа 2011

У меня проблема с оценкой.

У меня есть функция, которая зависит от значений неизвестного вектора V = [v1,…, v4]. У меня также есть вектор справочных данных YREF = [yref1,…, yrefn]. Я хотел бы написать функцию, которая возвращает вектор Y (чтобы сравнить его позже, скажем, используя lsqnonlin). Я знаю о «arrayfun», но, похоже, он не работает.

У меня есть подфункция, которая возвращает конкретное значение из диапазона [-100, 100],

 %--------------------------------------------------------------------------
 function y = SubFunction(Y, V)
  y = fzero(@(x) v(1).*sinh(x./v(2)) + v(3).*x - Y, [-100 100]);
 end
 %--------------------------------------------------------------------------

затем я делаю некоторые операции с результатами:

 %--------------------------------------------------------------------------
 function y = SomeFunction(Y,V)
  temp = SubFunction (Y,V);
  y = temp + v(4).*Y;
 end
 %--------------------------------------------------------------------------

Эти функции хорошо работают для одного значения Y, но не для всего вектора. Как сохранить результаты в матрицу для будущего сравнения?

Заранее спасибо Chris

1 Ответ

0 голосов
/ 08 августа 2011

Если Y является вектором, то анонимная функция, определенная в качестве аргумента для fzero, возвращает вектор, а не скаляр.

Вы можете решить это с помощью цикла (обратите внимание на Y(k) внутри определения анонимной функции):

 function y = SubFunction(Y, v)
     y = zeros (size(Y));
     for k = 1 : length (Y)
         y(k) = fzero(@(x) v(1).*sinh(x./v(2)) + v(3).*x - Y(k), [-100 100]);
     end
 end
...