matlab编写日期计算器,人体生物节律计算Matlab实现 - 范文中心

人体生物节律计算 Matlab实现

本文由杜运福提供,仅供参考!

1 Matlab计算结果实例

2 人体生物节律认识

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取整)和周岁生日距计算的天数,取三者之和,再分别除以三个周期天数,其余数便是周期中的节律位置。

3 Matlab实现源码

% 生物节律计算器

% 输出一年或一个月生物节律曲线

% 作者:杜运福 2013年6月

clc

clear

format compact

format long

% 设置

BirthDay = [1987 2 10 12]; % 生日 格式:[YYYY MM DD HH] MM=1~12,DD=1~31,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)

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

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

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)

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(2*pi*1/33*(t + (InteRe-0.5-Offset) / ThisMonthDays * length(t)*tstep));

y_Emot = 100 * sin(2*pi*1/28*(t + (EmotRe-0.5-Offset) / ThisMonthDays * length(t)*tstep));

y_Phys = 100 * sin(2*pi*1/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)), '月 ', '生物节律曲线']); 参考文献:

1.《人体三大节律》 来自百度文库

2.《生物节律认识》 来自百度文库

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值