Who can help me to run this code in matlab?

  • Context: MATLAB 
  • Thread starter Thread starter xuej1112
  • Start date Start date
  • Tags Tags
    Code Matlab
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
4 replies · 3K views
xuej1112
Messages
17
Reaction score
0
who can help me to run this code in matlab? I run it in my computer but the result is totally different from the book! In the book,the image is a increase curve,but my result is a decrease curve.So, is there something wrong of my MATLAB?

code:

syms r P A B t;
P = exp(A+B*r);
disp('first derivative of P with respect to r')
diff(P,r)
disp('second derivative of P with respect to r')
diff(diff(P,r))

syms f B A s k m p r t DA DB
f1=0.5*B^2*s^2+B*(k*(m-r)-p*s)-DA-DB*r-r
collect(f1,r)

dsolve('-B*k-DB-1=0','B(0)=0')
B = -1/k+exp(-k*t)/k;
f2=1/2*B^2*s^2+B*(k*m-p*s)-DA
dsolve('1/2*(-1/k+exp(-k*t)/k)^2*s^2+(-1/k+exp(-k*t)/k)*(k*m-p*s)-DA=0','A(0)=0')

tau=(1:1:60)';
nTau=length(tau);
p=0.20;s=0.25;k=0.30;theta=5;r=6;
% Calculate A, B and the yield curve;
B=(exp(-k.*tau)-1)./k;
A=B.*(((p*s)/k)-theta)-theta.*tau+(p.*s.*tau)./k+(s^2/(4*k)).*(-(B.^2)+(2*exp(-k.*tau)-2)./(k^2)+(2.*tau)./k);
y=-(1./tau).*(A+B.*r);
figure;
plot(tau,y)
 
Physics news on Phys.org
I would say change the sign of the exponential, it increases. There is no way that anybody can help you on this unless you state more precisely what the problem is.
 
thank you! the problem is about a example of Vasicek model.it is in the book"Strategic Asset Allocation in Fixed Income Markets A Matlab based user's guide",page 77.It wants to solve a PDE of Vasicek model for bond pricing.
 
Well, the code is running properly, and I don't have the book so my guess goes with some typos in the code... Try to comment some of the portions of the code and check by hand