%投资利益与风险1998A题 %模型一 给定风险承受程度,求最大利益 f=[-0.05,-0.27,-0.19,-0.185,-0.185]; %A矩阵 %A=[0,0.025,0.015,0.055,0.026]; %错误 %b=[1,1,1,1,1]; A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];%不等式约束条件矩阵 %Aeq、beq Aeq=[1,1.01,1.02,1.045,1.065]; beq=1; %lb %lb=0; %错误 lb=zeros(5,1); %可承担风险率a a=(0:0.001:0.05); %保存最优解 Q=zeros(1,length(a)); xx=[];%空矩阵存放最优解对应x的值 for i=1:length(a) b=a(i)*ones(4,1); [x,y]=linprog(f,A,b,Aeq,beq,lb); Q(i)=-y;%注意取负!!! xx=[xx;x']; end plot(a,Q,'*r'); xlabel("风险率"); ylabel("最大收益"); %模型二 收益、风险按权重组合 % f0=[-0.05,-0.27,-0.19,-0.185,-0.185]; % w=(0:0.1:1); % Aeq=[1,1.01,1.02,1.045,1.065,0]; % beq=1; % lb=0; % xx=[]; % Q=zeros(1,length(w)); % A=[zeros(5,1),diag([0.025,0.025,0.055,0.065,0])]; % b=ones(5,1); % for i=1:length(w) % f=[-w(i)*f0,1-w(i)]; % b=x(end)*b; % [x,y]=linprog(f,A,b,Aeq,beq,lb); % Q(i)=-y; % xx=[xx,x']; % end % plot(w,Q,'*r'); %模型二 收益、风险按权重组合 clc; clear; close all; format long g; M = 10000; prob = optimproblem; x = optimvar('x', 6, 1, 'LowerBound', 0); r = [0.05, 0.28, 0.21, 0.23, 0.25]; p = [0, 0.01, 0.02, 0.045, 0.065]; q = [0, 0.025, 0.015, 0.055, 0.026]'; %w = 0:0.1:1; w = 0.7:0.03:1; V = []; Q = []; X = []; prob.Constraints.con1 = (1 + p) * x(1:end-1) == M; prob.Constraints.con2 = (q(2:end).* x(2:end-1))<= x(end); %下标从1开始 for i = 1:length(w) prob.Objective = w(i) * x(end) - (1 - w(i)) * (r - p) * x(1:end-1); %注意大小写 [sol, fval, flag, out] = solve(prob); xx = sol.x; V = [V, max(q.* xx(1:end-1))]; Q = [Q, (r - p) * xx(1:end-1)]; X = [X, xx]; plot(V, Q, '*-'); grid on; xlabel('风险'); ylabel('收益'); end %模型三:达到一定盈利水平,极小化风险 clc; clear; close all; format long g; M=10000; k=1500:100:3000; prob = optimproblem; x = optimvar('x', 5, 1, 'LowerBound', 0);%下界为0 r = [0.05, 0.28, 0.21, 0.23, 0.25]; p = [0, 0.01, 0.02, 0.045, 0.065]; q = [0, 0.025, 0.015, 0.055, 0.026]'; V = []; Q = []; X = []; t = optimvar('t', 'LowerBound', 0); %prob.Objective=max(q.*x);%极小化风险 for i=1:length(k) prob.Objective = t; % 极小化风险 prob.Constraints.con1 = (1 + p) * x == M; prob.Constraints.con2=((r-p)*x>=k(i));%达到一定盈利水平 prob.Constraints.con3=(q.*x<=t); [sol,fval,flag,out]=solve(prob); if flag==1 xx=sol.x; X=[X,xx]; Q=[Q,(r-p)*xx]; V=[V,fval]; else xx=-1*ones(5,1); X=[X,xx]; Q=[Q,-1]; V=[V,-1]; end end plot(k,V,'*-');