function y = subscat(x,v,s) % Copyright (c) 2001-2009 by Ales Cerny %-------------------------------------------------------------------------- % subscat(x,v,s) assigns a label from vector 's' to each entry in vector 'x' % depending on which of the intervals determined by vector 'v' a particular % entry falls in. % % Inputs % x : N*1 vector % v : P*1 numeric vector, containing breakpoints specifying the ranges % within which substitution is to be made. This must be sorted in % ascending order. % s : P*1 vector, containing values to be substituted % % Outputs % y : N*1 vector, with the elements in s substituted for the original % elements of x according to which of the regions of v the elements % of x fall into %************************************************************************% % subscat.m - supplementary program to % % Ales Cerny (2009) Mathematical Techniques in Finance (2nd ed.) % % Princeton University Press http://press.princeton.edu/titles/9079.html % %************************************************************************% % This code is provided 'as-is', without any express or implied warranty. % % Permission is granted to anyone to use this code for any purpose, % subject to the following restrictions: % % 1. The origin of this code must not be misrepresented; you must not % claim that you wrote the original code. % 2. Modified code versions must be plainly marked as such, and must not % be misrepresented as being the original code. % 3. This notice may not be removed from any source distribution. % NOTICE TO STUDENTS: To avoid accusations of plagiarism, if you use this % code or its modifications in assessed work you should prepend it with a % note stating: % "This is the original/modified version of the code subscat.m by % Ales Cerny (2009), Mathematical Techniques in Finance (2nd ed.), % Princeton University Press. The original version is available from % http://www.martingales.info/mtfweb2". % A similar acknowledgement should appear prominently inside your written % report. if nargin < 3 error('Requires at least three input argument.'); end k = find(v(2:end) - v(1:end-1) <=0); if any(k) error('v must be sorted in ascending order.'); end k = ( x <= v(1)); temp = s(1) * k; for i = 2 : length(v) k = ((x > v(i-1)).*(x <= v(i))); temp = temp + s(i)*k; end k = ( x > v(end)); temp = temp + x.*k; y = temp;