%%clear;clc;%获得购买美团股票、京东股票、百度股票的月均盈利率数据priceuprate=[-1.46 +4.06 +58.60 -11.00 -10.08 -15.90 +16.23 -7.00 -15.00 +5.00 +8.00 -5.00 +14.56 -8.00;13.20 0.29 -1.29 -0.21 -0.64 -20.67 -1.03, 2.90 17.45 -8.35 -7.98 1.55 48.15 2.31;-7.01 +27.40 -13.35 -6.77 -0.87 +7.46 -4.58 +6.45 -4.57 -4.57 +2.84 +4.70 +2.25 +38.27]/100;r_f = 0.002;%无风险利率priceuprate = priceuprate';size_priceuprate = size(priceuprate);average_priceuprate = sum(priceuprate)/size_priceuprate(1);%取平均利率risk_matrix = cov(priceuprate);%取方差-协方差矩阵%%num_dots = 5000;%设置二次规划点数target_priceuprates = linspace(min(average_priceuprate) ,...max(average_priceuprate),num_dots);%设定固定利率weights = zeros(size_priceuprate(2) , num_dots);risks = zeros(1 , num_dots);Aeq = [ones(1 , size_priceuprate(2)) ; average_priceuprate];lb = zeros(size_priceuprate(2) , 1);%设置下界(不允许卖空)ub = ones(size_priceuprate(2) , 1);%设置上界(不允许其他为负)H = 2 * risk_matrix;p = zeros(size_priceuprate(2) , 1);%给出求解函数options = optimoptions('quadprog','Algorithm','interior-point-convex',...'Display','iter','MaxIterations',200);%给出二次规划设置%进行二次规划for i = 1 : num_dotstarget_priceuprate = target_priceuprates(i);beq = [1 ; target_priceuprate];[weight , risk_min , exitflag , output , lambda]=...quadprog(H , p , [] , [] , Aeq , beq , lb , ub , [] , options);if exitflag > 0weights(: , i) = weight;risks(1 , i) =sqrt( weight'*risk_matrix*weight );elserisk(1 , i) = NaN;end%检验规划结果并保存end%%excess_priceuprate = average_priceuprate - r_f;weight_tan =risk_matrix \ excess_priceuprate';weight_tan = weight_tan / sum(weight_tan);risk_tan = sqrt(weight_tan' * risk_matrix *weight_tan);priceuprate_tan = average_priceuprate * weight_tan;k_tan = (priceuprate_tan - r_f) / (risk_tan);%求解资本市场线权重、风险以及利率,并据此求解斜率options = optimoptions('quadprog','Algorithm','interior-point-convex'...,'Display','iter','MaxIterations',200);beq = [1 , priceuprate_tan];[weight_tan1 , risk_min , exitflag , output , lambda]=...quadprog(H , p , [] , [] , Aeq , beq , lb , ub , [] , options);%再次求解权重value1 = 0;for i = 1 : size_priceuprate(2)if weight_tan(i,1) ~= weight_tan1(i,1)weight_tan = weight_tan1;break;endend%保证非负结果%%% 可视化结果figure('Position', [100, 100, 1200, 500]);% 子图1:有效前沿和资本市场线subplot(1,2,1);plot(risks , target_priceuprates, 'b-', 'LineWidth', 2);hold on;% 绘制资本市场线cml_risks = linspace(0, max(risks)*1.2, 100);cml_priceuprate = r_f + k_tan * cml_risks;plot(cml_risks, cml_priceuprate, 'r--', 'LineWidth', 2);% 标记切点plot(risk_tan, priceuprate_tan, 'ro', 'MarkerSize', 8, 'MarkerFaceColor', 'red');% 标记无风险资产plot(0, r_f, 'go', 'MarkerSize', 8, 'MarkerFaceColor', 'green');xlabel('风险(标准差)');ylabel('预期收益率');title('有效前沿和资本市场线');legend('有效前沿', '资本市场线', '切点组合', '无风险资产', 'Location', 'southeast');grid on;% 子图2:切点组合权重subplot(1,2,2);bar(weight_tan);xlabel('资产');ylabel('权重');title('切点组合权重分配');set(gca, 'XTickLabel', {'美团股票', '京东股票', '百度股票'});grid on;上面这段代码在北太天元中会一直运行但无结果输出,但在Matlab中可以正常运行并输出结果
%%稀疏矩阵右除bug L=diag(3*ones(5,1))+diag(2*ones(4,1),-1)+diag(2*ones(4,1),1); A=blkdiag(L,L,L,L,L)+diag(20*ones(20,1),5)+diag(20*ones(20,1),-5); B=sparse(A); x=B/5报错信息显示计算未支持,请将稠密矩阵转为稀疏矩阵。但是,将B转为full(B)计算可得到正确结果。
p = struct();p.var(1).name=1;disp(p.var(1).name)直接运行这段代码不会得到结果也不会报错;调试这段代码会卡在第二行,无法继续运行
如果有一个运算没有实现,报错信息写的是“unsported computation”,至少应该写成“unsupported computation”啊 帮助文档的时候,也看到了一个小的拼写错误。freq_max 嗯的max忘了用大括号扩起来了, 导致 仅仅m是处于下标位置
恰当方程源代码如下:% 定义势函数syms x y;u = x^2*y + x^3*sin(y) + y^3/3;% 正确调用 fcontour:使用单向量参数指定范围 [xmin xmax ymin ymax]fcontour(u, [0 2 0 2]); % 图形修饰title('恰当方程的势函数等值线');xlabel('x'); ylabel('y'); grid on;
二阶齐次方程,运行提示错误---tspan 必须至少包含两个元素源代码如下:% 转换为方程组:y1 = y, y2 = y'ode_fun = @(x, y) [y(2); -3*y(2) - 2*y(1)];% 数值求解[x_ode, y_ode] = ode45(ode_fun, [05], [1; 0]);% 解析解y_exact = @(x) 2*exp(-x) - exp(-2*x);% 绘图figure;plot(x_ode, y_ode(:,1), 'b--', x_ode, y_exact(x_ode), 'r-');xlabel('x'); ylabel('y');legend('数值解', '解析解');title('二阶齐次方程解对比');
代码如下:function co2=co2(t,x)co2=4*(0.05-x)/45;报错如下:未定义的变量 'x'。位于文件 D:\soft\Documents\baltamatica\MATLAB从入门到精通-源文件\ch10-fuzeng\co2.m (第 2 行)co2=4*(0.05-x)/45;
代码如下:syms y(x)eqn=diff(y,x)==y-2*x/y;dsolve(eqn,'y(0)==1')开启symbolic插件,报错如下:syms 是未定义的函数。位于文件 D:\soft\Documents\baltamatica\MATLAB从入门到精通-源文件\ch10-fuzeng\example10_7.m (第 1 行)syms y(x) 开启sympy插件,报错如下:输出需要566887456个参数,但是返回值只有0个参数。错误使用函数 syms输出参数不正确。位于文件 D:\soft\Documents\baltamatica\MATLAB从入门到精通-源文件\ch10-fuzeng\example10_7.m (第 1 行)syms y(x)
无法加载 btmulink - "C:\baltamatica\plugins\btmulink\main.dll": 找不到指定的模块。加载必要插件 [btmulink] 未能成功。我们建议您不要在缺少必要插件的情况下运行。错误使用函数 load_plugin加载插件 btmulink 的直接(或间接 这是为什么,刚下载就出现了,怎么解决
好像L的结果不对,请核实。代码如下:A = [13 -2 0 5 -13 4 2 3 4 -2 6 8;1 9 2 3]; [L,U] = lu(A)