栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数学建模——管住嘴迈开腿——python实现

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数学建模——管住嘴迈开腿——python实现

喂喂喂,该减减肥啦! 来制定你的减肥计划吧! 模型假设

(1)体重增加正比于吸收的热量, 平均8000kcal       增加体重1kg.

(2)代谢引起的体重减少正比于体重, 每周每千克       体重消耗200 ~ 320kcal (因人而异).70kg每天消耗2000 ~ 3200kcal.

(3)运动引起的体重减少正比于体重, 且与运动       形式和运动时间有关.  

(4)为了安全与健康, 每周吸收热量≥10000kcal,且每周       减少量≤1000kcal; 每周体重减少量≤ 1.5kg.

食物每百克所含热量

食物

米饭

豆腐

青菜

苹果

瘦肉

鸡蛋

热量(kcal/100g)

120

100

20~30

50~60

140~160

150

运动每小时每千克体重消耗热量

运动

步行(4km/h)

跑步

跳舞

乒乓

自行车

(中速)

游泳(50m/min)

热量(kcal/hkg)

3.1

7.0

3.0

4.4

2.5

7.9

基本模型

w(k)~第k周(初)体重 (kg) , k=1,2,…

c(k) ~第k周吸收热量 (kcal)

~热量转换系数                平均8000kcal增加体重1kg        =1/8000(kg/kcal)

 

一、减肥计划的提出

阿数身高1.70m, 体重100kg, BMI高达34.6. 目前每周吸收20000kcal热量,体重长期未变.

制订减肥计划使体重减至75kg(BMI=26)并维持下去.

1. 在正常代谢情况下安排一个两阶段计划:    

第一阶段:吸收热量每周减少1000kcal, 直至达到     安全下限10000 kcal/周;

第二阶段:每周吸收热量保持下限, 达到减肥目标 .

2. 为加快进程而增加运动,重新安排两阶段计划.

3. 给出达到目标后维持体重不变的方案.


二.模型建立与解决

模型建立 由书可得基本模型如下:

由假设一,훼 =1/8000푘푔/푘푐푎푙。减肥计划的提出 通过制定一个具体的减肥计划讨论模型(1)的应用。某人身高1.70 푚,体重100 푘푔,퐵푀퐼高达34.6。自述目前每周吸收20000 푘푐푎푙热量,体重长期未变。试为他按照以下方式制订减肥计划,使其体
重减至75 푘푔(即퐵푀퐼 = 26)并维持下去:
1)在正常代谢情况下安排一个两阶段计划,第一阶段:吸收热量由20000 푘푐푎푙 每周减少1000 푘푐푎푙,直至达到安全下限(每周10000 푘푐푎푙);第二阶段:每周吸收热量保持下限,直至达到减肥目标。
2)为加快进程而增加运动,重新安排两阶段计划。
3)给出达到目标后维持体重不变的方案。
减肥计划的制订 首先应确定某人的代谢消耗系数훽,根据他每周吸收푐 =20000 푘푐푎푙热量,体重푤 = 100 푘푔不变,在(1)式中令푤( 푘 + 1 ) = 푤(푘) =푤,푐(ℎ) = 푐,得

于是

相当于每周每千克体重消耗热量20000/100= 200 푘푐푎푙。从假设 2 可以知道,某人属于正常代谢消耗相当弱的人。他又吃得那么多,难怪如此之胖。

正常代谢情况下的两阶段计划。第一阶段要求吸收热量由20000 푘푐푎푙每周减少1000 푘푐푎푙(由表 2,如每周减少米饭和瘦肉各350 푔),达到下限푐푚푖푛 = 10000 푘푐푎푙,即第十周达到下限

将푐(푘)及훼 =1/8000,훽 = 0.025代入(1)式,可得

(4)式虽是一阶线性常系数差分方程,但因右端含有时间变量푘,不能直接应用基础知识6 − 1的求解公式。更方便的办法是,以푤(1) = 100 푘푔为初始值,按照(4)式编程计算,可得第11周(初)体重푤(11) = 90 푘푔。第二阶段要求每周吸收热量保持下限푐푚푖푛,由(1)式可得

以第一阶段的终值푤(11)为第二阶段的初值,按照(5)式编程计算,直至푤(11 + 푛) ≤ 75 푘푔为止,可得푤(11 + 19) ≤ 75푘푔,即每周吸收热量保持下限10 000 푘푐푎푙,再有29周体重可减至75 푘푔。两阶段共需39周。
为加快进程而增加运动。记表3中热量消耗为훾,每周运动时间为푡 ℎ,在(1)式中将훽改为훽 + 표훾푡,即

