MATLAB----人体生物节律

人体生物节律认识
2.1 生物节律介绍
人体生物节律原理又称生物钟原理,其中智力钟周期为33天,它影响着人们的记忆力、敏捷性以及对事物的接受能力、逻辑思维和分析能力等;体力钟周期为23天,它影响着人们的体力状况,包括对疾病的抵抗能力、肌肉收缩能力,身体各部份的协调工作能力、动作速度、生理变化适应能力,以及其他一些基本的身体功能和健康状况等;情绪钟周期为28天,它影响着人们的创造力,对事物的敏感性和理解力,情感与精神及心理方面的一些机能等。一个人的智力、体力、情绪状态在每个周期中都分别有高潮、低潮和临界期。在智力高潮期,大脑思维比较开阔,记忆力较强,归纳、推理、综合的能力也较强;在体力节律的高潮期,竞赛场上的运动员最有可能取得出人意料的好成绩;在情绪节律的高潮期人们往往表现出精神焕发,谈笑风生。一个人的三个周期正好都处在高潮期的时候,就有可能表现出超乎寻常的能力来。生物钟原理在人们的生活及工作中有非常广泛的应用。除了在竞技和应考的应用外,还可以指导人们外出、交友、购物、商谈生意、文学创作甚至福利博采等。
2.2 生物节律变化曲线介绍
人体生物钟在运行中,呈正弦曲线变化。人体生物钟从0开始,进入高潮期,经过1/4周期时为高峰日,高峰日前后2-3天为“最高峰区”。高峰日后开始向低潮期过渡,到达1/2周期时,正是高潮期向低潮期过渡交替的日子,称为“下降临界日”。此后便进入低潮期,到达3/4周期时为低谷日,低谷日前后2-3天为“最低潮区”。低谷日过后开始上升,向高潮期过渡,到达整周期(0周期)时,称为“上升临界日”,生物钟完成一个周期的运行,进入另一个周期运行。临界日前后1-2天称为临界期(“危险期”)。
2.3 生物节律指导意义
2.3.1 优生
有资料介绍有人对96名研究生进行回顾性调查,发现有77名高才生在受孕时其父母一共六条生物钟曲线中,有4条以上处于高潮期,占总数的80%,而其中却有1/3父母的智力表现极其一般,这表明了利用生物钟原理指导受孕的巨大利用价值。
2.3.2 交通
据有关交通事故资料显示,40%的事故发生在生物节律临界日,20%的事故发生在生物节律低潮向高潮期过渡的时期,故发生在生物节律临界日的事故占总事故的60%左右。这说明了交通事故的发生与驾驶人的生物节律有一定的关联。
2.4 计算方法
以阳历为准,算出周岁天数(365×周岁数),闰年比平年多的天数(四年一闰,闰年二月份多一天,因此闰年天数为:周岁数/4取整)和周岁生日距计算的天数,取三者之和,再分别除以三个周期天数,其余数便是周期中的节律位置。
clc
clear
format compact
format long

% 设置
BirthDay = [1987 2 10 12]; % 生日 格式:[YYYY MM DD HH] MM=112,DD=131,HH=0~23
CalMonth = [2013 7]; % 欲计算生物节律的月份 格式:[YYYY MM] MM=1~12,0–全年

MonthDay = [31 28 31 30 31 30 31 31 30 31 30 31]; % 每月天数
SumDay = int32(0); % 出生总天数,出生时间至计算月份的第一天
LeapYears = int32(0); % 闰年数 出生日期到计算月份第一天

if (CalMonth(1) < BirthDay(1)) || ((CalMonth(1) == BirthDay(1)) && CalMonth(2) < BirthDay(2)) …
|| ((CalMonth(1) == BirthDay(1)) && (CalMonth(2) == BirthDay(2)) && (BirthDay(3) ~= 1))
disp ‘CalMonth Error!!!’
return
end

