特定の収益率が与えられた場合、matlabが変数「y」(行列の乗算に使用される)を解決できる問題(Excelの「ゴールシーク」と考えてください)を解決しようとしています。
私はfgoalattainを使ってみました(私はそれを理解していません)そして解決します
これは、基本的にいくつかの配列を一緒に追加して、y が double のキャッシュフローを作成する関数です。ppam_gen は *1 行列です。other_tot は *1 行列です。down_pmt は double です。
function ansirr = cirr(y)
cf_gen_oth = y*ppam_gen + oth_tot
dp = [-down_pmt]
cashflow = [dp;cf_gen_oth]
ansirr = irr(cashflow)
%ansirr = irr([dp; y*ppam_gen + oth_tot])
end
x = fgoalattain(@cirr,0.001,.15,abs(.15))
動作しない場合、次のエラーが表示されます。
Error using roots (line 28)
Input to ROOTS must not contain NaN or Inf.
Error in irr (line 134)
coeff = roots(fliplr(cf(:,loop)')); % Find roots of polynomial
Error in ppa_model/cirr (line 139)
ansirr = irr(cashflow)
Error in goalcon (line 26)
f = feval(funfcn{3},x,varargin{:});
Error in
fgoalattain>@(y,varargin)feval(cfun{3},y,neqgoals,funfcn,confcn,WEIGHT,GOAL,x,errCheck,varargin{:})
(line 473)
cfun{3} = @(y,varargin)
feval(cfun{3},y,neqgoals,funfcn,confcn,WEIGHT,GOAL,x,errCheck,varargin{:});
Error in nlconst (line 746)
[nctmp,nceqtmp] = feval(confcn{3},x,varargin{:});
Error in fgoalattain (line 519)
[xnew,ATTAINFACTOR,LAMBDA,EXITFLAG,OUTPUT]=...
Error in ppa_model (line 152)
r = fgoalattain(@cirr,0.001,.15,abs(.15))
シンボリック ツールボックスの使用も機能しません。
syms y
solve(irr([-down_pmt ; y*ppam_gen + oth_tot]) == 0.15)
エラーをスローします:
Error using assignin
Attempt to add "y" to a static workspace.
See MATLAB Programming, Restrictions on Assigning to Variables for details.
Error in syms (line 66)
assignin('caller',x,sym(x));
Error in ppa_model (line 152)
syms y