题目
某装饰公司欲以每桶二元的价格购入一批彩漆。现必须对彩漆的售价做出合理的决定。一般来说,售价越高,销售量就越少。经测算售价与销售量的关系如表一所示。但如果投入一定的广告费用后,销售量将会有所增长,增长量可由增长因子刻划。例如投入3万元的广告费增长因子为1.85;即投入3万元的广告费后,销售量将会是预售量的1.85倍。表二是广告公司提供的广告费与增长因子的关系。现请你帮装饰公司定出售价和投入广告的费用,使得所获得的利润最大。
表一 (元、千桶)
售价 | 2.00 | 2.50 | 3.00 | 3.50 | 4.00 | 4.50 | 5.00 | 5.50 | 6.00 |
预期销售量 | 41 | 38 | 34 | 32 | 29 | 28 | 25 | 22 | 20 |
表二
广告费(元) | 0 | 10.000 | 20.000 | 30.000 | 40.000 | 50.000 | 60.000 | 70.000 |
增长因子 | 1.00 | 1.40 | 1.70 | 1.85 | 1.95 | 2.00 | 1.95 | 1.80 |
x---预期销售量 y----售价 z------广告费 k-----销售增长因子
s----实际销售量 s=k*x c-----油漆单价c=2 r----利润
matlab求解过程
首先根据数据求预期销售量和售价的关系,增长因子和广告费用的关系。根据数据画出图像可知
x=a0*y+a1;线性关系
k=b0*(z^2)+b1*z+b2;二次曲线增长因子和广告费用
要求值为
max r=(y-c)*s-z (售价-单价)*实际销售数量-广告费用
r=(y-c)*(k*x)-z=(y-c)*(b0*(z^2)+b1*z+b2)*(a0*y+a1)-z;
x=a0*y+a1;线性关系
>> tx=[2.00 2.50 3.00 3.50 4.00 4.50 5.00 5.50 6.00]
tx =
2.0000 2.5000 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
>> ty=[41 38 34 32 29 28 25 22 20]
ty =
41 38 34 32 29 28 25 22 20
>> px=polyfit(tx,ty,1)
px =
-5.1333 50.4222
k=b0*(z^2)+b1*z+b2;二次曲线增长因子和广告费用
>> tx=[0 10 20 30 40 50 60 70]
tx =
0 10 20 30 40 50 60 70
>> ty=[1.00 1.40 1.70 1.85 1.95 2.00 1.95 1.80]
ty =
1.0000 1.4000 1.7000 1.8500 1.9500 2.0000 1.9500 1.8000
>> pk=polyfit(tx,ty,2)
pk =
-0.0004 0.0409 1.0187
变量为yz
r=(y-c)*(k*x)-z=(y-c)*(b0*(z^2)+b1*z+b2)*(a0*y+a1)*1000-z;
带入c=2、a0=-5.1333、a1=50.4222、b0=-0.0004、b1=0.0409、b2=1.0187
r=(y-2)*(-0.0004*(z^2)+0.0409*z+1.0187)*(-5.1333*y+50.4222)*1000-z;
要求r极大,是求-r极小。
-r=(y-2)*(-0.0004*(z^2)+0.0409*z+1.0187)*(-5.1333*y+50.4222)*1000-z;
.m文件
function [r,g]=fsolvefun(x)
%UNTITLED Summary of this function goes here
% r=(y-c)*(k*x)-z=(y-c)*(b0*(z^2)+b1*z+b2)*(a0*y+a1)-z; c=2
% x1价格y x2广告费用=z
% 求-r极小值
r=x(2)-(x(1)-2)*(-0.0004*(x(2)^2)+0.0409*x(2)+1.0187)*(-5.1333*x(1)+50.4222)*1000;
if nargout>1
g(1)=-(1000*(-0.0004*(x(2)^2)+0.0409*x(2)+1.0187)*((-5.1333*2)*x(1)+2*5.1333+50.4222));
g(2)=-((x(1)-2)*(-5.1333*x(1)+50.4222)*1000*(-0.0004*2*x(2)+0.0409)-1);%x2广告偏导hel
end
>> x0 =[ 2 10000]
x0 =
2 10000
>> options=optimset('Display','iter','tolfun',1e-18,'GradObj','on');
>> [r,fval]=fminunc('fsolvefun',x0,options);
错误,不知道是什么原因?
>> [r,fval]=fminunc('fsolvefun',x0,options);
??? Error using ==> feval
Undefined function or method 'fsolvefun' for input arguments of type 'double'.
Error in ==> fminunc at 236
[f,GRAD(:)] = feval(funfcn{3},x,varargin{:});
Caused by:
Failure in initial user-supplied objective function evaluation. FMINUNC cannot continue.