类似的计算可得,푤(11) = 90 푘푔, 푤( 11 + 13) = 74.196푘푔,即若增加훼훾푡 =0.005的运动,就可将第二阶段的时间缩短为13周。由훼 =1/8000可知,增加的运动内容应满足훾푡 = 40,可从表中选择合适的运动形式和时间,如每周步行7 ℎ加乒乓4 ℎ。两阶段共需23周,增加运动的效果非常明显。将正常代谢和增加运动两种情况下的体重푤(푘)作图。
 

由(9)式,在正常代谢下(훾 = 0)可算出푐 = 15000 푘푐푎푙;若增加훾푡 = 40的运动,则푐 = 18000 푘푐푎푙。实际上,如果在减肥计划的开始,就让某人每周吸收热量由20000 푘푐푎푙直接减至푐 = 15000 푘푐푎푙,那么他的体重也将逐渐下降,很长时间以后(理论上是无穷长)才会降到75 푘푔。而若每周吸收热量减至14000 푘푐푎푙,13000 푘푐푎푙,12 000 푘푐푎푙,体重下降速度将加快,直接按照(1)式计算,得到的曲线

三、改变计划

如果例子中的阿数只想在一个月内瘦十斤,那么他应该如何制定减肥计划?

1.确定采用哪一阶段的减肥计划。

2.给出每周应该摄入的热量,以及运动的方式和时间。

按一个月分为四周来算,即d(4,95)

由python画出画出点d的位置,可以看到在正常的代谢减肥计划中是不可能实现的,则我们选择增加运动,且我们要重新制定减肥计划

2、重新制定减肥计划

改变的值即运动量和运动时间即可

这里我们主要确定 t中的

这里我运用python来求解(代码在后)

运用估计的方法来求(大取小,小取大,如下图)

估计值=0.965

=0.035=0.01    =1/8000

=80

 

使用第一阶段

给出每周应该摄入的热量,以及运动的方式和时间。

第一阶段每周减1000kcal

则下降4周,则20000 – 4*1000 = 16000

第一周

19000

第二周

18000

第三周

17000

第四周

16000

 

=80

比如:每周跑步10h加步行3h

比如:每周步行,乒乓各10h

 检验 “每周体重减少量<=1.5kg”

 我们发现这样安排减肥,是合理的,也是有效的

代码:

画出正常代谢和增加运动与计划点的差别

import matplotlib.pyplot as plt
w=100
W=[100]
K=[0]

for k in range(1, 11):
    w= w * 0.975 + 2.5 - 0.125 * k
    W.append(w)
    K.append(k)

for k in range(11, 36):
    w = w * 0.975 + 1.25
    W.append(w)
    K.append(k)

Wi=[100]
Ki=[0]
w=100
for k in range(1, 11):
    w= w * 0.97 + 2.5 - 0.125 * k
    Wi.append(w)
    Ki.append(k)

for k in range(11, 36):
    w = w * 0.97 + 1.25
    Wi.append(w)
    Ki.append(k)



#画图
plt.plot(K,W,label='正常代谢')
plt.plot(Ki,Wi,label='增加运动')
plt.scatter(4,95,s=60,color='g')

plt.legend()

#标签
plt.title('管住嘴迈开腿', fontsize=24)
plt.xlabel("k/周", fontsize=14)
plt.ylabel("w/kg", fontsize=14) # 设置刻度标记的大小

# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14)

# 用黑体显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()

制定新计划的减肥图:

先标记目标点,然后不断改变的值,直到经过标记点即可。计算出的值

根据表来制定训练计划。

import matplotlib.pyplot as plt
Wi=[100]
Ii=[0]
w=100
p=[]

for i in range(1,5):
    w=w*0.965+2.5-0.125*i
    Wi.append(w)
    Ii.append(i)
    T=Wi[i-1]-Wi[i]
    p.append(T)
    print("第%d周,减了%f kg,体重%f kg"%(i,T,w))

print("四周总共减了:",p[0]+p[1]+p[2]+p[3],'kg')
#print(Wi)
# 画图
plt.plot(Ii,Wi)
plt.scatter(4,95,s=60,color='g')
#标签
plt.title('管住嘴迈开腿', fontsize=24)
plt.xlabel("k/周", fontsize=14)
plt.ylabel("w/kg", fontsize=14) # 设置刻度标记的大小

# 设置刻度标记的大小
plt.tick_params(axis='both', labelsize=14)

# 用黑体显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.show()

输出结果

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/835202.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号