1 / 30

Functions

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

jada
Download Presentation

Functions

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Functions

  2. Downloads • Today’s work is in: matlab_lec02.m • Functions we need today: myfunction.m, windsorise.m, npv.m

  3. Overview • Logic • Control Structures (if, for) • Functions • Financial Example: NPV and Gordon Growth Model

  4. 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

  5. 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)

  6. 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);

  7. Examples • In the matlab prompt

  8. 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;

  9. 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

  10. 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=12+22+32+… 1002 • Be careful with variables having same name as index, or making changes to index while inside loop • Make sure variables are initialized

  11. Nested Loops >>for i=1:5; for j=1:5; B(i,j)=min(i,j); end; end;

  12. Loop withoutusing for >>i=0; >>while i<10; i=i+1; disp(i); end; • Beware of infinite loops!

  13. 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);

  14. 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]);

  15. 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

  16. 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

  17. 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(lowcut*T)); z(i)=y(round(lowcut*T)); end; if z(i)>y(round(highcut*T)); z(i)=y(round(highcut*T)); end; end; W=[z y];

  18. 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');

  19. NPV:The Model • Model: • When D(t+1)=D(t)*(1+g) and the sum is infinite, this reduces to Gordon Growth Model: • When g=0, this reduces to: • What if growth stops after Ts? • How else can you modify this model? Value firms vs. Growth firms?

  20. 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;

  21. 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--');

  22. 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?

  23. Next week • Randomization • Simulation • Real finance!

  24. Functions we learned • Logic: ==, ~=, <, <=, >, >=, &, | • Control Structures: if, else, for • Math: sort • Ours: windsorize, npv

More Related