Matlab数学建模实战应用:案例3 - 投资组合优化

目录

前言

一、问题分析

二、模型建立

三、Matlab代码实现

完整代码示例

四、模型验证

五、模型应用

实例示范:投资组合优化

步骤 1:导入数据并计算统计量

步骤 2:建立优化模型并求解

步骤 3:绘制有效前沿(Efficient Frontier)

步骤 4:比较不同投资组合策略

步骤 5:回测和风险评估

步骤 6:计算夏普比率和最大回撤

步骤 7:应用模型进行投资决策支持和资产再平衡

实例总结

投资决策支持

资产再平衡

风险监控

总结


前言

投资组合优化是金融工程中的核心问题之一,通过合理分配资金在不同资产之间,可以在控制风险的同时最大化收益。本文将详细介绍一个投资组合优化的完整过程,包括问题分析、模型选择、Matlab代码实现、模型验证和应用。

一、问题分析

  1. 投资目标

    • 投资者通常希望通过组合投资来分散风险,同时获得合理回报。常见的目标包括最大化收益、最小化风险或在特定风险水平下最大化收益。
  2. 风险控制

    • 分散投资的主要目的是通过持有不同资产,降低单个资产的波动对整体组合的影响。风险控制可以通过方差或标准差等指标来衡量。
  3. 资产收益率

    • 每个资产的预期收益率是投资决策的重要依据,可以通过历史数据或金融模型获得。
  4. 投资组合策略

    • 投资组合策略包括均值-方差模型(Markowitz模型)、资本资产定价模型(CAPM)等。

二、模型建立

三、Matlab代码实现

