<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265272</link>
    <title>MATLAB Central Newsreader - How can I write a script to run least square optimization to my </title>
    <description>Feed for thread: How can I write a script to run least square optimization to my </description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Sun, 08 Nov 2009 08:11:03 -0500</pubDate>
      <title>How can I write a script to run least square optimization to my </title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/265272#692964</link>
      <author>Dekkusama</author>
      <description>I am so new to matlab and I don't understand how it works yet.&lt;br&gt;
My problem is about using optimization problem (at least, I think the&lt;br&gt;
problem is there)&lt;br&gt;
&lt;br&gt;
The thing is, I tried to construct risk neutral density which is a&lt;br&gt;
mixture of 3 log-normal distribution.&lt;br&gt;
I followed method showed in Gianluca Fusai and Andrea Roncoroni,&lt;br&gt;
Implementing Models in Quantitative Finance, Chapter 12. The model&lt;br&gt;
assumed risk neutral density in Log-normal form.&lt;br&gt;
It minimizes sum of square differences between observed market price&lt;br&gt;
and price derived from model from both call and put options.&lt;br&gt;
The variables that need to be estimated are parameters in the&lt;br&gt;
estimation model, alphas, betas, and weights.&lt;br&gt;
&lt;br&gt;
I was able to write m-file for calculating theoretical option prices&lt;br&gt;
but when I wrote optimization script and run it, the following errors&lt;br&gt;
occurred, saying something about Matrix dimension on command line,&lt;br&gt;
which run smoothly if I didnot insert the optimization lines.&lt;br&gt;
&lt;br&gt;
I post my scripts below the error message. I know it's quite a mess,&lt;br&gt;
bear with me.&lt;br&gt;
Could anyone help pointing out what I did wrong here?  Any books, any&lt;br&gt;
examples I can refer to?&lt;br&gt;
How can I get over it? I've been trying to solve this for 2 whole days&lt;br&gt;
already, browsing through Matlab's Help and Documentations,&lt;br&gt;
but nothing seemed to work.... HELP!!&lt;br&gt;
&lt;br&gt;
---------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br&gt;
??? Error using ==&amp;gt; times&lt;br&gt;
Matrix dimensions must agree.&lt;br&gt;
&lt;br&gt;
Error in ==&amp;gt; calrnd5&amp;gt;calprice at 29&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y = typep.*(exp(-r.*T/252).*...&lt;br&gt;
&lt;br&gt;
Error in ==&amp;gt; calrnd5&amp;gt;iverrors at 46&lt;br&gt;
y =calprice(r,T, K, zeta0,typep, typec)-MktP;&lt;br&gt;
&lt;br&gt;
Error in ==&amp;gt; lsqnonlin at 202&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;initVals.F = feval(funfcn{3},xCurrent,varargin{:});&lt;br&gt;
&lt;br&gt;
Error in ==&amp;gt; calrnd5 at 52&lt;br&gt;
x = lsqnonlin(@iverrors,zeta0,[], [], opts,r,T, K, typep,typec, MktP);&lt;br&gt;
&lt;br&gt;
Caused by:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Failure in initial user-supplied objective function evaluation.&lt;br&gt;
LSQNONLIN cannot continue.&lt;br&gt;
&lt;br&gt;
-------------------------------------------------------------------------------------------------------------------------------------------------------&lt;br&gt;
&lt;br&gt;
function xxx = calrnd5&lt;br&gt;
&lt;br&gt;
clear;&lt;br&gt;
clc;&lt;br&gt;
load calrnd&lt;br&gt;
K = data(:,1);&lt;br&gt;
r = data(:,5);&lt;br&gt;
T = data(:,2);&lt;br&gt;
typec = data(:,4);&lt;br&gt;
typep = data(:,7);&lt;br&gt;
MktP = data(:,3);&lt;br&gt;
alpha = 9.5+zeros(3,1);&lt;br&gt;
beta = 0.2+zeros(3,1);&lt;br&gt;
w = 1/3+zeros(3,1);&lt;br&gt;
zeta0 = [alpha' beta' w'];&lt;br&gt;
&lt;br&gt;
z = calprice(r,T, K, zeta0,typep, typec)&lt;br&gt;
xz = iverrors(r,T, K, zeta0,typep, typec,MktP)&lt;br&gt;
&lt;br&gt;
function y = calprice(r,T, K, zeta0,typep, typec)&lt;br&gt;
% calculate option price, typep and typec are just indicators for put&lt;br&gt;
and call&lt;br&gt;
% K is a vector of exercise price, r is vector of risk free rate, T is&lt;br&gt;
vector of time to maturity in days. They're all in 137x1 dimension&lt;br&gt;
%zeta0 is row vector of parameters I want to estimate, comprising of 3&lt;br&gt;
alphas, 3 betas, and 3 weights, respectively.&lt;br&gt;
% the function form for call price is call = exp(-r*T)*(w1*(exp(alpha1+&lt;br&gt;
(beta1^2)/2 * N(d1) - K * N(d2)) + w2(....) + w3(...)&lt;br&gt;
%d(i)  is function of alphas and betas&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;y = typep.*(exp(-r.*T/252).*...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(zeta0(7)*(K.*normcdf(-((-log(K)+ zeta0(1)&lt;br&gt;
+zeta0(4)^2)./zeta0(4) - zeta0(4)))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-exp(zeta0(1)+(zeta0(4).^2)/2).*normcdf(-((-log&lt;br&gt;
(K)+ zeta0(1) +zeta0(4)^2)./zeta0(4))))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ zeta0(8)*(K.*normcdf(-((-log(K)+ zeta0&lt;br&gt;
(2)+zeta0(5)^2)./zeta0(5) - zeta0(5)))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-exp(zeta0(2)+(zeta0(5).^2)/2).*normcdf(-((-&lt;br&gt;
log(K)+ zeta0(2)+zeta0(5)^2)./zeta0(5))))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ (1-zeta0(7)-zeta0(8))*(K.*normcdf(-((-log(K)&lt;br&gt;
+ zeta0(3)+zeta0(6)^2)./zeta0(6) - zeta0(6)))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-exp(zeta0(3)+(zeta0(6).^2)/2).*normcdf(-((-&lt;br&gt;
log(K))+ zeta0(3)+zeta0(6)^2)./zeta0(6)))))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ typec.*(exp(-r.*T/252).*...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(zeta0(7)*(exp(zeta0(1)+(zeta0(4).^2)/&lt;br&gt;
2).*normcdf((-log(K)+ zeta0(1) +zeta0(4)^2)./zeta0(4))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-K.*normcdf(((-log(K)+ zeta0(1) +zeta0(4)^2)./&lt;br&gt;
zeta0(4) - zeta0(4))))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ zeta0(8)*(exp(zeta0(2)+(zeta0(5).^2)/&lt;br&gt;
2).*normcdf((-log(K)+ zeta0(2)+zeta0(5)^2)./zeta0(5))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-K.*normcdf(((-log(K)+ zeta0(2)+zeta0(5)^2)./&lt;br&gt;
zeta0(5) - zeta0(5))))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;+ (1-zeta0(7)-zeta0(8))*(exp(zeta0(3)+(zeta0&lt;br&gt;
(6).^2)/2).*normcdf((-log(K)+ zeta0(3)+zeta0(6)^2)./zeta0(6))...&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-K.*normcdf(((-log(K)+ zeta0(3)+zeta0(6)^2)./&lt;br&gt;
zeta0(6) - zeta0(6))))));&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
function y= iverrors(r,T, K, zeta0,typep, typec,MktP)&lt;br&gt;
y =calprice(r,T, K, zeta0,typep, typec)-MktP;&lt;br&gt;
&lt;br&gt;
end&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
opts = optimset('Display','iter','TolFun',0.00001);&lt;br&gt;
x = lsqnonlin(@iverrors,zeta0,[], [], opts,r,T, K, typep,typec, MktP);&lt;br&gt;
&lt;br&gt;
x&lt;br&gt;
&lt;br&gt;
end</description>
    </item>
  </channel>
</rss>

