[MATLAB/编程]报童的诀窍/报童问题-图解法和二分法

MATLAB编程题目 : 报童的诀窍

关于每天报纸购进量的优化模型:

已知b为每份报纸的购进价,a为零售价,c为退回价(a>b>c),每天报纸的需求量为r份的概率是f( r )(r=0,1,2,…)。求每天购进量n份,使日平均收入,即
在这里插入图片描述
达到最大。

视r为连续变量,f( r )转化为概率密度函数p( r ),则所求n*满足

在这里插入图片描述

实验要求:

已知b=0.75,a=1,c=0.6,r服从均值=500(份),均方差=50(份)的正态分布。报童每天应购进多少份报纸才能使平均收入最高,这个最高收入是多少?

1.在这里插入图片描述的图解法(编程)

参考实验12-1的实验要求2,编写程序,求出n*。

初始根区间为[450,550],增量取0.01,随着根区间变小可改为0.001。

clc;
clear;

syms y1 y2 a b c z
a = 1;
b = 0.75;
c = 0.6;
z = 450:0.01:550;

y1 = (a-b)/(a-c);
y2 = normcdf(z,500,50)-normcdf(0,500,50); %分布函数

plot([450,550],[y1,y1])
hold on;
plot(z,y2);

grid on;

% 输出交点
fsolve(@(z) (a-b)/(a-c) - normcdf(z,500,50)-normcdf(0,500,50),[450 550])

下图可见,交点在520左侧

在这里插入图片描述

补充:

关于匿名函数

@运算符创建句柄,@(x)为函数的入口,指定函数当中的变量x为函数的输入,在接受函数和进行求解时,对象为x。

如下例子,

sqr = @(z) 2.*z
sqr(3)

% 输入的变量默认输入到z当中
-> 6

关于fsolve

fsolve(@(x) f(x))解决的问题为f(x)=0

如下例子

fsolve(@(z) (a-b)/(a-c) - normcdf(z,500,50)-normcdf(0,500,50),[450 550])

解释 : 在z = [450,550]之间,寻找(a-b)/(a-c) - normcdf(z,500,50)-normcdf(0,500,50) = 0的解

2.在这里插入图片描述的数值解法(二分法/编程)

参考实验12-1的实验要求3,编写程序,求出n和G(n)。

初始根区间为[450,550]。

erfen.m

function y=erfen(a,b)  %二分法
if fun(a)*fun(b)<0    
    c=(a+b)/2;
    while abs(fun(c))>1.0e-4    % 二分分界点
        if fun(a)*fun(c)<0
            b=c; c=(a+b)/2;
        elseif fun(c)*fun(b)<0
            a=c; c=(a+b)/2;
        end
    end
    y=c;
elseif fun(a)==0
    y=a;
elseif fun(b)==0
    y=b;
else
    disp('区间中不存在根');
end
return;

main.m

function main()
clc;
n = erfen(450,550) 

a=1;b=0.75;c=0.6;
r=n+1;
while (a-b)*n*normpdf(r,500,50)>exp(-6) 
    r=r+1;
end
r=n+1:r;
G = sum((a-b)*n*normpdf(r,500,50)); % 离散值求和
r=0:n;
G = G+sum(((a-b)*r-(b-c)*(n-r)).*normpdf(r,500,50))	% 离散值求和
return;

fun.m

function y=fun(z)  %方程
a = 1;
b = 0.75;
c = 0.6;
y = (a-b)/(a-c) - normcdf(z,500,50) - normcdf(0,500,50); % 构造函数差,方便二分查找
return;

1.计算正态变量的概率密度函数的调用形式为:Y=normpdf(X,mu,sigma)

正态变量的概率密度函数为在这里插入图片描述

其中:X是x的一组值,Y对应一组函数值。

mu为μ,sigma为σ。

当μ=0,σ=1时,为标准正态变量的概率密度函数。

2.计算正态变量的分布函数的调用形式为:P=normcdf(X,mu,sigma)

正态变量的分布函数为在这里插入图片描述在这里插入图片描述
标准正态变量的概率密度函数对应标准正态变量的分布函数。

  • 10
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
报童模型是一种用于库存管理的经典模型,它用于确定在需求不确定的情况下,报纸或杂志等商品的订货量。在 MATLAB 中,你可以实现报童模型来优化库存管理决策。 以下是一个简单的报童模型的 MATLAB 代码示例: ```matlab % 报童模型 demand = [10 15 12 18 20 14 16]; % 每天的需求量 cost_per_unit = 2; % 单位商品成本 selling_price = 5; % 单位售价 min_cost = Inf; % 初始化最小成本为无穷大 best_order = 0; % 初始化最佳订货量为0 for order = 1:max(demand) inventory = order; total_cost = 0; for day = 1:length(demand) sales = min(demand(day), inventory); % 当天销售量取决于需求和库存量 lost_sales = demand(day) - sales; % 当天丢失的销售量 inventory = inventory - sales; % 更新库存量 total_cost = total_cost + cost_per_unit * (order - inventory) + selling_price * sales; % 计算总成本 end if total_cost < min_cost min_cost = total_cost; best_order = order; end end disp(['最佳订货量为:' num2str(best_order)]); disp(['最小成本为:' num2str(min_cost)]); ``` 以上代码中,`demand` 表示每天的需求量,`cost_per_unit` 表示单位商品成本,`selling_price` 表示单位售价。代码通过遍历不同的订货量,计算总成本,并记录最小成本和对应的最佳订货量。 你可以根据自己的需求修改代码中的输入参数,运行代码即可得到最佳订货量和最小成本。希望对你有所帮助!如有需要,请继续提问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值