[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)
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)
正态变量的分布函数为且
标准正态变量的概率密度函数对应标准正态变量的分布函数。
标签:报童,50,450,550,二分法,normcdf,MATLAB,态变量,500 来源: https://blog.csdn.net/DARKNOTES/article/details/117618000