2011-08-08 1 views
0

私は推定に問題があります。arrayfunを呼び出します。パラメータ推定;

私は未知のベクトルV = [v1、...、v4]の値に依存する関数を持っています。 私は参照データYREF = [yref1、...、yrefn]のベクトルも持っています。 ベクトルYを返す関数を書いておきたいと思います(後でlsqnonlinを使って比較するため)。私は "arrayfun"を認識していますが、動作していないようです。

Iは、私は結果に何らかの操作する

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

、範囲から具体的な値を返すサブ関数、[-100、100]を有する:

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

は、これらの機能が動作Yの単一の値に対しては十分ですが、ベクトル全体に対してはそうではありません。将来の比較のために結果を行列に保存する方法は? Yがベクトルの場合は事前 で

おかげでクリス

答えて

0

は、その後、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