diff --git a/matlab/hess_element.m b/matlab/hess_element.m index 069a0ea9eccdc958e1c278005b215671500cf6de..5af38ecd2a112d6f66d0f1b806c0e4b53bee9622 100644 --- a/matlab/hess_element.m +++ b/matlab/hess_element.m @@ -1,17 +1,15 @@ -function d=hess_element(func,arg1,arg2,elem1,elem2,args) -% function d=hess_element(func,arg1,arg2,elem1,elem2,args) +function d=hess_element(func,element1,element2,args) +% function d=hess_element(func,element1,element2,args) % returns an entry of the finite differences approximation to the hessian of func % % INPUTS % func [function name] string with name of the function -% arg1 [int] the indices showing the element within the hessian that should be returned -% arg2 [int] -% elem1 [int] vector index 1 -% elem2 [int] vector index 2 +% element1 [int] the indices showing the element within the hessian that should be returned +% element2 [int] % args [cell array] arguments provided to func % % OUTPUTS -% d [double] the (arg1,arg2) entry of the hessian +% d [double] the (element1,element2) entry of the hessian % % SPECIAL REQUIREMENTS % none @@ -33,7 +31,7 @@ function d=hess_element(func,arg1,arg2,elem1,elem2,args) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -assert(arg1 <= length(args) && arg2 <= length(args)); +assert(element1 <= length(args) && element2 <= length(args)); func = str2func(func); @@ -45,21 +43,21 @@ m01 = args; p11 = args; m11 = args; -p10{arg1}(elem1) = p10{arg1}(elem1) + h; -m10{arg1}(elem1) = m10{arg1}(elem1) - h; +p10{element1} = p10{element1} + h; +m10{element1} = m10{element1} - h; -p11{arg1}(elem1) = p11{arg1}(elem1) + h; -m11{arg1}(elem1) = m11{arg1}(elem1) - h; +p11{element1} = p11{element1} + h; +m11{element1} = m11{element1} - h; + +p01{element2} = p01{element2} + h; +m01{element2} = m01{element2} - h; -p01{arg2}(elem2) = p01{arg2}(elem2) + h; -m01{arg2}(elem2) = m01{arg2}(elem2) - h; - -p11{arg2}(elem2) = p11{arg2}(elem2) + h; -m11{arg2}(elem2) = m11{arg2}(elem2) - h; +p11{element2} = p11{element2} + h; +m11{element2} = m11{element2} - h; % From Abramowitz and Stegun. Handbook of Mathematical Functions (1965) % formulas 25.3.24 and 25.3.27 p. 884 -if arg1==arg2 +if element1==element2 d = (16*func(p10{:})... +16*func(m10{:})... -30*func(args{:})... diff --git a/matlab/jacob_element.m b/matlab/jacob_element.m index e2a04b426bea0a13676bf62bc6a7e6f928d2c64f..4f49cdbab917e1b291092770612e36f2e7368ed9 100644 --- a/matlab/jacob_element.m +++ b/matlab/jacob_element.m @@ -1,15 +1,14 @@ -function d=jacob_element(func,arg,elem,args) -% function d=jacob_element(func,arg,elem,args) +function d=jacob_element(func,element,args) +% function d=jacob_element(func,element,args) % returns an entry of the finite differences approximation to the jacobian of func % % INPUTS % func [function name] string with name of the function -% arg [int] the index showing the elem within the jacobian that should be returned -% elem [int] vector index +% element [int] the index showing the element within the jacobian that should be returned % args [cell array] arguments provided to func % % OUTPUTS -% d [double] jacobian[elem] +% d [double] jacobian[element] % % SPECIAL REQUIREMENTS % none @@ -31,15 +30,15 @@ function d=jacob_element(func,arg,elem,args) % You should have received a copy of the GNU General Public License % along with Dynare. If not, see <http://www.gnu.org/licenses/>. -assert(arg <= length(args)); +assert(element <= length(args)); func = str2func(func); h=1e-6; margs=args; -args{arg}(elem) = args{arg}(elem) + h; -margs{arg}(elem) = margs{arg}(elem) - h; +args{element} = args{element} + h; +margs{element} = margs{element} - h; d=(func(args{:})-func(margs{:}))/(2*h); end