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

喂喂喂,该减减肥啦!

来制定你的减肥计划吧!

模型假设

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

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

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

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

食物每百克所含热量

食物

米饭

豆腐

青菜

苹果

瘦肉

鸡蛋

热量(kcal/100g)

120

100

2030

5060

140160

150

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

运动

步行(4km/h)

跑步

跳舞

乒乓

自行车

(中速)

游泳(50m/min)

热量(kcal/hkg)

3.1

7.0

3.0

4.4

2.5

7.9

基本模型

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

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

\alpha~热量转换系数                平均8000kcal增加体重1kg        \alpha=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、重新制定减肥计划

改变\beta +\alpha \gamma t的值即运动量和运动时间即可

这里我们主要确定 \beta +\alpha \gamma t中的\gamma t

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

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

1 - \beta +\alpha \gamma t估计值=0.965

\beta +\alpha \gamma t=0.035\alpha \gamma t=0.01    \alpha=1/8000

\gamma t=80

 

使用第一阶段

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

第一阶段每周减1000kcal

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

第一周

19000

第二周

18000

第三周

17000

第四周

16000

 

\gamma t=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()

制定新计划的减肥图:

先标记目标点,然后不断改变1 - \beta +\alpha \gamma t的值,直到经过标记点即可。计算出\gamma t的值

根据表来制定训练计划。

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()

输出结果

 

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年6月21日
下一篇 2023年6月21日

相关推荐