Valuation: VC edition

Download Report

Transcript Valuation: VC edition

Functions

Downloads

 Today’s work is in: matlab_lec02.m

 Functions we need today: myfunction.m, windsorise.m, npv.m

Overview

 Logic  Control Structures (if, for)  Functions  Financial Example: NPV and Gordon Growth Model

Logic

 1 means True, 0 means False  == is used for logic, = to assign values >>1==1 ans = 1 >>1==2 ans = 0 >>x=5; %assigns value 5 to x >>x==5; %checks if x is equal to 5, returns either 1 %or 0 >>x=(x==5); %checks if x is equal to 5, then %assigns True (1) or False (0) to x

Logical Operators

== % equal to ~= % not equal to > % greater than >= % greater than or equal to < % less than <= % less than or equal to & % and | % or (top left of keyboard)

Examples

>> A=[zeros(3,1); ones(3,1); 2*ones(3,1); 3*ones(3,1)]; >>in1=(A>0); >>A(A>0); % is same as A(in1) >>in2=(A<1 | A>2); >>in3=(A>1 & A<3); >>in4=(A~=2);

Examples

 In the matlab prompt

if statements

>>if A(1)==0; x=5; y=x; end;  All function names are lower case >>if (logical statement); (command to be executed); end;

if-else statements

>>if A(3)==A(4); x=A(5); y=A(4); elseif A(3)==0; x=5; y=0; elseif A(3)==1; x=4; y=5; else; x=3; y=8; end;  Just like if statement but adds a elseif and else

for statements and loops

>>T=100; s=0; x=0; >>for i=1:T; s=s+i; x=x+i*i; end;  This loop calculates a sum and a sum of squares s=1+2+3+… 100 x=1 2 +2 2 +3 2 +… 100 2   Be careful with variables having same name as index, or making changes to index while inside loop Make sure variables are initialized

Nested Loops

>>for i=1:5; for j=1:5; B(i,j)=min(i,j); end; end;

Loop without using for

>>i=0; >>while i<10; i=i+1;  disp(i); end; Beware of infinite loops!

Alternatives to Loops

 Loops are slow, matrix operations are fast  Avoid using loops if you can!

>>x=0; >>for i=1:5; x=x+i*i; end;  Alternative: >>A=[1:5]; x=sum(A.*A);

Example: Mean and StDev

>>[T L]=size(bp); >>s=0; s2=0; >>for i=1:T; s=s+bp(i,4); s2=s2+(bp(i,4)^2); end; >>M=s/T; StD=sqrt((s2/T)-M*M); >>disp([mean(bp(:,4)) M]); >>disp([std(bp(:,4)) StD]);

Functions

      Functions created in .m files Unlike scripts, you can call on functions, and functions can return values For example f(x,y)=5*x+3*y is a function that takes in arguments x and y, returns f(x,y) Matlab has many intrinsic functions (i.e. log(.), corrcoef(. , .), mean(.) Functions can take in zero, one or many arguments Functions can return zero or one argument, but that argument can be a matrix

A simple function

function z=myfunction(x,y); z=(x.^2)+2*x.*y+(y.^2); %-This function can take in scalars or vectors %-Functions do not change the values of the % arguments that are passed to them, that % is, they are independent of the external % environment

Windsorization

function W=windsorise(x,lowcut,highcut); [T L]=size(x); z=x; y=sort(x); for i=1:T; if z(i)y(round(highcut*T)); end; z(i)=y(round(highcut*T)); end; W=[z y];

Using windsorise

 In matlab prompt plot regular series and windsorised series >>data_bp; >>X=windsorise(bp(:,4),.05,.95); >>plot(bp(:,4)); >>hold on; >>plot(X(:,1), 'r');

NPV: The Model

     Model:

NPV

t

  1 ,

T D

(

t

) ( 1 

r

)

t

When D(t+1)=D(t)*(1+g) and the sum is infinite, this reduces to Gordon Growth Model:

NPV

D r

(  0 )

g

When g=0, this reduces to:

NPV

 1 1      

r T

What if growth stops after Ts?

How else can you modify this model? Value firms vs. Growth firms?

NPV: The function

function y=npv(d,r,g,T,Ts); y=0; cf=zeros(T,1); cf(1)=d; for t=1:T; if t<=Ts; cf(t+1)=cf(t)*(1+g); else; cf(t+1)=cf(t); end; y=y+cf(t)/((1+r)^t); end;

Using the NPV function

>>d=1; r=.05; g=.02; T=20; Ts=10; >>p=npv(d,r,g,T,Ts); >>T=200; p=zeros(T,1); >>for t=1:T; p(t)=npv(d,r,g,t,t); end; >>hold off; plot([1:T],p, 'b'); >>hold on; >>plot([1:T],ones(1,T)*(d/(r-g)), ' r- ' );

NPV function: extensions

     Growth firms: little cash flow now, lots of cash flow later Value firms: lots of cash flow now Cash flows that vary arbitrarily? ie input an arbitrary cash flow stream Cash flows that vary randomly? Use rand() and randn() functions Time varying returns?

Next week

 Randomization  Simulation  Real finance!

Functions we learned

 Logic: ==, ~=, <, <=, >, >=, &, |  Control Structures: if, else, for  Math: sort  Ours: windsorize, npv