数学模型4.8例1投资组合lingo,matlab
生活随笔
收集整理的這篇文章主要介紹了
数学模型4.8例1投资组合lingo,matlab
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天學到數學模型P131 4.8節 例1 投資組合,這仍然是一個非線性規劃問題,里面主要涉及兩個式子。
其中第二個寫起來比較復雜,在lingo中分步計算出期望,協方差后,比較好寫。
model: sets: stock/1..3/:x,mean; year/1..12/:; link(stock,year):A,R; matrix(stock,stock):cov; endsetsdata: A= 1.3 1.103 1.216 0.954 0.929 1.056 1.038 1.089 1.09 1.083 1.035 1.176 1.225 1.29 1.216 0.728 1.144 1.107 1.321 1.305 1.195 1.39 0.928 1.715 1.149 1.26 1.419 0.922 1.169 0.965 1.133 1.732 1.021 1.131 1.006 1.908; enddata@for(link(i,j):@free(R(i,j)));!令R負數也可以; @for(link(i,j):R(i,j)=A(i,j)-1);!計算年收益率; @for(stock(i):mean(i)=@sum(year(j):R(i,j))/@size(year));!計算各股票年收益率均值(期望); @for(matrix(i,j):cov(i,j)=@sum(year(k):(R(i,k)-mean(i))*(R(j,k)-mean(j)))/(@size(year)-1));!計算協方差矩陣; min=@sum(matrix(i,j):x(i)*x(j)*cov(i,j));!年投資收益率方差最小; @sum(stock(i):x(i)*mean(i))>=0.15;!股票綜合年期望收益率不低于15%; @sum(stock(i):x(i))=1;!股票權重;end結果跑出來和書上一致:
?再用matlab用fmincon函數(解非線性規劃)做一遍,先寫目標函數,取名為minfun.m
function[y]=minfun(x) global cv y=[]; for i=1:3for j=1:3y=[y,x(i)*x(j)*cv(i,j)];end end y=sum(y);主程序:?
clear all global cv profit=[1.3 1.103 1.216 0.954 0.929 1.056 1.038 1.089 1.09 1.083 1.035 1.176;1.225 1.29 1.216 0.728 1.144 1.107 1.321 1.305 1.195 1.39 0.928 1.715;1.149 1.26 1.419 0.922 1.169 0.965 1.133 1.732 1.021 1.131 1.006 1.908]; profit=profit-1;%年收益率要減1 ER=mean(profit,2); %求均值,每行為一個樣本 cv=cov(profit'); %cov函數以每列為一個樣本 % fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,nonlcon(非線性約束),options) %求fun最小值,一般fval=fun(x) %約束條件為Aeq*x = beq 和 A*x <= b [x,fval]=fmincon('minfun',zeros(3,1),-ER',-0.15,ones(1,3),1) % x列向量,其他行向量要注意一點,需要minfun函數和外面主程序都寫global cv,才能順利在minfun里調動cv變量(只寫一個global cv 會出錯,必須主程序里聲明cv是全局變量,minfun函數里再次聲明cv是全局變量,才能在minfun里調用cv)。還有一種方法是在minfun里將cv變量計算出來。
run出的結果:
總結
以上是生活随笔為你收集整理的数学模型4.8例1投资组合lingo,matlab的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lisp型材库_基于Auto LISP
- 下一篇: ppt的计算机试题,2016年职称计算机