《数学建模》课程设计报告课题名称:施肥效果分析系(院):理学院专业:数学与应用数学班级:091******学生姓名:无名学号:091*********指导教师:许建强开课时间:2010-2011 学年二学期摘要对土豆和生菜分别绘制出他们的产量与三种营养元素之间关系的散点图,拟合两变量之间的关系式。
首先分别确定产量与施肥量之间的函数曲线类型,然后根据曲线类型对所求函数的对应关系进行假设,并利用已知数据计算出所需参数,最终确定变量之间的函数关系,得到最佳施肥量和最优产量。
关键词:施肥方案散点图曲线拟合 matlab一、问题重述:某地区作物生长所需的营养素主要是氮(N )、钾(K )、磷(P )。
某作物研究所在某地区对土豆与生菜做了一定数量的实验,实验数据如下列表所示,其中ha 表示公顷,t 表示吨,kg 表示公斤。
当一个营养素的施肥量变化时,总将另两个营养素的施肥量保持在第七个水平上,如对土豆产量关于N 的施肥量做实验时,P 与K 的施肥量分别取为196kg /ha 与372kg /ha 。
若氮(N )、钾(K )、磷(P )和土豆、生菜的市场价格如表1所示:表1 市场价格(元/吨)试分析施肥量与产量之间关系,并对所得结果从应用价值与如何改进等方面做出估计。
表2 土豆产量与施肥量的关系表3 生菜产量与施肥量的关系【设计任务】(1)根据题目要求建立模型并求解:(2)模型的应用与改进由于当一种肥料施肥量改变时,另外的两种肥料都保持在第7个水平上,于是有如下3个方案:(n,245,465),(259,p,465),(259,245,k)。
对上述方案分别求出最大利润,然后进行比较就可得到最佳施肥方案。
二、问题分析:利用散点图对所拟合问题的曲线类型做出判断。
当需要拟合的两变量之间的函数关系式,首先要确定所求函数对应曲线的类型,然后根据曲线类型对所求函数的对应关系进行假设,并利用已知数据计算出所需参数,最终确定变量之间的函数关系。
我们可以分别绘制出土豆和生菜的产量与施肥量的散点图,从图像的角度判断函数关系,再根据题目所给数据确定最终的函数。
三、模型的建立与求解:散点图:所用matlab程序为:k1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$L$3:$L$12'); y31=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$M$3:$M$12'); plot(k1,y31,'+')土豆产量与施肥量的关系由散点图猜测生菜产量y 与施肥量N 的关系式为:1121c n b n a y ++=y 与磷肥的量P 的函数为:2222c p b p a y ++= y 与钾肥的量K 的函数为:()kc eb a y 3331--=由matlab 解出:a1=-0.0003 b1=0.1971 c1=14.7416 a2=-0.0001 b2=0.0719 c2=32.9161 a3=42.7 b3=0.56 c3=0.01 土豆产量与施肥量的关系图:所用的matlab程序为:clearclcn1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$A$3:$A$12'); n2=n1.^2;y11=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$B$3:$B$12');p1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$C$3:$C$12'); p2=p1.^2;y21=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$D$3:$D$12'); k1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$E$3:$E$12'); y31=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$F$3:$F$12'); c=ones(10,1);d1(:,1)=n2;d1(:,2)=n1;d1(:,3)=c;x1=inv(d1'*d1)*d1'*y11d2(:,1)=p2;d2(:,2)=p1;d2(:,3)=c;x2=inv(d2'*d2)*d2'*y21x0=[42 0.55 0.05];x3=lsqnonlin ('shujunihe',x0)n=0:0.001:393;p=0:0.001:686;k=0:0.001:652;y1=x1(1)*n.*n+x1(2)*n+x1(3);y2=x2(1)*p.*p+x2(2)*p+x2(3);y3=x3(1)*(1-x3(2)*exp(x3(3)*k));plot(k1,y31,'+',k,y3)上述文件保存为qimobaogao.mfunction f=shujunihe(x)c1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$E$3:$LE$12'); c2=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$F$3:$F$12'); f=c2-x(1)*(1-x(2)*exp(x(3)*c1));上述文件保存为shujunihe.m用matlab解出最大利润为:y=37693最佳施肥方案为第一个方案(328.44,245,465)所用程序为:clearclca1=-0.0003; b1=0.1971; c1=14.742;a2=-0.0001; b2=0.0719; c2=32.916;a3=42.7; b3=0.56; c3=0.01;n=0:0.01:393;p=0:0.01:686;k=0:0.01:652;y1=(a1*n.*n+b1*n+c1)*800;y11=max(y1)for i=1:length(n)if abs(y1(i)-y11)<=0.001q1=n(i)breakendendy2=(a2*n.*n+b2*n+c2)*800;y22=max(y2)for i=1:length(p)if abs(y2(i)-y22)<=0.001q2=p(i)breakendendy3=a3*(1-b3*exp(-c3*k));y33=max(y3)for i=1:length(k)if abs(y3(i)-y33)<=0.001q3=k(i)breakendend运行后的结果如图:生菜产量与施肥量关系:由散点图猜测生菜产量y 与施肥量N 的关系式为:1121c n b n a y ++=y 与磷肥的量P 的函数为:2222c p b p a y ++=y 与钾肥的量K 的函数为:()kc e b a y 3331--=由matlab 解出:a1=-0.0002 b1=0.1013 c1=10.2294a2=-0.0001 b2=0.0606 c2=6.8757a3=15.8878 b3-0.0440 c3=0.0026 关系图为:所用matlab程序为:clearclcn1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$H$3:$H$12'); n2=n1.^2;y11=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$I$3:$I$12'); p1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$J$3:$J$12'); p2=p1.^2;y21=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$K$3:$K$12'); k1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$L$3:$L$12'); y31=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$M$3:$M$12'); c=ones(10,1);d1(:,1)=n2;d1(:,2)=n1;d1(:,3)=c;x1=inv(d1'*d1)*d1'*y11d2(:,1)=p2;d2(:,2)=p1;d2(:,3)=c;x2=inv(d2'*d2)*d2'*y21x0=[42 0.55 0.05];x3=lsqnonlin ('shujunihe',x0)n=0:0.001:393;p=0:0.001:686;k=0:0.001:652;y1=x1(1)*n.*n+x1(2)*n+x1(3);y2=x2(1)*p.*p+x2(2)*p+x2(3);y3=x3(1)*(1-x3(2)*exp(x3(3)*k));plot(k1,y31,'+',k,y3)上述文件保存为qimobaogao.mfunction f=shujunihe(x)c1=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$L$3:$L$12'); c2=xlsread('E:\《数学建模课程设计》实验报告\shuju','sheet1','$M$3:$M$12'); f=c2-x(1)*(1-x(2)*exp(x(3)*c1));上述文件保存为shujunihe.m用matlab解出最大利润为:y=18445最佳施肥方案为第一个方案(253.18,245,465)所用程序为:clearclca1=-0.0002; b1=0.1013; c1=10.2294;a2=-0.0001; b2=0.0606; c2=6.8757;a3=15.8878; b3=-0.0440; c3=0.0026;n=0:0.01:393;p=0:0.01:686;k=0:0.01:652;y1=(a1*n.*n+b1*n+c1)*800;y11=max(y1)for i=1:length(n)if abs(y1(i)-y11)<=0.001q1=n(i)breakendendy2=(a2*n.*n+b2*n+c2)*800;y22=max(y2)for i=1:length(p)if abs(y2(i)-y22)<=0.001q2=p(i)breakendendy3=a3*(1-b3*exp(c3*k));y33=max(y3)for i=1:length(k)if abs(y3(i)-y33)<=0.001q3=k(i)breakendend运行结果如图:四、模型的评价与推广:4.模型优缺点4.1模型优点本模型利用Matlab编程,曲线估计较成功地解决了施肥最佳方案问题, 方法简练, 道理清晰, 结果可信。