数学模型实验
实验一 一:商人过河
1、问题提出:三名商人各带一个随从乘船渡河,一只小船只能容纳二人,由他们自己划行。随从们密约,在河的任一岸,一旦随从人数比商人多,就商人越货。但是如何乘船渡河的大权掌握在商人们中。商人们怎样安全渡河呢?
2、模型构成 记第k次渡河前此案的商人数为xk,随从数
yk,k1,2,,xk,yk0,1,2,3.将二维向量sk(xk,yk)定义为状态。安全渡河条件下的状
态集合称为允许状态集合,记作S.
S{(x,y)|x0,y0,1,2,;x3,y0,1,2,3;xy1,2} (1)不难验证,S对此岸和彼岸都是安全的.
记第k次渡船上的商人数为uk,随从数为vk.将二维向量dk(uk,vk)定义为决策,允许决策集合记作 ,由小船的容量可知
D{(u,v)|1uv2.u,v0,1,2} (2) 因为k为奇数时船从此岸驶向彼岸,k为偶数时船由彼岸驶回此岸,所以状态随决策dk变化的规律是
sk1sk(1)kdk (3) (3)式称为状态转移律.制定安全渡河方案归结为 多步决策模型:
求决策dkD(k1,2,,n),使状态skS按照转移规律(3),由初始状态s1(3,3)经有限步n到达状态sn1(0,0)
3、程序设计:
function jueche=guohe n=input('输入商人数目: '); nn=input('输入仆人数目: '); nnn=input('输入船的最大容量: '); if nn>n
n=input('输入商人数目:'); nn=input('输入仆人数目:'); nnn=input('输入船的最大容量:'); end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 决策生成 jc=1; %决策向量放在矩阵d中,jc为插入新元素的行标初始为1; for i=0:nnn
for j=0:nnn
if (i+j<=nnn)&(i+j>0) % 满足条D={(u,v)|1<=u+v<=nnn,u,v=0,1,2} d(jc,1:3)=[i,j,1];%生成一个决策向量立刻扩充为三维; d(jc+1,1:3)=[-i,-j,-1]; % 同时生成他的负向量;
jc=jc+2; % 由于生成两个决策向量,则jc要向下移动两个; end end
j=0; end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 状态数组生成 kx=1; % 状态向量放在A矩阵中,生成方法同矩阵生成; for i=n:-1:0
for j=nn:-1:0
if ((i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))
% (i>=j)&((n-i)>=(nn-j)))|((i==0)|(i==n))为可以存在的状态的约束条件
A(kx,1:3)=[i,j,1]; %生成状态数组集合D ` A(kx+1,1:3)=[i,j,0];
kx=kx+2; end end j=nn; end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 将状态向量生成抽象矩阵
k=(1/2)*size(A,1); CX=zeros(2*k,2*k); a=size(d,1);
for i=1:2*k for j=1:a
c=A(i,:)+d(j,:) ;
x=find((A(:,1)==c(1))&(A(:,2)==c(2))&(A(:,3)==c(3))) ;
v(i,x)=1; %x为空不会改变v值 end end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% dijstra算法 x=1; y=size(A,1); m=size(v,1); T=zeros(m,1); T=T.^-1;
lmd=T; P=T; S=zeros(m,1); S(x)=1; P(x)=0; lmd(x)=0; k=x; while(1) a=find(S==0); aa=find(S==1); if size(aa,1)==m break; end
for j=1:size(a,1) pp=a(j,1); if v(k,pp)~=0
if T(pp)>(P(k)+v(k,pp)) T(pp)=(P(k)+v(k,pp)); lmd(pp)=k; end end end mi=min(T(a)); if mi==inf break; else
d=find(T==mi); d=d(1); P(d)=mi; T(d)=inf; k=d; S(d)=1;
end end
if lmd(y)==inf
jueche='can not reach'; return; end
jueche(1)=y; g=2; h=y; while(1) if h==x break; end
jueche(g)=lmd(h); g=g+1; h=lmd(h); end
jueche=A(jueche,:); jueche(:,3)=[];
在matlab窗口输入 商人数目:3 随从数目:3
船的最大容量:2
二、施救药物中毒
1、问题提出:一个孩子两个 小时前一次性吞了11片治疗哮喘病的、剂量为没片100mg的氨茶碱片,已经出现呕吐、头晕等不良症状.氨茶碱的每次用量成人是100-200mg/kg,儿童是3-5mg/kg,如果用量过高,会使血液浓度过高。当血药浓度达到100ug/ml时,会出现严重中毒,达到200则可致命.
2、问题调查与分析:人体服用一定量的药物后,血药浓度与人体的血液总量有关。血液总量约为体重的7%-8%,即体重50-60kg的成年人有4000ml左右的血液。孩子的体重约为成年人的一半,所以血液总量为2000ml。血液系统对药物吸收和排除率的半衰期分别为5h、6h。
3、模型的假设和建立:为了判断孩子的血液浓度会不会达到危险的水平,需要求得胃肠道和血液系统中的药量随时间变化的规律。记肠胃道的药量为x(t),血液系统的药量为y(t),时间t以孩子误服药的时刻为起点(t=0)。根据前面的调查与分析可作以下假设: (1)胃肠道中药物向血液系统的转移率与药量X(t)成正比,比例系数记作(>0),总剂量x mg的药物在t=0瞬间进入胃肠道。
(2)血液系统中药物的排除率与药量y(t)成正比,比例系数记作(u>0),t=0是血液中无药物。
(3)氨茶碱被吸收的半衰期为5小时,排除的半衰期6小时。 孩子的血液总量为2000ml,成人的血液总量为4000ml。
根据假设对胃肠道中药量X(t)和血液系统中药量y(t)建立服下模型。 有假设1,X(0)=x,随着药物从胃肠道向血液系统的转移,X(t)下降的速度与X(t)本身成正比(比例系数0),所以X(t)满足微分方程
dxx,x(0)1100 (1) dt由假设2,y(0)=0,药物从胃肠道向血液系统的转移相当于血液系统对药物的吸收,y(t)由于吸收作用而增长的速度是x,由于排除而减少的速度与y (t)本身成正比(比例系数>0),所以y(t)满足微分方程
dyxy,y(0)0 (2) dt 方程(1),(2)中的参数和可由假设3的半衰期确定。 模型求解 微分方程(1)是可分离变量方程,容易得到
x(t)1100et (3)
表明胃肠道中的药量X(t)随时间单调减少并趋于零。为了确定,利用药 物吸收的半衰期为
5,即x(t)1100e5tx(0)/21100/2,得
(l2)n/50.13(18/h6)。
因此可求得y(t)1100tt(ee) (4)将0.1386和0.1155带入(3)、(4)中可得到想
x(t)1100e0.1386t (5)
y(t)11000.1155t0.1386t (ee) (6)
根据假设4,孩子的血液总量为2000ml,出现严重中毒的血药浓度100g/mg和致命的血药浓度200g/mg分别相当与血液中药量y达到200mg和400mg。由(6)容易精确的算出y(2)=236.5mg,计算药量达到400mg的时间为t1,解非线性方程
6600(e0.1155t1e0.138.6t1)400,用matlab软件计算可以得到t14.87h.
施救方案:若用口服活性炭来吸附药物的办法施救,药物的排除率可增加到的2倍,即0.2310.设孩子达到医院时刻(t=2)就开始施救,由(2)、(3),建立新的模型为
dyxz,t2,x1100t,z(2)236.5 (7) dt解得0.2310时,(7)的解为
z(t)1650e0.1386t1609.5e0.2310t,t2 (8)
用matlab对x(t),y(t),z(t)作图得:
施救后血液系统中药量z(t)。x(t),y(t)。
由图中可以看出血液中药量z(t)达到最大值的时间约在t=5h,即到达医院施救后3h,其精确值可由(8)算出,记t3,t3=5.26h,且z(t3)=318.4mg,远低于y(t)的最大值和致命水平。
4、程序如下: t=0:25;
x=1100*exp(-0.1386*t); plot(t,x); hold on
y=6600*(exp(-0.1155*t)-exp(-0.1386*t)); plot(t,y) hold on
t=2:25
z=1650*exp(-0.1386*t)-1609.5*exp(-0.2310*t); plot(t,z)
title('胃肠道中药量x(t)和血液系统中药量y(t)') xlabel('t/h')
ylabel('x,y,z/mg') text(5,400,'y(t)') text(2.5,800,'x(t)') text(5,300,'z(t)') grid on
三、饮料厂的生产与检修 (一)饮料厂的检修与生产计划
1、问题提出:如果工厂必须在未来四周的某一周中安排一次设备检修,检修将占用当周的15千箱的生产能力,但会使检修以后每周的生产能力提高5千箱,则检修应该安排在哪一周?
2、模型假设:设饮料厂在第一周开始没有库存;从费用最小考虑,自然的假设第4周末也不能有库存;周末有库存时需支出一周的存储费;每周末的库存量就是下周初的库存量。 3、模型构造与求解:
列出线性规划模型与约束条件:
minz5.0x15.1x25.4x35.5x40.2(y1y2y3) (1)
S.t x1y115 (2-1)
x1y1y225 (2-2) x3y2y335 (2-3) x4y325 (2-4) x130,x240,x345,x420 (3) x1,x2,x3,x4,y1,y2,y30 (4) 将
以
上
模
型
输
入
LINGO
求
解
,
可
以
得
到
最
优
解
(x1,x2,x3,x4,y1,y2,y3)(15,40,25,20,0,15,5),
实际上,由于检修后生产能力发生变化,把检修安排在第一周和第二周不一定是最佳选择。引入0-1变量1,2,3,4,用t1表示检修安排在t周(t1,2,3,4)。所以上面的约束条件需修改为
x115130 (1)
x215215140 (2) x3153525145 (3) x415451525320 (4)
同时,模型中还需要增加关于1,2,3,4的约束
12341 (5) 1,2,3,4{0,1} (6)
利用LINGO编辑程序及结果如下: 线性规划: 程序(1)
结果:
程序(2)
即当将检修安排在第一周,每周的生产量分别为15千箱、45千箱、15千箱、25千箱,最小总费用从528千元下降为527千元。
(二)饮料厂的生产批量问题
1、问题提出:某饮料厂使用同一条生产线轮流生产多种饮料满足市场需求。如果某周开工生产其中一种饮料,就要清洗设备和更换部分部件,于是需支出生产准备费8千元。假设其未来四周需求量、生产能力、生产成本与例1给出的完全相同。问应如何安排这种饮料的生产计划,在按时满足市场需求的条件下,使生产该饮料的总费用最小?
2、问题分析假设:这一问题与例1中最主要的差别是:除了考虑随产品数量的变化的费用外,还要考虑与产品数量无关的费用,即生产准备费。
3、设需要考虑时间跨度T个小时段,在t时段的市场需求dt,生产能力为Mt(t=1,2,...T)。如果第t时段开工生产,则需付出生产准备费为st0,单件生产成本为ct0。在t时段末,如果有产品库存,单件产品1个时段的存储费为ht0。
假设在t时段,产品的生产量为xt(0),t时段末产品的库存为yt(0),合理的假设
y0y0。产量、需求与库存之间的平衡关系同前。
为了表述在t时段是否生产这种饮料,从而确定是否要支付生产准备费,引进0-1变量t,
t1表示生产,t0表示不生产。所以模型如下:
minz(sttctxthtyt) (7)
t1Ts.t. yt1xtytdt, t1,2,,T (8)
1,xt0,t{t1,2,,T (9)
0,xt0,xtMt,t1,2,,T (10) y0y0, (11) xt,yt0,t1,2,,T (12)
将(9),(10)合并表示为xtMtt,或用xtMtt0,t1,2,,T代替。用LINGO写程序求解如下:
程序(3)
求得生产计划为:4周的生产量分别为15、40、45、0千箱,最小总费用为554千元。与例1比,这里只在前三周生产,虽然存储费增加了,但节省了生产准备费。
四、钢管和易拉罐下料
(一)钢管下料
1、问题提出:某钢管零售商从钢管厂进货。按照顾客的要求切割后出售,从钢管厂进货时得到的原料都是19m。
(1)现有一个客户需要50根4m、20根6m和15根8m的钢管。应如何下料最节省? (2)零售商如果采用不同切割模式太多,将会导致生产过程的复杂化,从而增加生产和管理成本,所以该零售商规定采用的不同模式不能超过3种。此外,该客户除了需要(1)中的三种钢管,还需要10根5m的钢管。应如何下料最节省?
2、问题分析与假设:决策变量 用x表示按照第i种模式(i1,2,7)切割的原料钢管的根数,显然它们应该是非负数。 3、模型建立: 决策目标与约束条件:
minz13x1x23x33x4x5x63x7 (1)
minz2x1x2x3x4x5x6x7 (2)
4x13x22x3x4x550 (3) x22x4x53x620 (4) x3x52x715 (5)
对于问题二,与一类似,一个合理的切割模式的余料不应该大于或等于客户需要的钢管的最小尺寸,切割计划只适合合理的切割模式,而由于本题中的参数都是整数,所以合理的切割模式余量不能大于3.所以可以用xi表示第i中模式(i=1,2,3)切割的原料钢管的根数,显然它们应当是非负整数,设所使用的第i中切割模式下没根原料钢管生产4m,5m,6m和8m的钢管数量分别为r1i,r2i,r3i,r4i(非负整数)。 决策目标和约束条件:
minzx1x2x3 (6) r11x1r12x2r13x350 (7) r21x1r22x2r23x310 (8) r31x1r32x2r33x320 (9) r41x1r42x2r43x315 (10)
每一种切割模式必须可行、合理,所以每根原料钢管的成品量不能超过19m,也不能少于16m(余量不能大于3m),于是
164r115r126r318r4119 (11)
164r125r226r328r4219 (12) 164r135r236r338r4319 (13)
由于三种切割模式的排列顺序是无关紧要的,所以不妨增加一些约束条件。
x1x2x3 (14)
原料钢管的总根数不可能少于450510620815126根。其次,考虑一19种非常特殊的生产计划:第一种切割模式下只生产4m钢管,一根原料钢管切割成4根4m钢管,为满足50根4m钢管的需求,需要13根原料钢管;第二种切割模式下只生产5m、6m钢管,一根原料钢管切割成1根5m钢管和2根6m钢管,为满足10根5m和20根6m钢
管需求,需要10根原料钢管;第三中切割模式下只生产8m钢管,一根原料钢管切割成2根8m钢管,为满足15根8m钢管的需求,需要8根原料钢管。于是满足要求的这种生产计划共需1310831根原料钢管,这就得到了最优解的一个上界。所以可增加以下约束条件:
26x1x2x331 (15)
4、程序设计:
程序(1):
结果:
解得最优解为:x212,x515,其余全为0,。即按照模式2切割12根,模式5切割15根,共27根,总余料量为27根。显然在总余料量最小的目标下,最优解将是使用余料尽可能小的切割模式,这将会导致切割原料钢管的总根数较多。 程序(2):
结果:
即按照模式1、2、3分别切割10,10,8根原料钢管,使用原料总数为28根。第一种切割模式下一根原料钢管切割成3根4m钢管和1根6m钢管;第二中切割模式下一根原料钢管切割成2根4m、1根5m钢管和1根6m钢管;第三种切割下一根原料钢管切割成2根8m钢管。但这个模型的解并不唯一。
(二)易拉罐下料
1、问题提出:某公司采用一套冲压设备生产一种罐装饮料的易拉罐,易拉罐为圆柱形,包括罐身、上盖和下底,罐身高10cm,上盖和下底的直径均为5cm。该公司使用两种不同规格的镀锡板原料:规格1的镀锡板为正方形,边长24cm;规格2的镀锡板为长方形,长、宽分别为32cm和28cm。由于生产设备和生产工艺的,对于规格2的镀锡板原料。只能按照模式4进行冲压。使用模式1、模式2、模式3、模式4 进行每次冲压所需要的时间分别为1.5s、2s、1s、3s。
该工厂每周工作40h,每周可供使用的规格1、规格2的镀锡板原料分别为5万张和2万张。目前每只易拉罐的利润为0.10元,原料余料损失为0.001元/cm(如果周末有罐身、上盖或下底不能配套组装成易拉罐出售,也看做是原料余料损失)。
222、问题分析;已知上盖和下底的直径d=5cm,可得面积为sd/d19.6cm,周长为
Ld15.7cm;已知罐身高为h=10cm。可得其面积为ShL157.1cm2。于是模式1
下的余料损失为24210sS222.6cm2。 3、模型建立:
用xi表示按照第i种模式的冲压次数(i=1,2,3,4),y1表示一周生产的易拉罐个数。为计算不能配套组装的罐身和底、盖造成的原料损失,用y2表示不配套的罐身个数,y3表示不配套的底、盖个数。虽然实际上xi和y1y2,y3应该是整数。但是由于生产量相当大,可以把它们看成是实数,从而用线性规划模型处理。 决策目标和约束条件:
假设每周生产的易拉罐能够全部售出,公司每周的销售量利润是0.1y1.原料余料损失包括两部分:4种冲压模式下的余料损失和不配套的罐身和底、盖造成的原料损失。按照前面的计算及前面的结果,总损失为
222.6x1183.3x2261.8x3169.5x4157.1y219.6y3. 0.001222.6x1183.3x2261.8x3169.5x4157.1y219.6y3 maxz0.1y10.001(16)
1.5x12x2x33x4144000 (17)
每周可供使用的规格1、规格2的镀锡板原料分别为50000张和20000张,即
x1x2x350000 (18)
x420000 (19)
一周生产的罐身个数为x12x24x4,一周生产的底、盖个数为10x14x216x35x4,因为应尽可能将它们配套组装成易拉罐销售。所以y1满足
ymin{x12x24x4,(10x14x216x35x4)/2} (20)
这时不配套的罐身个数y2和不配套的底、盖个数y2应为
y2x12x24x4y1 (21) y310x14x216x35x42y1 (22)
y1x12x24x4 (23) y1(10x14x216x35x4)/2 (24)
由于(17)——(19)中右端的数值过大,模型中数据之间的数量级不匹配,此时LINGO在计算时容易产生较大的误差。因此把它改为:
1.5x12x2x34x414.4 (25) x1x2x35 (26)
x42 (27)
4、程序设计:
实验二
一、线性回归
1、问题提出:在某产品表明腐蚀刻线,下表是试验活得的腐蚀时间(x)与腐蚀深度(y)间的一组数据。试研究两变量(x,y)之间的关系。 X y 5 5 5 6 10 8 20 13 30 15 40 17 50 19 60 25 65 25 90 29 100 35 其中:x------腐蚀时间(秒); ------腐蚀深度(y)(m)。 要求: 1)画出散点图,并观察y与x的关系;
bx,求出a与b的值; 2)求y关于x的线性回归方程:ya3)对模型和回归系数进行检验;
4)预测x=120时的y的置信水平为0.95的预测区间。
5)编程实现上述求解过程。
程序解释:
[b, bint,r,rint,stats]=regress(Y,X,alpha) 求回归系数的点估计和区间估计、并检验回归模型
b:回归系数的估计值
bint:表示回归系数的区间估计. r:表示残差
rint:表示置信区间
stats:表示用于检验回归模型的统计量,有三个数值:相关系数r2、F值、与F对应的概率p
2、程序设计:
>> x1=[0 5 10 20 30 40 50 60 65 90 100]'; >> x=[ones(11,1),x1];
>> y=[5 6 8 13 15 17 19 25 25 29 35]'; >> [b,bint,r,rint,stats]=regress(y,x,0.05) b =
5.6273 0.2874
bint =
4.0401 7.2146 0.2578 0.3171 r =
-0.6273 -1.06 -0.5018 1.6238 0.7493 -0.1251 -0.9996 2.1259 0.6887 -2.4974 0.6281
rint =
-3.4880 2.2333 -3.9122 1.7830 -3.5054 2.5018 -1.2128 4.4603 -2.3692 3.8678 -3.3232 3.0729 -4.0904 2.0912 -0.5307 4.7826 -2.3853 3.7627
-4.5073 -0.4875
-1.9681 3.2244
stats =
0.9816 479.8521 画图:>> rcoplot(r,rint)
0.0000 1.9575
结果分析:从残差图可以看出,除第10个数据外,其余数据的残差离
零点均较近,且残差的置信区间均包含零点,第10个数据可视为异常点(剔除)。
所以剔除数据再计算:
clear all;clc
x1=[0 5 10 20 30 40 50 60 65 100]'; x=[ones(10,1), x1];
y=[5 6 8 13 15 17 19 25 25 35]'; [b,bint,r,rint,stats]=regress(y,x,0.05) rcoplot(r,rint) 运行结果为:
b =
5.3232 0.3020 bint =
4.0806 6.5658 0.2763 0.3277 r =
-0.3232 -0.8333 -0.3434 1.63 0.6162 -0.4040
-1.4242 1.5556 0.0455 -0.5253 rint =
-2.5344 1.8880 -3.0035 1.3368 -2.6625 1.9756 -0.3081 3.5809 -1.7762 3.0085 -2.8398 2.0317 -3.5243 0.6758 -0.4081 3.5192 -2.3014 2.3923 -2.2415 1.1910 stats =
0.92 733.5467 0.0000 1.1080
从残差图可以看出,数据的残差离零点均较近,且残差的置信区间均包含零点,说明回归模型
y= 5.3232+ 0.3020x能较好的符合原始数据,
二、多元线性回归问题
1、问题提出:根据下述某猪场25头育肥猪4个胴体性状的数据资料,试进行瘦肉量y对眼肌面积(x1)、腿肉量(x2)、腰肉量(x3)的多元线性回归分析。
序 号 瘦肉量 y(kg) 眼肌面积 x1(cm2) 腿肉量 x2(kg) 腰肉量 x3(kg) 序号 瘦肉量y(kg) 眼肌面积x1(cm2) 腿肉量x2(kg) 腰肉量x3(kg) 1 2 3 4 5 6 7 8 9 10 11 12 13 15.02 12.62 14.86 13.98 15.91 12.47 15.80 14.32 13.76 15.18 14.20 17.07 15.40 23.73 22.34 28.84 27.67 20.83 22.27 27.57 28.01 24.79 28.96 25.77 23.17 28.57 5.49 4.32 5.04 4.72 5.35 4.27 5.25 4.62 4.42 5.30 4.87 5.80 5.22 1.21 1.35 1.92 1.49 1.56 1.50 1.85 1.51 1.46 1.66 1. 1.90 1.66 14 15 16 17 18 19 20 21 22 23 24 25 15.94 14.33 15.11 13.81 15.58 15.85 15.28 16.40 15.02 15.73 14.75 14.35 23.52 21.86 28.95 24.53 27.65 27.29 29.07 32.47 29.65 22.11 22.43 20.04 5.18 4.86 5.18 4.88 5.02 5.55 5.26 5.18 5.08 4.90 4.65 5.08 1.98 1.59 1.37 1.39 1.66 1.70 1.82 1.75 1.70 1.81 1.82 1.53 要求: 1)画出散点图y与x1,y与x2,y与x3并观察y与x1,x2,x3的关系;
0axaxax-----(1)2)求y关于x1,x2,x3的线性回归方程:,求出ya112233a0,a1,a2,a3的值;
3)对上述回归模型和回归系数进行检验;
10ax----(2)4)再分别求y关于单个变量x1,x2,x3的线性回归方程:,ya11120ax-----(3),30ax--- --(4)求出a的值; yayaij22233310axax----(2’),分别求y关于两个变量x1,x2, x3的线性回归方程:ya11112220axax---(3’),30axax --- --(4’)求出系数a的值;并yayaij211222311322说明这六个回归方程对原来问题求解的优劣。
5)编程实现上述求解过程。 2、程序设计:
>> x1=[23.73 22.34 22.34 27.67 20.83 22.27 27.57 28.01 24.79 28.96 25.77 23.17 28.57 23.52 21.86 28.95 24.53 27.65 27.29 29.07 32.47 29.65 22.11 22.43 20.04];
>> x2=[5.49 4.32 5.04 4.72 5.35 4.27 5.25 4.62 4.42 5.30 4.87 5.80 5.22 5.18 4.86 5.18 4.88 5.02 5.55 5.26 5.18 5.08 4.90 4.65 5.08];
>> x3=[1.21 1.35 1.92 1.49 1.56 1.50 1.85 1.51 1.46 1.66 1. 1.90 1.66 1.98 1.59 1.37 1.39 1.66 1.70 1.82 1.75 1.70 1.81 1.82 1.53];
>> y=[15.02 12.62 14.86 13.98 15.91 12.47 15.80 14.32 13.76 15.18 14.20 17.07 15.40 15.94 14.33 15.11 13.81 15.58 15.85 15.28 16.40 15.02 15.73 14.75 14.35]; >> subplot(2,2,1);plot(x1,y,'b*');title('眼肌面积') >> subplot(2,2,2);plot(x2,y,'r*');title('腿肉量')
>> subplot(2,2,3);plot(x3,y,'k*');title('腰肉量')
x1=[23.73 22.34 22.34 27.67 20.83 22.27 27.57 28.01 24.79 28.96 25.77 23.17 28.57 23.52 21.86 28.95 24.53 27.65 27.29 29.07 32.47 29.65 22.11 22.43 20.04]'; >> x=[ones(25,1),x1];
>> y=[15.02 12.62 14.86 13.98 15.91 12.47 15.80 14.32 13.76 15.18 14.20 17.07 15.40 15.94 14.33 15.11 13.81 15.58 15.85 15.28 16.40 15.02 15.73 14.75 14.35]'; >> [b,bint,r,rint,stats]=regress(y,x,0.05) 结果为: b =
12.5432 0.0931
bint =
9.0744 16.0119 -0.0423 0.2284 r =
0.2680 -2.0026 0.2374 -1.1387 1.4280 -2.1461 0.6906
-0.8303 -1.0906 -0.0588 -0.7418 2.3702 0.1975 1.2076 -0.2479 -0.1278 -1.01 0.4632 0.7667 0.0310 0.8345 -0.2830 1.1288 0.1190 -0.0585 rint =
-1.9234 -3.9798 -1.9255 -3.2653 -0.56 -4.0916 -1.4751 -2.9772 -3.2429 -2.2108 -2.9240 0.4515 -1.95 -0.9180 -2.39 -2.2796 -3.1740 -1.7128 -1.3990 -2.1176 -1.1110 -2.4076 2.4595 -0.0254 2.4004 0.9879 3.4456 -0.2005 2.8563 1.3166 1.0617 2.0933 1.4404 4.28 2.3595 3.3332 1.9006 2.0239 1.1411 2.6391 2.9324 2.1796 2.7801 1.8416
-0.9719 3.2296 -2.0482 2.2863 -2.1359 2.01 stats =
0.0809 2.0244 0.1682 1.1342 画图:rcoplot(r,rint)
同理题一可知,剔除残差较大的数据。
>> x1=[23.7 22.34 27.67 20.83 27.57 28.01 24.79 28.96 25.77 28.57 23.52 21.86 28.95 24.53 27.65 27.29 29.07 32.47 29.65 22.11 22.43 20.04]';
>> y=[15.02 14.86 13.98 15.91 15.80 14.32 13.76 15.18 14.20 15.40 15.94 14.33 15.11 13.81 15.58 15.85 15.28 16.40 15.02 15.73 14.75 14.35]'; >> x=[ones(22,1),x1];
>> [b,bint,r,rint,stats]=regress(y,x,0.05) b =
13.5266 0.0581 bint =
10.87 16.1886 -0.0442 0.1604 r =
0.1161 0.0352 -1.1546 1.1729 0.6713 -0.8343 -1.2072 -0.0295 -0.8241 0.2131 1.0466 -0.4669 -0.09 -1.1421 0.4466 0.7375 0.01 0.9865 -0.2296 0.9185 -0.0801 -0.3412
rint =
-1.4473 -1.5023 -2.6219 -0.2085 -0.87 -2.3455 -2.6740 -1.5745 -2.3542 -1.3367 -0.4326 -1.9752 -1.35 -2.6185 -1.1069 -0.7947 -1.4781 -0.3494 1.6796 1.5726 0.3128 2.5544 2.2072 0.6769 0.2596 1.5154 0.7059 1.7630 2.5258 1.0413 1.4456 0.3343 2.0002 2.2698 1.6063 2.3224
-1.7534 1.2941 -0.5486 2.3857 -1.6193 1.4592 -1.7914 1.1091 stats =
0.0656 1.4035 0.2500 0.5710
>> rcoplot(r,rint)
参数回归结果为对应的置信区间分别为[ -1.2103 3.2561];;[ -0.0318 0.0824];[1.5526 2.4360];[1.0444 2.7813]
r2=0.9226(越接近于1,回归效果越显著),F= 63.5671, p=0.0000,由p<0.05, 可知回归模型
y= 1.0229-0.0253*x1+1.9943*x2+1.9128*x3成立。
再分别求y关于单个变量x1,x2, x3的线性回归方程
y=13.59+0.0547*x1 y= 5.6018+1.8453*x2 y= 7.1238+4.7430*x3
分别求y关于两个变量x1,x2, x3的线性回归方程
y=1.0113+0.0252*x1+2.6057*x2 y=2.0661+0.0318*x2+2.3961*x3 y=6.0781+0.0806*x1+4.0719*x3
三、优化理论中的线性规划问题---生产安排
1、问题提出:某公司打算利用具有下列成分(见下表)的合金配制一种新型合金100公斤,新合金含铅,锌,锡的比例为3:2:5。
合金品种 含铅% 含锌% 含锡% 单价(元/kg) 1 30 60 10 2 10 20 70 3 50 20 30 4 10 10 80 5 50 10 40 8.8 8.6 6.0 8.9 5.7 要求:(1)根据题意,列出该问题的线性规划模型;
(2)利用单纯形法求解(1)中的模型,并写出分配方案; (3)编程实现上述求解过程;
(4)利用程序验证上述模型的最优解。 2、程序设计
2、3、4、5) 设每种合金品种取值xi千克 (i1、根据题意建立线性规划方程得:
目标费用最小
fx=8.6*x16*x28.9*x35.7*x48.8*x5;
x1x2x3x4x5100;
(30*x1+10*x2+50*x3+10*x4+50*x5)(60*x1+20*x2+20*x3+10*x4+10*x5)=1.5;30*x110*x250*x310*x450*x510*x170*x230*x380*x440*x50.660*x120*x220*x310*x410*x510*x170*x230*x380*x440*x50.4
结果为:
结果分析
当x1=11.1111 x2=0 x3=44.44444 x4=44.44444 x5=0时
取得费用最小值为 744.4444元
当铅减少1单位时总费用将减少7.4444元 当锌减少1单位时总费用将增加1.703704元 当锡减少1单位时总费用将减少230.0926元
四、非线性方程求解
1、问题提出:分别用二分法、牛顿切线法、迭代法求解非线性方程sinx负实数根。
要求:(1)精确到10,取不同的初值计算,输出初值、根的近似值和迭代次数,分
析根的收敛域。
(2)编写二分法、牛顿切线法的程序。(可以用Matlab或C语言)。 (3)迭代法求解(可构造不同的迭代公式,如xn12tanxn等)。 (4)比较三种方法的优劣。
2、模型程序设计求解:
迭代法求解
6x0的非3首先要确定方程实数根存在的大致范围。为此,先将方程变成标准形式f(x)
x=sinx0。作f(x)的曲线图:
3>> x=-2*pi:0.1:2*pi; >> f=sin(x)-x./3; >> plot(x,f);grid on;
从曲线上可以看出,函数的零点大约在x1 ≈0和x2 ≈ 2.2附近
(1) 直接使用指令 fzero 求出方程在x1 ≈ 0时的根。
>> x1=fzero('sin(x)-x/3',0) x1 = 0
(2) 若键入:fzero (' in(x)-x/3',0, optimset('disp', 'iter')),将显示迭代过程。
matlab运行结果为:
中间数据表明,求根过程中不断缩小探测范围,最后得出0满足精度的近似根。
(3) 求x2 ≈ 2.2的根: (4)
>> x2=fzero (' sin(x)-x/3',2.2, optimset('disp', 'iter')) 结果为:
Search for an interval around 2.2 containing a sign change:
Func-count a f(a) b f(b) Procedure
1 2.2 0.0751631 2.2 0.0751631 initial interval
3 2.13777 0.130936 2.26223 0.0162604 search
5 2.112 0.1530 2.288 -0.00902002 search
Search for a zero in the interval [2.112, 2.288]:
Func-count x f(x) Procedure 5 2.288 -0.00902002 initial 6 2.27821 0.000474 interpolation 7 2.27886 2.26228e-006 interpolation 8 2.27886 -5.49827e-012 interpolation 9 2.27886 -1.11022e-016 interpolation 10 2.27886 -1.11022e-016 interpolation
Zero found in the interval [2.112, 2.288] x2 =
2.27
中间数据表明,求根过程中不断缩小探测范围,最后得出2.27满足精度的近似根。
二分法求解: 程序为:
建立M文件:
function root=HalfInterval(f,a,b,eps) if(nargin==3) eps=1.0e-6; end
f1=subs(sym(f),findsym(sym(f)),a); f2=subs(sym(f),findsym(sym(f)),b); if(f1==0) root=a; end if(f2==0) root=b; end
if(f1*f2>0)
disp('两端点函数值乘积大于0! '); return; else
root=FindRoots(f,a,b,eps); end
function r=FindRoots(f,a,b,eps) f_1=subs(sym(f),findsym(sym(f)),a); f_2=subs(sym(f),findsym(sym(f)),b); mf=subs(sym(f),findsym(sym(f)),(a+b)/2);
if(f_1*mf>0) t=(a+b)/2;
r=FindRoots(f,t,b,eps); else
if(f_1*mf==0) r=(a+b)/2; else
if(abs(b-a)<=eps) r=(b+3*a)/4; else
s=(a+b)/2;
r=FindRoots(f,a,s,eps); end
end
在窗口运行: >> f=inline('sin(x)-x/3') HalfInterval(f,1,3) f =
Inline function: f(x) = sin(x)-x/3 ans =
2.27
x2=2.27,x0=0;
五、非线性回归问题-------多项式回归
1、问题提出:给动物口服某种药物A 1000mg,每间隔1小时测定血药浓度(g/ml),得到表9-5的数据(血药浓度为5头供试动物的平均值)。血药浓度与服药时间测定结果表:
服药时间x(小时) 血药浓度y(g/ml)
1 21.
2 47.13
3 61.86
4 70.78
5 72.81
6 66.36
7 50.34
8 25.31
9 3.17
要求:1)画出散点图y与x,并观察y与x的关系;
2)求y关于x的一元线性回归方程:ya0a1x1-----(1),求出a0,a1的值; 3)对上述回归模型和回归系数进行检验;
4)再求y关于x的一元多项式线性回归方程。(如: ya0a1x1a2x2----(2))求出a1,a2,a3的值,并比较二个回归方程对原来问题求解的优劣。
^^2^^
5)编程实现上述求解过程。 2、程序设计:
>> x=[1 2 3 4 5 6 7 8 9];
>> y=[21. 47.13 61.86 70.78 72.81 66.36 50.34 25.31 3.17]; >> plot(x,y,'b*');title('血药浓度与服药时间'); >> A=[ones(size(x));x]'; >> a=A\\y' a =
60.6111 -2.7967
>> b=[ -2.7967 60.6111]; >> y=poly2str(b,'x')
结果为:
由图上可观察出y与x之间曲线大致为抛物线。 y =
-2.7967 x + 60.6111
即a060.6111,a12.7967。 第二中线性回归方程: >> c=A\\y'
c =
-8.3655
34.8269
-3.7624
>> d=[-3.7624 34.8269 -8.3655]; >> y=poly2str(d,'x') 结果为: y =
-3.7624 x^2 + 34.8269 x - 8.3655
即a33.7624,a234.8269,a08.3655。 对回归模型和回归系数进行检验:
>> x=[1 2 3 4 5 6 7 8 9]';
>> y=[21. 47.13 61.86 70.78 72.81 66.36 50.34 25.31 3.17]'; >> x1=[ones(9,1), x];
>> [b,bint,r,rint,stats]=regress(y,x1,0.05) 结果为: b =
60.6111 -2.7967
bint =
17.5913 103.6309 -10.4415 4.8482 r =
-35.9244 -7.8878 9.63 21.3556 26.1822 22.52 9.3056 -12.9278 -32.2711
rint =
-72.5693 0.7204 -62.3381 46.5626 -47.6076 66.8854 -34.7095 77.4206
-28.5685 80.9330 -33.1065 78.13 -47.9923 66.6034 -66.4728 40.6173 -71.9576 7.4154 stats =
0.0966 0.7483 0.4157 627.1365
>> rcoplot(r,rint)
由图中可看出与所求的线性方程非常符合。数据的残差离零点距离较近,说明回归模型
y =-2.7967 x + 60.6111能较好的符合原始数据。
六、非线性规划问题
1、问题提出:现有两种原料A和B数量分别为1200千克和1500千克,需要分配用于生产3种产品.其中每种产品生产的产量Q与两种原料的关系分别为:
Q1(x,y)0.005x2y,Q2(x,y)0.008xy2,Q3(x,y)0.01xy
每种产品的利润函数为:
2R(Q)10Q0.01Q
问:应如何分配,才能使生产三种产品的总利润最大.
要求: 1)介绍非线性规划理论; 2)求出最优解. 2、问题建模: 决策变量:
设 A数量分给三种产品的数量为x1,x2,x3,B数量分别为y1,y2,y3,三种产品的产量分别为Q1,Q2,Q3,则总利润为R。 目标函数:
22Q10.005x1y1,Q20.008x2y2,Q30.01x3y3
maxR100.005x1y10.01(x1y1)2100.008x2y20.01(x2y2)2100.01x3y30.01(x3y3)2
2222S.t.
x1x2x31200 y1y2y31500
利用LINGO软件求得最优解。
结果为:
由上述可知最大的利润为:R0.4725。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baomayou.com 版权所有 赣ICP备2024042794号-6
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务