以下是使用Markowitz模型进行投资组合优化的完整代码示例。

  1. 导入数据
    • 假设资产的历史收益率信息存储在文件assets_data.csv中。

    % 读取资产收益率数据
    data = readtable('assets_data.csv');
    returns = data{:,:}; % 假设数据的各列为不同资产的收益率
    num_assets = size(returns, 2);

    % 计算资产的期望收益率和协方差矩阵
    exp_returns = mean(returns);
    cov_matrix = cov(returns);

  1. 建立优化模型
    • 使用Markowitz均值-方差模型寻找最优投资组合。

    % 设置优化目标和约束
    target_return = 0.02; % 目标收益率
    Aeq = ones(1, num_assets); % 权重之和为1
    beq = 1;
    lb = zeros(num_assets, 1); % 各资产权重要大于等于0
    ub = ones(num_assets, 1); % 各资产权重要小于等于1

    % 使用quadprog求解二次规划问题
    options = optimoptions('quadprog', 'Display', 'off');
    w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

    % 输出最优权重和预期收益、风险
    optimal_return = exp_returns * w;
    optimal_risk = sqrt(w' * cov_matrix * w);
    disp(['Optimal Weights: ', num2str(w')]);
    disp(['Expected Return: ', num2str(optimal_return)]);
    disp(['Expected Risk: ', num2str(optimal_risk)]);

  1. 绘制有效前沿(Efficient Frontier)
    • 通过绘制有效前沿,我们可以看到在不同收益率和风险水平下的最优投资组合。

    % 生成不同目标收益率下的有效前沿
    target_returns = linspace(min(exp_returns), max(exp_returns), 50);
    risks = zeros(size(target_returns));
    weights = zeros(num_assets, length(target_returns));

    for i = 1:length(target_returns)
        rt = target_returns(i);
        w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
        weights(:, i) = w;
        risks(i) = sqrt(w' * cov_matrix * w);
    end

    % 绘制有效前沿
    figure;
    plot(risks, target_returns, 'LineWidth', 2);
    title('Efficient Frontier');
    xlabel('Risk (Standard Deviation)');
    ylabel('Return');
    grid on;

  1. 比较不同投资组合策略
    • 通过比较不同的投资组合策略(如等权重策略、风险最小化策略)来评估各策略的优缺点。

    % 等权重策略
    w_eq = ones(num_assets, 1) / num_assets;
    return_eq = exp_returns * w_eq;
    risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

    % 风险最小化策略
    w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
    return_min_risk = exp_returns * w_min_risk;
    risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

    % 绘制比较图
    figure;
    plot(risks, target_returns, 'LineWidth', 2);
    hold on;
    scatter(risk_eq, return_eq, 50, 'r', 'filled');
    scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
    legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
    title('Comparison of Investment Strategies');
    xlabel('Risk (Standard Deviation)');
    ylabel('Return');
    grid on;

完整代码示例

% 读取资产收益率数据
data = readtable('assets_data.csv');
returns = data{:,:}; % 假设数据的各列为不同资产的收益率
num_assets = size(returns, 2);

% 计算资产的期望收益率和协方差矩阵
exp_returns = mean(returns);
cov_matrix = cov(returns);

% 设置优化目标和约束
target_return = 0.02; % 目标收益率
Aeq = ones(1, num_assets); % 权重之和为1
beq = 1;
lb = zeros(num_assets, 1); % 各资产权重要大于等于0
ub = ones(num_assets, 1); % 各资产权重要小于等于1

% 使用quadprog求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

% 输出最优权重和预期收益、风险
optimal_return = exp_returns * w;
optimal_risk = sqrt(w' * cov_matrix * w);
disp(['Optimal Weights: ', num2str(w')]);
disp(['Expected Return: ', num2str(optimal_return)]);
disp(['Expected Risk: ', num2str(optimal_risk)]);

% 生成不同目标收益率下的有效前沿
target_returns = linspace(min(exp_returns), max(exp_returns), 50);
risks = zeros(size(target_returns));
weights = zeros(num_assets, length(target_returns));

for i = 1:length(target_returns)
    rt = target_returns(i);
    w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
    weights(:, i) = w;
    risks(i) = sqrt(w' * cov_matrix * w);
end

% 绘制有效前沿
figure;
plot(risks, target_returns, 'LineWidth', 2);
title('Efficient Frontier');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

% 等权重策略
w_eq = ones(num_assets, 1) / num_assets;
return_eq = exp_returns * w_eq;
risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

% 风险最小化策略
w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
return_min_risk = exp_returns * w_min_risk;
risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

% 绘制比较图
figure;
plot(risks, target_returns, 'LineWidth', 2);
hold on;
scatter(risk_eq, return_eq, 50, 'r', 'filled');
scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
title('Comparison of Investment Strategies');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;
四、模型验证

投资组合优化模型建立后,需要通过实际数据检验其有效性。以下是模型验证的几个方面:

  1. 回测(Backtesting)
    • 回测是通过使用历史数据检验投资策略在过去的表现,从而评估其有效性和稳定性。

    % 从历史数据中取出一部分作为回测数据
    backtest_returns = returns(end-12:end,:); % 假设最近一年(12个月)数据用于回测

    % 根据优化模型得到的权重进行回测
    portfolio_returns = backtest_returns * w;
    portfolio_cumulative_returns = cumprod(1 + portfolio_returns) - 1;

    % 绘制回测结果
    figure;
    plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
    title('Backtesting Portfolio Cumulative Returns');
    xlabel('Time (months)');
    ylabel('Cumulative Returns');
    grid on;

  1. 风险评估
    • 使用夏普比率、最大回撤等指标评估投资组合的风险和收益。

    % 计算夏普比率(假设无风险利率为 0.03)
    risk_free_rate = 0.03 / 12; % 月利率
    excess_returns = portfolio_returns - risk_free_rate;
    sharpe_ratio = mean(excess_returns) / std(excess_returns);

    % 计算最大回撤
    cumulative_returns = cumprod(1 + portfolio_returns) - 1;
    drawdowns = max(max(cumulative_returns) - cumulative_returns);
    max_drawdown = max(drawdowns);

    disp(['Sharpe Ratio: ', num2str(sharpe_ratio)]);
    disp(['Maximum Drawdown: ', num2str(max_drawdown)]);

  1. 比较不同回测策略
    • 通过比较等权重策略、风险最小化策略等回测结果对比不同策略的优劣。

    % 根据等权重策略进行回测
    portfolio_returns_eq = backtest_returns * w_eq;
    portfolio_cumulative_returns_eq = cumprod(1 + portfolio_returns_eq) - 1;

    % 根据风险最小化策略进行回测
    portfolio_returns_min_risk = backtest_returns * w_min_risk;
    portfolio_cumulative_returns_min_risk = cumprod(1 + portfolio_returns_min_risk) - 1;

    % 绘制不同策略的回测结果比较
    figure;
    plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
    hold on;
    plot(1:length(portfolio_cumulative_returns_eq), portfolio_cumulative_returns_eq, 'r--', 'LineWidth', 2);
    plot(1:length(portfolio_cumulative_returns_min_risk), portfolio_cumulative_returns_min_risk, 'g-.', 'LineWidth', 2);
    legend('Optimal Portfolio', 'Equal Weight Portfolio', 'Minimum Risk Portfolio', 'Location', 'Best');
    title('Comparison of Backtesting Cumulative Returns');
    xlabel('Time (months)');
    ylabel('Cumulative Returns');
    grid on;

以下表格总结了模型验证步骤及其示例:

步骤说明示例代码
回测使用历史数据检验投资策略的有效性和稳定性backtest_returns = returns(end-12:end,:); portfolio_returns = backtest_returns * w;
风险评估使用夏普比率、最大回撤等指标评估投资组合的风险和收益sharpe_ratio = mean(excess_returns) / std(excess_returns); max_drawdown = max(drawdowns);
比较不同回测策略比较等权重策略、风险最小化策略等回测结果plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b');

五、模型应用

投资组合优化模型的实际应用包括以下几个方面:

  1. 投资决策支持
    • 根据优化模型的建议,分配资金到不同资产,形成具体的投资组合策略。

    % 输出最优投资组合权重
    disp('Optimal Portfolio Weights:');
    disp(w);

    % 根据权重分配投资金额(假设总金额为100万元)
    total_investment = 1e6;
    investment_allocation = total_investment * w;
    fprintf('Investment Allocation:\n');
    for i = 1:num_assets
        fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
    end

  1. 资产再平衡
    • 随着市场条件的变化,定期调整投资组合,使其始终符合最优比例。

    % 设定再平衡周期(例如每季度)
    rebalance_period = 3; % 每3个月进行一次再平衡
    for t = rebalance_period:rebalance_period:length(prices)
        current_prices = prices(t-rebalance_period+1:t,:);
        current_returns = diff(log(current_prices)); % 计算最新收益率
        current_exp_returns = mean(current_returns);
        current_cov_matrix = cov(current_returns);

        % 使用最新数据重新进行优化
        w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

        % 更新投资组合权重
        disp(['Rebalanced Weights at Time ', num2str(t)]);
        disp(w');
    end

  1. 风险监控
    • 持续监控投资组合的风险和波动,并根据市场变化和投资目标进行调整。

    % 每月计算投资组合的实际收益和风险
    for t = 1:length(prices)
        % 计算逐月收益率
        monthly_returns = mean(returns(t,:));
        monthly_risks = std(returns(t,:));

        % 输出月度收益和风险
        fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

        % 如果风险超出预期范围,采取相应措施
        if monthly_risks > expected_risk_range
            disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
        end
    end

以下总结了模型应用的步骤及其示例:

应用场景说明示例代码
投资决策支持根据优化模型的建议,分配资金到不同资产investment_allocation = total_investment * w;
资产再平衡定期调整投资组合,使其始终符合最优比例w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, ...);
风险监控持续监控投资组合的风险和波动,并根据市场变化进行调整fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

实例示范:投资组合优化

为了更好地理解上述方法,以下是一个完整的投资组合优化案例。

假设我们有一个投资组合,包括多个资产,其历史收益率数据存储在CSV文件assets_data.csv中。我们的目标是通过Markowitz均值-方差模型来优化投资组合,以在给定的目标收益率下最小化投资风险。

步骤 1:导入数据并计算统计量

% 读取资产收益率数据
data = readtable('assets_data.csv');
returns = data{:,:}; % 假设数据的各列为不同资产的收益率
num_assets = size(returns, 2);

% 计算资产的期望收益率和协方差矩阵
exp_returns = mean(returns);
cov_matrix = cov(returns);

步骤 2:建立优化模型并求解

% 设置优化目标和约束
target_return = 0.02; % 目标收益率
Aeq = ones(1, num_assets); % 权重之和为 1
beq = 1;
lb = zeros(num_assets, 1); % 各资产权重要大于等于 0
ub = ones(num_assets, 1); % 各资产权重要小于等于 1

% 使用 quadprog 求解二次规划问题
options = optimoptions('quadprog', 'Display', 'off');
w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

% 输出最优权重和预期收益、风险
optimal_return = exp_returns * w;
optimal_risk = sqrt(w' * cov_matrix * w);
disp(['Optimal Weights: ', num2str(w')]);
disp(['Expected Return: ', num2str(optimal_return)]);
disp(['Expected Risk: ', num2str(optimal_risk)]);

步骤 3:绘制有效前沿(Efficient Frontier)

% 生成不同目标收益率下的有效前沿
target_returns = linspace(min(exp_returns), max(exp_returns), 50);
risks = zeros(size(target_returns));
weights = zeros(num_assets, length(target_returns));

for i = 1:length(target_returns)
    rt = target_returns(i);
    w = quadprog(cov_matrix, [], -exp_returns, -rt, Aeq, beq, lb, ub, [], options);
    weights(:, i) = w;
    risks[i] = sqrt(w' * cov_matrix * w);
end

% 绘制有效前沿
figure;
plot(risks, target_returns, 'LineWidth', 2);
title('Efficient Frontier');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

步骤 4:比较不同投资组合策略

% 等权重策略
w_eq = ones(num_assets, 1) / num_assets;
return_eq = exp_returns * w_eq;
risk_eq = sqrt(w_eq' * cov_matrix * w_eq);

% 风险最小化策略
w_min_risk = quadprog(cov_matrix, [], [], [], Aeq, beq, lb, ub, [], options);
return_min_risk = exp_returns * w_min_risk;
risk_min_risk = sqrt(w_min_risk' * cov_matrix * w_min_risk);

% 绘制比较图
figure;
plot(risks, target_returns, 'LineWidth', 2);
hold on;
scatter(risk_eq, return_eq, 50, 'r', 'filled');
scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
legend('Efficient Frontier', 'Equal Weight', 'Minimum Risk', 'Location', 'Best');
title('Comparison of Investment Strategies');
xlabel('Risk (Standard Deviation)');
ylabel('Return');
grid on;

步骤 5:回测和风险评估

% 从历史数据中取出一部分作为回测数据
backtest_returns = returns(end-12:end,:); % 假设最近一年(12个月)数据用于回测

% 根据优化模型得到的权重进行回测
portfolio_returns = backtest_returns * w;
portfolio_cumulative_returns = cumprod(1 + portfolio_returns) - 1;

% 绘制回测结果
figure;
plot(1:length(portfolio_cumulative_returns), portfolio_cumulative_returns, 'b', 'LineWidth', 2);
title('Backtesting Portfolio Cumulative Returns');
xlabel('Time (months)');
ylabel('Cumulative Returns');
grid on;

步骤 6:计算夏普比率和最大回撤

% 计算夏普比率(假设无风险利率为 0.03)
risk_free_rate = 0.03 / 12; % 月利率
excess_returns = portfolio_returns - risk_free_rate;
sharpe_ratio = mean(excess_returns) / std(excess_returns);

% 计算最大回撤
cumulative_returns = cumprod(1 + portfolio_returns) - 1;
drawdowns = max(max(cumulative_returns) - cumulative_returns);
max_drawdown = max(drawdowns);

disp(['Sharpe Ratio: ', num2str(sharpe_ratio)]);
disp(['Maximum Drawdown: ', num2str(max_drawdown)]);

步骤 7:应用模型进行投资决策支持和资产再平衡

% 输出最优投资组合权重
disp('Optimal Portfolio Weights:');
disp(w);

% 根据权重分配投资金额(假设总金额为100万元)
total_investment = 1e6;
investment_allocation = total_investment * w;
fprintf('Investment Allocation:\n');
for i = 1:num_assets
    fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
end

% 设定再平衡周期(例如每季度)
rebalance_period = 3; % 每3个月进行一次再平衡
for t = rebalance_period:rebalance_period:length(prices)
    current_prices_plot = prices(t-rebalance_period+1:t,:);
    current_returns = diff(log(current_prices_plot)); % 计算最新收益率
    current_exp_returns = mean(current_returns);
    current_cov_matrix = cov(current_returns);
    
    % 使用最新数据重新进行优化
    w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

    % 更新投资组合权重
    disp(['Rebalanced Weights at Time ', num2str(t)]);
    disp(w');
end

% 持续监控投资组合的风险和波动
for t = 1:length(prices)
    % 计算逐月收益率
    monthly_returns = mean(returns(t,:));
    monthly_risks = std(returns(t,:));
    
    % 输出月度收益和风险
    fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);
    
    % 如果风险超出预期范围,采取相应措施
    % expected_risk_range 是事先定义的风险取值区间
    if monthly_risks > expected_risk_range
        disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
    end
end

实例总结

通过上述步骤和实例,我们展示了如何使用Markowitz均值-方差模型进行投资组合优化的全过程,包括模型建立、代码实现、回测、风险评估和实际应用。以下是该实例的总结:

步骤说明示例代码
数据导入从CSV文件中导入资产收益率数据data = readtable('assets_data.csv'); returns = data{:,:};
模型建立建立Markowitz均值-方差模型,求解模型最优权重w = quadprog(cov_matrix, [], -exp_returns, -target_return, Aeq, beq, lb, ub, [], options);
绘制有效前沿生成不同目标收益率下的有效前沿plot(risks, target_returns, 'LineWidth', 2);
比较不同策略比较等权重策略、风险最小化策略scatter(risk_eq, return_eq, 50, 'r', 'filled'); scatter(risk_min_risk, return_min_risk, 50, 'g', 'filled');
回测使用历史数据检验投资策略的有效性和稳定性portfolio_returns = backtest_returns * w;
风险评估使用夏普比率、最大回撤等指标评估投资组合的风险和收益sharpe_ratio = mean(excess_returns) / std(excess_returns); max_drawdown = max(drawdowns);
投资决策支持根据优化模型的建议,分配资金到不同资产并进行定期再平衡investment_allocation = total_investment * w;
风险监控持续监控投资组合的风险和波动,并根据市场变化进行调整fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);

通过这些方法,我们能够构建一个优化的投资组合,在给定的目标收益率下最小化投资风险。以下是一些关键的策略和应用实例总结:

投资决策支持

  1. 计算并输出最优投资组合权重
    • 根据优化结果,分配资金到不同资产。

    % 输出最优投资组合权重
    disp('Optimal Portfolio Weights:');
    disp(w);

    % 根据权重分配投资金额(假设总金额为100万元)
    total_investment = 1e6;
    investment_allocation = total_investment * w;
    fprintf('Investment Allocation:\n');
    for i = 1:num_assets
        fprintf('Asset %d: %.2f\n', i, investment_allocation(i));
    end

资产再平衡

  1. 定期调整投资组合
    • 随着市场条件的变化,定期重新优化和调整资产权重,使投资组合始终符合最优策略。

    % 设定再平衡周期(例如每季度)
    rebalance_period = 3; % 每3个月进行一次再平衡
    for t = rebalance_period:rebalance_period:length(prices)
        current_prices_plot = prices(t-rebalance_period+1:t,:);
        current_returns = diff(log(current_prices_plot)); % 计算最新收益率
        current_exp_returns = mean(current_returns);
        current_cov_matrix = cov(current_returns);
        
        % 使用最新数据重新进行优化
        w = quadprog(current_cov_matrix, [], -current_exp_returns, -target_return, Aeq, beq, lb, ub, [], options);

        % 更新投资组合权重
        disp(['Rebalanced Weights at Time ', num2str(t)]);
        disp(w');
    end

风险监控

  1. 持续监控投资组合的风险
    • 定期计算并输出投资组合的实际收益和风险,根据市场变化及预测及时调整策略。

    for t = 1:length(prices)
        % 计算逐月收益率
        monthly_returns = mean(returns(t,:));
        monthly_risks = std(returns(t,:));
        
        % 输出月度收益和风险
        fprintf('Month %d: Return = %.4f, Risk = %.4f\n', t, monthly_returns, monthly_risks);
    
        % 如果风险超出预期范围,采取相应措施
        % expected_risk_range 是事先定义的风险取值区间
        if monthly_risks > expected_risk_range
            disp('Risk exceeds expected range, consider rebalancing or adjusting strategy.');
        end
    end

总结

        本文详细介绍了投资组合优化的全过程,包括问题分析、模型选择、Matlab代码实现、绘制有效前沿、策略比较、回测、风险评估以及实际应用。通过实例,我们展示了如何使用Markowitz均值-方差模型优化投资组合,并利用Matlab工具进行建模和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/728500.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Macbook pro插硬盘没反应,Macbook pro移动硬盘读不了怎么办

为了弥补Macbook pro硬盘容量的缺失,我们有时候会使用到外接硬盘或移动硬盘。一般来说,这些硬盘都是即插即用的,可能部分要安装插件。不过,在一些特殊情况下,也会遇到插硬盘没反应等问题。本文会给大家解答Macbook pro…

网络安全:Web 安全 面试题.(XSS)

网络安全:Web 安全 面试题.(XSS) 网络安全面试是指在招聘过程中,面试官会针对应聘者的网络安全相关知识和技能进行评估和考察。这种面试通常包括以下几个方面: (1)基础知识:包括网络基础知识、操作系统知…

Golang | Leetcode Golang题解之第169题多数元素

题目: 题解: func majorityElement(nums []int) (ans int) {cnts : 0for _, v : range nums {if v ans {cnts} else if cnts 0 {ans v} else {cnts--}}return }

计算几何【三角剖分】

在几何中,三角剖分是指将平面对象细分为三角形,并且通过扩展将高维几何对象细分为单纯形。 对于一个给定的点集,有很多种三角剖分,如: OI 中的三角剖分主要指二维几何中的完美三角剖分(二维 Delaunay 三角…

第22篇 Intel FPGA Monitor Program的使用<五>

Q:如何用Intel FPGA Monitor Program创建C语言工程并运行呢? A:总体过程与创建汇编语言工程类似,不同的是在指定程序类型时选择C Program。 后续用到DE2-115开发板的硬件如LED、SW和HEX等外设时,还需要将描述定义这些…

前后端分离的后台管理系统源码,快速开发OA、CMS网站后台管理、毕业设计项目

那有没有一款软件解-决这种现状呢?答案是肯定的。引入我们的软件——eladmin。 介绍 ELADMIN,一个简单且易上手的 Spring boot 后台管理框架,已发布 Mybatis-Plus 版本,为开发者提供了一个全-面、高-效的解-决方案。 特点 高-效率:前后端完全分离,项目简单可配,内置代码…

掌握大型语言模型的 7 个基本步骤

介绍 LLMs 正在改变我们今天与科技互动的方式。这些人工智能程序能够理解和模仿人类语言。它们可以应用于数据分析、客户服务、内容创作和其他领域。但对于新手来说,了解如何使用它们似乎很有挑战性。本文将引导读者了解掌握大型语言模型的 7 个基本步骤。 本文还…

最新OPPO 真我手机 一加手机 使用adb命令永久关闭系统更新教程

使用adb命令永久关闭系统更新 一、先了解手机系统二、Android 11 以下使用adb 命令永久关闭系统更新1、adb 官方下载2、小白开启 USB 调试模式教程(熟手跳过)三、Android 12 以上使用adb 命令永久关闭系统更新什么您还是不会弄!赞赏我&#x…

Map-JAVA面试常问

1.HashMap底层实现 底层实现在jdk1.7和jdk1.8是不一样的 jdk1.7采用数组加链表的方式实现 jdk1.8采用数组加链表或者红黑树实现 HashMap中每个元素称之为一个哈希桶(bucket),哈希桶包含的内容有以下4项 hash值(哈希函数计算出来的值) Key value next(…

100多个ChatGPT指令提示词分享

当前,ChatGPT几乎已经占领了整个互联网。全球范围内成千上万的用户正使用这款人工智能驱动的聊天机器人来满足各种需求。然而,并不是每个人都知道如何充分有效地利用ChatGPT的潜力。其实有许多令人惊叹的ChatGPT指令提示词,可以提升您与ChatG…

【服务器04】之【Navicat连接阿里云】

通过前三篇文章,现在我们测试可以连接数据库了 点开桌面的 接下找来的主机 地址在以下 登录阿里云 登陆账号后 点击控制台 输入RDS 弹出新页面,并点击运行中的 1 点管理 复制外网地址 鼠标靠近就会出现复制图标 用户名 和 密码 是注册阿里云的高权限账…

使用fastapi和pulumi搭建基于Azure云的IAC Restful API服务 — 对外发布

前言 在IAC(即Infrastructure As Code,基础设施即代码)领域,Terraform 是一个老牌工具,使用HCL(HashiCorp Configuration Language)语言来编写配置文件。它支持几乎所有主流的云提供商&#xf…

戴尔外星人原厂系统美版改国行正确识别本机SN,支持F12 Support Assist OS Recevory恢复重置识别SN服务编码

1.重新部署可以永久正确识别My Alienware和Support Assist服务编码 原厂系统远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f 2.安装有两个软件和官网主页会识别原机的SN码,就是本机服务编码(my Alie…

Day15—热点搜索词统计

一、要求 根据用户上网的搜索记录对每天的热点搜索词进行统计,以了解用户所关心的热点话题。 要求完成:统计每天搜索数量前3名的搜索词(同一天中同一用户多次搜索同一个搜索词视为1次)。 二、数据 三、配置scala环境 1.下载sca…

vue 中实现用户上传文件夹的功能

vue 中实现上传文件夹的功能 使用 input 元素的 webkitdirectory 属性使用 vue-simple-uploader 组件 vue 中文件上传一般都是用 element 中的 upload 组件,upload 组件可以实现单个文件或者多个文件的上传,但是无法通过选择文件夹上传其中文件。 要实现…

账号和权限的管理

文章目录 管理用户账号和组账号用户账号的分类超级用户普通用户程序用户 UID(用户id)和(组账号)GIDUID用户识别号GID组标识号 用户账号文件添加用户账号设置/更改用户口令 管理用户账号和组账号 用户账号的分类 超级用户 root 用户是 Linux 操作系统中默认的超级…

计算机毕业设计hadoop+spark+hive游戏推荐系统 游戏数据分析可视化大屏 steam游戏爬虫 游戏大数据 大数据毕业设计 机器学习 知识图谱

游戏推荐系统开题报告 一、引言 随着信息技术和网络技术的飞速发展,电子游戏已成为人们日常生活中不可或缺的一部分。然而,面对海量的游戏资源,用户往往难以找到适合自己的游戏。因此,构建一个高效、准确的游戏推荐系统显得尤为…

Go-知识并发控制mutex

Go-知识并发控制mutex 1. 介绍2. 数据结构2.1 Mutex 结构体2.2 Mutex 方法 3. 加锁解锁过程3.1 简单加锁3.2 加锁被阻塞3.3 简单解锁3.4 解锁并唤醒协程 4. 自旋过程4.1 什么是自旋4.2 自旋条件4.3 自旋的优势4.4 自旋的问题 5. Mutex 模式5.1 Normal 模式5.2 Starving 模式(饥…

React实现H5手势密码

监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker :RabbitMQ服务。 virtual host: 其实就是分组。 Connection:连接,生产者消费者与Broker之间的TCP连接。 Channel:网络信道,轻量级的Connection,使用Chann…