% --------计算闰年数--------
% 如果出生日期在3月之后,需要判断出生年是否是闰年
if (BirthDay(2) == 1) || ((BirthDay(2) == 2) && (BirthDay(3) < 29))
Y = BirthDay(1);
if ((mod(Y, 4) == 0) && (mod(Y, 100) ~= 0)) || (mod(Y, 400) == 0)
LeapYears = LeapYears + 1;
end
end
% 累加出生日期到计算月份的闰年数
if BirthDay(1) + 1 < CalMonth(1) -1
for Y = BirthDay(1) + 1 : CalMonth(1) -1
if ((mod(Y, 4) == 0) && (mod(Y, 100) ~= 0)) || (mod(Y, 400) == 0)
LeapYears = LeapYears + 1;
end
end
end
% 如果出生日期在3月之后,需要判断出生年是否是闰年
if CalMonth(2) > 2
Y = CalMonth(1);
if ((mod(Y, 4) == 0) && (mod(Y, 100) ~= 0)) || (mod(Y, 400) == 0)
LeapYears = LeapYears + 1;
end
end

% --------计算出生总天数--------
SumDay = 0;
if CalMonth(1) > BirthDay(1)
SumDay = (CalMonth(1) - BirthDay(1) -1) * 365;
end
SumDay = SumDay + LeapYears;
% 计算出生年份的余下天数
RelDays = 0;
if (CalMonth(1) > BirthDay(1)) && (BirthDay(2) < 12)
for M = BirthDay(2) + 1 : 12
RelDays = RelDays + MonthDay(M);
end
elseif CalMonth(1) == BirthDay(1)
for M = BirthDay(2)+1 : CalMonth(2) - 1
RelDays = RelDays + MonthDay(M);
end
end
RelDays = RelDays + MonthDay(BirthDay(2)) - BirthDay(3);
% 计算计算月在当年的第几天
ThisYearDays = 0;
if CalMonth(1) > BirthDay(1)
if CalMonth(2) > 1
for M = 1:CalMonth(2) - 1
ThisYearDays = ThisYearDays + MonthDay(M);
end
end
end
ThisYearDays = ThisYearDays + 1;
% 得到出生总天数
SumDay = SumDay + RelDays + ThisYearDays;
SumDay

% 计算智力、情绪、体力余数
InteRe = double(mod(SumDay, 33));
EmotRe = double(mod(SumDay, 28));
PhysRe = double(mod(SumDay, 23));
InteRe
EmotRe
PhysRe

% 计算智力、情绪、体力节律波形
Offset = BirthDay(3) / 24;
tstep = 0.001;
ThisMonthDays = MonthDay(CalMonth(2));
if CalMonth(2) == 2
Y = CalMonth(1);
if ((mod(Y, 4) == 0) && (mod(Y, 100) ~= 0)) || (mod(Y, 400) == 0)
ThisMonthDays = ThisMonthDays + 1;
end
end
xmax = ThisMonthDays + 0.5;
t = 0.5:tstep:xmax;
y_Inte = 100 * sin(2pi1/33*(t + (InteRe-0.5-Offset) / ThisMonthDays * length(t)tstep));
y_Emot = 100 * sin(2
pi1/28(t + (EmotRe-0.5-Offset) / ThisMonthDays * length(t)tstep));
y_Phys = 100 * sin(2
pi1/23(t + (PhysRe-0.5-Offset) / ThisMonthDays * length(t)*tstep));

% 绘制智力、情绪、体力节律波形
figure(1);
clf;
axis([0.5 xmax -100 101])
hold on
set(gca,‘XTick’,1:ThisMonthDays);
set(gca,‘YTick’,-100:5:100);
grid on
plot(t, y_Inte, ‘r’, ‘linewidth’, 2);
plot(t, y_Emot, ‘b’, ‘linewidth’, 2);
plot(t, y_Phys, ‘g’, ‘linewidth’, 2);

% 绘制 y = 0 水平线
y = zeros(1,length(t));
plot(t, y, ‘k’, ‘linewidth’, 2);

% 绘制 y = 100 水平线
y = ones(1,length(t)) * 100;
plot(t, y, ‘k’, ‘linewidth’, 1);

% 绘制每天的分界线
y1 = -100:5:100;
for i = 1.5:1:xmax
x1 = ones(1, length(y1)) * i;
plot(x1, y1, ‘k’);
end

% 坐标注释
title([int2str(CalMonth(1)), ‘年’, int2str(CalMonth(2)), '月 ', ‘生物节律曲线’]);
SumDay =
int32
9638
InteRe =
2
EmotRe =
6
PhysRe =
1
MATLAB----人体生物节律

上一篇:单源最短距离 Single Source Shortest Path


下一篇:Yii/Yii2:查询返回以某特定列为索引(键)的数组