精华内容
下载资源
问答
  • VC 绘制曲线图并打印曲线,支持统计曲线,预览、载入外部数据生成曲线、存盘、打印出曲线图形等功能,可学习的地方还挺多。在VC 6.0下可顺利编译代码。
  • 1.将线性回归得到的两个参数打印出来,并且在图像中画该拟合曲线。 import matplotlib.pyplot as plt import numpy as np import pandas as pd data=pd.read_csv( "finalData.csv", thousands=',') data.plot...

    1.将线性回归得到的两个参数打印出来,并且在图像中画出该拟合曲线。

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    
    
    data=pd.read_csv( "finalData.csv", thousands=',')
    data.plot(kind='scatter', x="GDP per capita", y='Life satisfaction', figsize=(5,3))
    
    
    plt.axis([0, 60000, 0, 10])
    X=np.linspace(0, 60000, 1000)
    plt.plot(X, t0 + t1*X, "b")
    plt.text(5000, 3.1, r"$\theta_0 = 4.85$", fontsize=14, color="b")
    plt.text(5000, 2.2, r"$\theta_1 = 4.91 \times 10^{-5}$", fontsize=14, color="b")
    
    plt.show()
    
    
    from sklearn import linear_model
    lin1 = linear_model.LinearRegression()
    Xsample = np.c_[data["GDP per capita"]]
    ysample = np.c_[data["Life satisfaction"]]
    lin1.fit(Xsample, ysample)
    # 输出 intercept_是截距, coef_是斜率系数
    t0, t1 = lin1.intercept_[0], lin1.coef_[0][0]
    print('打印t0',t0)
    print('打印t1',t1)
    

    2.结果展示

    输出 intercept_是截距, coef_是斜率系数 ,这些也被成为回归系数。

     

    展开全文
  • 提供了使用符号数学工具箱的程序和实用程序函数来分析一般曲线坐标中的向量和张量。 这些程序执行以下功能: 1) runco​​ord 绘制了几个典型坐标系的相交坐标面2) runmetric 计算并打印用户定义函数(例如 sphr.m)...
  • VB6.0将两串口数据作为横纵坐标绘制曲线,并通过打印机打印
  • 学习曲线和遗忘曲线

    千次阅读 2015-08-13 01:51:59
    学习曲线的定义为"在一定时间内获得的技能或知识的速率",又称练习曲线(practice curves)。 人们为了知道学习进程中的现象和进步的快慢的详情,作为以后努力的指针,应用统计图的方法作一条线,把它表示出来。...
    学习曲线的定义为"在一定时间内获得的技能或知识的速率",又称练习曲线(practice curves)。
    人们为了知道学习进程中的现象和进步的快慢的详情,作为以后努力的指针,应用统计图的方法作一条线,把它表示出来。它源于“二战”时期的飞机工业,当产量上升时,生产每架飞机的劳动时间会极大地下降。随后的研究表明,在许多行业都存在这种现象。学习曲线体现了熟能生巧。
    中文名
    学习曲线
    外文名
    learning curve
    横    轴
    表示反复次数
    纵    轴
    各种学习测试的学习过程的曲线
    类    型
    曲线
    定    义
    获得的技能或知识的速率

    1简介编辑

    学习曲线learning curve 以横轴表示反复次数(探索次数)。以纵轴表示各种学习测试的学习过程的曲线。作为学习测试,在用错误数、时间、反应潜时等情况下的负加速下降曲线,如果用正反应数或正反应率为纵坐标。则呈S型或负加速的上升曲线。然而这些曲线型。不仅表示学习效果的增减。而且根据测试的特性,多依赖于理论的界限、生理或行为的界限。另外,把直到学习成功所需的反复探索数并不相同的许多个体资料,简单地取反复探索次数的平均值来表示,则难以表示学习过程的特征,导致错误的结论。所以提出了将学习开始和完成时期划齐,即用各个体的横轴或伸或缩,将曲线加合起来的方法。这样得到的平均曲线称为奋森曲线(Vincent curve),但几乎无人使用,不过对从个体所得到的资料还是受重视的。
    学习曲线也称为经验曲线,是随着产品累计产量的增加,单位产品的成本会以一定的比例下降。学习曲线(Learning curve)是表示 单位产品生产时间与所生产的产品总数量之间的关系的一条曲线。
    熟练工程,也称动态评价技术。他们对缩短 工时进行动态评价的技术,广泛应用于生产领域中。
    学习曲线将学习效果数量化绘制于坐标纸上,横轴代表练习次数(或产量),纵轴代表学习的效果(单位产品所耗时间),这样绘制出的一条曲线,就是学习曲线。
    学习曲线有广义和狭义之分。狭义的学习曲线又称为人员学习曲线,它是指直接作业人员个人的学习曲线。广义的学习曲线也称为生产进步函数,是指工业某一行业或某一产品在其 产品寿命周期的学习曲线,是融合技术进步、管理水平提高等许多人努力的学习曲线。
    学习曲线是在飞机制造业中首先发现的,利用数据和资料为 企业经营管理工作提供预测和决策依据的一种方法,是引起非线性成本的一个重要原因。 美国康乃尔大学的商特博士总结飞机制造经验而得出了学习曲线规律,认为每当飞机的产量积累增加1倍时,平均单位工时就下降约20%,即下降到产量加倍前的80%。商特则将累积平均工时与产量的函数称为“学习曲线”。
    学习曲线体现了熟能生巧。学习曲线是分析 采购成本、实施采购降价的一个重要工具和手段。学习带来成本的降低,其原因可以归结为以下因素:
    (1)随着生产经验的丰富,提高了操作人员的操作速度;
    (2)降低报废率和更正率;
    (3)改进了操作程序;
    (4)因生产经验带来模具设计的改进;
    (5)价值工程和 价值分析的应用。
    学习曲线(图2) 学习曲线(图2)

    2概念编辑

    在考虑产能大小的决定时,往往要考虑到学习效应这一决定产能大小的重要因素。所谓学习效应是指当以个人或一个组织重复地做某一产品时,做单位产品所需的时间会随着产品数量的增加而逐渐减少,然后才趋于稳定。如下图所示:
    由上图可以看出,学习效应包括两个阶段:一是学习阶段,单位产品的生产时间随产品数量的增加逐渐减少;二是标准阶段,学习效应可忽略不计,可用 标准时间进行生产。上图中的曲线称为学习曲线(learning curves)。它所表示的是单位产品的直接劳动时间和累积产量之间的关系。类似的表示学习效应的概念还有“制造进步函数”(manufacturing progress function)和“经验曲线”(experience curve),但它们所描述的不是单位产品直接劳动时间与累积产量之间的关系,而是单位产品的附加成本与累积数量之间的关系。这两种曲线的原理与学习曲线是相同的。
    常见的 学习效应有两种:个人学习和组织学习。所谓个人学习,是指当一个人重复地做某一产品时,由于动作逐渐熟练,或者逐渐摸索到一些更有效的作业方法后,作一件产品所需的工作时间(即直接劳动时间)会随着产品累积数量的增加而减少。组织学习是指管理方面的学习,指一个企业在产品设计、工艺设计、自动化水平提高、生产组织以及其他资本投资等方面的经验累积过程,也是一个不断改进 管理方法,提高人员作业效率的过程。

    3影响因素编辑

    学习曲线(图3) 学习曲线(图3)
    学习效果受许多因素的影响,主要有:
    1)操作者的动作熟练程度。这是影响学习曲线的最基本因素
    2)管理技术的改善,正确的培训、指导,充分的生产准备与周到的服务,工资奖励及惩罚等管理政策的运用
    3)产品设计的改善
    4)生产设备与工具的质量
    5)各种材料的连续供应和质量
    6)信息反馈的及时性
    7)专业化分工程度

    4方程编辑

    三个假设

    1)每次完成给定任务或者单位产品后,下一次完成该任务或单位产品的时间将减少;
    2)单位产品完成时间将以一种递减的速度下降;
    3)单位产品完成时间的减少将循环一个可以预测的模式。
    学习曲线方程的一般形式是:
    yx=kxn(n为x的指数)
    式中: x=单位数量
    yx=生产第x个产品所需的直接劳动小时数
    k=生产第一个产品所需的直接劳动小时数
    n=lgb/lgx,其中b=学习比例

    绘制


    为了绘制一条有用的学习曲线,有许多种对以前数据进行分析的方法。首先我们将按数学程序采用简单的指数曲线,接着将进行对数分析。在数学制表方法中,一列产品单位数量通过依次倍乘的方式得出,如:1、2、4、8、16……生产第1个单位产品的时间乘以一个学习率得出生产第一、第二件商品的平均时间,生产第1、2个单位产品的时间再乘以一个学习率将得出生产第1~4个单位产品的平均时间时间,依此类推,因此,如果我们绘制一条80%的学习曲线,将得到下表1(80%的学习曲线所需的单位、累计、累计平均值劳动时间)中第2列的数字。为便于计划通常要知道累计直接劳动时间,下表1(80%的学习曲线所需的单位、累计、累计平均值劳动时间)的第4列也提供了这方面的信息。这些数字的计算比较简单。

    5分析编辑

    对数分析

    学习曲线方程的标准形式是(此方程说明随着生产数量的增加,任何一个给定单位产品的直接劳动小时数将按指数规律递减):
    n
    Yx=KX
    式中:X----单位数量;
    Yx---生产第X个产品所需要的直接劳动小时数;
    K----生产第一个产品所需要的直接劳动小时数;
    n----㏒b/㏒2 其中b为学习率
    上述问题我们可经用数学方法解决,好可以用下面的表来解决。
    例题:
    利用数学方法我们计算上表一中第8个单位产品所需要的劳动时间。
    我们利用下式计算:
    n
    Yx=KX
    ㏒0.8/㏒2 -0.322  0.322
    Y8=100 000×8 =100 000×8 =100 000/8
    =100 000/1.9535
    =51 192
    因此生产第8个产品将需要52 192小时。

    学习曲线表

    知道学习率后,就可以利用下面给出的表2和表3非常方便的估计出某一特定产品或某一组产品的劳动时间。我们只需要把最初的劳动小时数乘以表中给出的相应值。
    方法详解如下:
    假设我们检查上表1中第16个单位产品的劳动小时数和累计劳动小时数。我们从下表2可以查知,第16个单位产品在80%的学习率下提高系数为0.4096,该数乘以生产第一个单位产品的小时数100 000得到40960,验证同上表一中给出的完全一样。从下表3中查知,前16个单位产品的累计提高系数为8.920,同样乘以生产第一个单位产品的小时间数100 000后得到892000。同上表1中得出的值892014非常接近。

    学习率的估计

    如果已经开始生产了一段时间,通过以前的生产记录能够很容易的得到学习率。一般来说,生产时间越长,评估就越准确,因为生产的初期可能发生很多情况,所以大部分的生产公司直到生产了一些产品后才收集用于学习曲线分析的数据。
    在估计学习率时还应采用统计分析。采用指数学习曲线可以看出该曲线对以前数据的符合程度。这些数据也可以在对数坐标纸上绘制,以观察其是否具有直线性。
    如果生产还未开始,对学习率的估计就是一个具有启发性的猜测问题。在这种情况下,分析员有以下三种选择:
    1、假设估计的学习率同以前性质的企业中的学习率一样;
    2、假设估计的学习率与同样的或类似的产品的学习率是一样的;
    3、分析学习前的运转方式与前面的运转方式的相同点和不同点,并由此得出适合此种情况的经过修正的学习率。

    6应用编辑

    学习曲线(图4) 学习曲线(图4)
    1)在生产制造方面,它可以应用于估计产品设计时间和生产时间,同时可以应用于 估计成本
    2)学习曲线也是公司战略设计的组成部分,比如价格、投资成本和营运成本的 决策
    3)应用于 个体学习组织学习的能力。
    4)学习曲线如使用不当也是有一定风险的。这是指管理人员往往容易忘记环境动态变化的特性,在这种情况下,环境变化中的不测因素有可能影响学习规律,从而给企业带来损失。一个著名事例是 道格拉斯飞机制造公司被 麦克唐纳兼并的事例。道格拉斯飞机曾经根据学习曲线估计它的某种新型喷气式飞机成本能够降低,于是对顾客许诺了价格和交货日期,但是飞机在制造过程中不断地修改工艺,致使学习曲线遭破坏,也未能实现成本降低,因此遇到了严重的财务危机,不得不被兼并。
    学习曲线法则是指在一个合理的时间段内,连续进行有固定模式的重复工作,工作效率会按照一定的比率递增,从而使单位任务量耗时呈现一条向下的曲线。学习曲线效应是在以下两种因素的共同作用下产生的:一是熟能生巧,连续进行有固定套路的工作,操作会越来越熟练,完成单位任务量的工作时间会越来越短;二是规模效应,生产10件产品与100件产品所需要的生产准备时间、各生产环节间的转换时间是一样的,因此一次生产的产品越多,分摊到每件产品上的准备时间和转换时间越少,单位生产效率越高。
    学习曲线法则告诉我们,应尽量集中处理性质相同的事务性工作, 如一次性处理具有相同性质的所有文件,一次性打完所有的沟通电话,一次购齐所需的生活用品,一次性做完所有家务等。这样既有利于提高工作的熟练程度,又能通过批量作业减少准备工作和中间环节占用的时间,从而达到节约时间、提高效率的目的。
    例题:
    某数码电子有限公司有一条手动 插件生产线,该线有35名员工,手工插14英寸彩色电视机主板日产量为1200块,每个主板的单位生产成本为9元人民币。生产线管理人员要求,在一个星期内该生产线累计完成10000块。问每块主板的单位生产成本是多少?
    如果该生产线的经验曲线为90%,那么,一星期内该生产线累计完成10000块主板的生产成本应该是:9×90%=8.10元人民币。
    学习曲线可通过数学列表、数学对数或其它的一些曲线拟合方法得到,这取决于可利用数据的形式及可利用数据的多少。
    从学习曲线考虑,效率的提高有二种方法,既单位产品生产时间学习曲线或单位时间生产量学习曲线。
    单位产品生产时间学习曲线给出了每连续生产一件产品所需要的生产时间,累计平均时间曲线给出了产品总数目增加时的累计平均操作时间。单位产品生产时间曲线和累计平均时间曲线也称为“进步曲线”、“产品学习曲线”,它们对于复杂的产品或 生产周期长的产品较适应。单位时间生产量曲线也称为工业学习曲线,通常用于大量生产(短周期)。

    7指导编辑

    学习曲线(图7) 学习曲线(图7)
    1、个人学习
    有许多因素影响个人的表现和学习率。学习率和初始水平是其中最重要的两个因素。我们假定为了完成一项简单任务,测试两个员工生产某件产品的时间,这项测试被 行政部用来作为对装配线上招聘员工考核的一部分。
    有两个人应聘装配线员工,你将聘用那一个?应聘者A开始效率高但学习速度慢;应聘者B虽然开始效率低,但是他的学习速度很快。很明显B是一个更好的聘用人。以上说明不仅学习率本身很重要,起始操作时间也很重要。
    为了改善个人的操作水平,基于学习曲线的一般指导方针有:
    ⑴合理选择员工。应采用某些测试来帮助选择员工;这些测试对计划好的工作具有代表性:装配工作测试其灵巧性,脑力工作测试其脑力劳动能力,服务性工作测度其与顾客沟通的能力等。
    ⑵合理的培训。培训方式越有效,学习率就越高。
    ⑶激励。除非有报酬,否则基于学习曲线的生产任务很难完成。
    工作专业化。一般的规律是:任务愈简单,学习的愈快。应注意由于长期操作同一作业所导致的厌烦感是否会对工作产生干扰。如果确实对工作产生了干扰,那么就要对任务进行重新设计。
    ⑸一次完成一项或很少的作业。对于每一项工作,一次只完成一项比同时做所有的工作学习的快。
    ⑹使用能够辅助或支持操作的工具或设备。
    ⑺能够提供快速而简单响应帮助的方法。
    ⑻让员工协助重新设计他们的工作。把更多的操作因素考虑到学习曲线的范围中,实际上能够使曲线向下倾斜的速度更快。
    组织同样也在学习,从工业工程(IE)角度考虑组织学习对于企业间的竞争也是关键的。对于个人来说,知识如何获得和保存以及这些将对个人学习产生多大的影响等方面的概念很容易建立。当然组织学习主要源于所有聘用员工个人学习的结果。
    例如:随着操作者越来越熟练,知识就嵌入到软件和操作方法中去了。知识也可以嵌入到组织的结构中去。如:当一个组织把它的工业工程(IE)团队从集中于某一地点的 功能组织中转移到员工分散在工厂各地的分权组织中时,怎样提高生产率这些方面的知识将会嵌入到组织结构中去。
    如果个人离开组织,知识将贬值。
    如果技术水平达不到或难以使用,知识也会贬值。
    例题:
    一个求职者正在测试自己能否胜任一条装配线上的工作,管理部门认为,在操作1000次后就大体上达到了稳定状态。预计普通装配员工在4分钟内完成该任务。
    ⑴如果求职者第一次操作时间为10分钟,第二次操作为9分钟,是否该聘用此求职者?
    ⑵该求职者第10次操作的预期时间是多少?
    解:
    ⑴学习率=9分钟/10分钟=90%
    从上表三中查知,第1000次操作要求的时间为0.3499×10分阶段钟=3.449分钟。因此,该聘用此人。
    ⑵从上表二中查知,学习率在90%时,第10次操作的提高系数为0.7047,因此第10次操作时间为0.7047×10=7.047分钟。

    遗忘曲线 

    遗忘 曲线由德国心理学家 艾宾浩斯(H.Ebbinghaus)研究发现,描述了人类大脑对新事物遗忘的规律。人体大脑对新事物遗忘的循序渐进的直观描述,人们可以从遗忘曲线中掌握遗忘规律并加以利用,从而提升自我记忆能力。该曲线对人类记忆认知 研究产生了重大影响。
    中文名
    艾宾浩斯遗忘曲线
    外文名
    The Ebbinghaus Forgetting Curve
    别    称
    遗忘曲线
    提出者
    艾宾浩斯
    提出时间
    1885年
    应用学科
    生理学
    适用领域范围
    大脑记忆规律研究

    1一般规律

    德国 心理学家 艾宾浩斯(H.Ebbinghaus)研究发现,遗忘在学习之后立即开始,而且遗忘的进程并不是均匀的。最初遗忘速度很快,以后逐渐缓慢。他认为"保持和遗忘是时间的函数",他用无意义音节(由若干音节字母组成、能够读出、但无内容意义即不是词的音节)作记忆材料,用节省法计算保持和遗忘的数量。 [1]  并根据他的实验结果绘成描述遗忘进程的 曲线,即著名的 艾宾浩斯记忆遗忘曲线[2]  
    时间间隔 记忆量
    刚记完
    100%
    20分钟后
    58.2%
    1小时后
    44.2%
    8~9小时后
    35.8%
    1天后
    33.7%
    2天后
    27.8%
    6天后
    25.4%
    设初次记忆后经过了x小时,那么记忆率y近似地满足y=1-0.56x^0.06
    这条曲线告诉人们在学习中的遗忘是有规律的,遗忘的进程很快,并且先快后慢。观察曲线,你会发现,学得的知识在一天后,如不抓紧复习,就只剩下原来的25%。随着时间的推移,遗忘的速度减慢,遗忘的数量也就减少。有人做过一个实验,两组学生学习一段课文, 甲组在学习后不复习,一天后记忆率36%,一周后只剩13%。乙组按 艾宾浩斯记忆规律复习,一天后保持记忆率98%,一周后保持86%, 乙组的记忆率明显高于甲组。
    使用艾宾浩斯 遗忘曲线复习计划表后的效果图

    2记忆

    技巧

    人的大脑是一个记忆的宝库, 人脑经历过的事物,思考过的问题,体验过的 情感情绪,练习过的动作,都可以成为人们记忆的内容。例如 英文的学习中 单词短语句子,甚至文章的内容都是通过记忆完成的。从"记"到"忆"是有个过程的,这其中包括了识记、保持、再认和 回忆。有很多人在学习英语的过程中,只注重了学习当时的记忆效果,孰不知,要想做好学习的记忆工作,是要下一番工夫的,单纯的注重当时的记忆效果,而忽视了后期的保持和再认,同样是达不到良好的效果的。

    空间

    在信息的处理上,记忆是对输入 信息的编码、贮存和提取的过程,从信息处理的角度上,英文的第一次学习和背诵只是一个输入编码的过程。人的记忆的能力从生理上讲是十分惊人的,它可以存贮10的15次方比特( 二进制数字中的位,信息量的 度量单位,是由英文 BIT音译而来,为信息量的最小单位)的信息,理论上可以将全世界图书馆的所有 图书信息记住。这是因为,有些人只关注了记忆的当时效果,却忽视了记忆中的更大的问题--即记忆的牢固度问题,那就牵涉到心理学中常说的关于记忆遗忘的规律。

    3曲线

    根据我们所知道的,记忆的保持在时间上是不同的,有短时的记忆和长时的记忆两种。
    输入的信息在经过人的注意过程的学习后,便成为了人的短时的记忆,但是如果不经过及时的复习,这些记住过的东西就会遗忘,而经过了及时的复习,这些短时的记忆就会成为了人的一种长时的记忆,从而在大脑中保存着很长的时间。他得出一些关于记忆的结论。他选用了一些根本没有意义的音节(由两个辅音夹着一个元音构成的无意义的三字母单兀,例如CEG,DAX。 
    遗忘曲线
    遗忘曲线 (2张)
    他经过对自己的测试,得到了一些数据。
    然后,艾宾浩斯又根据了这些点描绘出了一条曲线,这就是非常有名的揭示遗忘规律的曲线:艾宾浩斯遗忘曲线,图中竖轴表示记忆程度(用来表示机械记忆的保持程度),横轴表示时间(天数),曲线表示机械学习实验的结果。
    这条曲线告诉人们在学习中的遗忘是有规律的,遗忘的进程不是均衡的,不是固定的一天丢掉几个,转天又丢几个的,而是在记忆的最初阶段遗忘的速度很快,后来就逐渐减慢了,到了相当长的时候后,几乎就不再遗忘了,这就是遗忘的发展规律,即"先快后慢"的原则。观察这条遗忘曲线,你会发现,学得的知识在一天后,如不抓紧复习,就只剩下原来的25%。随着时间的推移,遗忘的速度减慢,遗忘的数量也就减少。

    差异

    而且, 艾宾浩斯还在关于记忆的实验中发现,记住12个 无意义音节,平均需要重复16.5次;为了记住36个无意义章节,需重复54次;而记忆六首诗中的480个音节,平均只需要重复8次!这个实验告诉我们,凡是理解了的知识,就能记得迅速、全面而牢固。不然,愣是 死记硬背,那也是费力不讨好的。因此,比较容易记忆的是那些有意义的材料,而那些无意义的材料在记忆的时候比较费力气,在以后回忆起来的时候也很不轻松。因此, 艾宾浩斯遗忘曲线是关于遗忘的一种曲线,而且是对无意义的音节而言,对于与其他材料的对比,艾宾浩斯又得出了不同性质材料的不同遗忘曲线,不过他们大体上都是一致的。
    因此, 艾宾浩斯的实验向我们充分证实了一个道理,学习要勤于复习,而且记忆的理解效果越好,遗忘的也越慢。 [3]  

    个性化

    上述的 艾宾浩斯记忆曲线是艾宾浩斯在实验室中经过了大量测试后,产生了不同的记忆数据,从而生成的一种曲线,是一个具有共性的群体规律。此记忆曲线并不考虑接受试验个人的个性特点,而是寻求一种处于平衡点的记忆规律。
    但是记忆规律可以具体到我们每个人,因为我们的生理特点、生活经历不同,可能导致我们有不同的记忆习惯、记忆方式、记忆特点。规律对于自然人改造世界的行为,只能起一个催化的作用,如果与每个人的记忆特点相吻合,那么就如顺水扬帆,一日千里;如果与个人记忆特点相悖,记忆效果则会大打折扣。因此,我们要根据每个人的不同特点,寻找到属于自己的 艾宾浩斯记忆遗忘曲线

    4定量性

    美国1999年世界记忆学大会上公布了一个成果,是“关于艾宾浩斯记忆曲线的定量性研究”研究成果表明在人类大脑记忆过程中,在某一时间内,会形成三种记忆,即 感觉记忆短时记忆和联想记忆,如图所示:
    这个是一个记忆事件,我们以一个记单词事件为例,当记单词事件发生后,你在几秒钟之内会产生一个“感觉记忆”,这个感觉记忆转瞬即失,每个人各不相同,但基本上都在3、4秒之内,这个在记单词时不会感觉太深,在什么时候感觉深呢?感觉记忆之后还会有一个“短时记忆”,也叫“工作记忆”。这个记忆的延续时间也各不相同,大概在4~16个小时之间,不同的人相差四倍,这个在什么时候用到呢?比如:老师在课间给学生说:下节课要听写昨天学的单词,你特别着急,下课后赶紧背,管不管用,管用!但是放学回家吃顿饭或玩了一下,就什么也记不起来了,这是短时记忆,也是记完后马上会消失掉。在这两个记忆消失的过程中,会产生一个长时记忆痕迹,这是我们最关心的东西,也是最有用的东西,你真正的记忆,学习一个单词,学习任何东西,都会用到长时记忆痕迹,它是一个抛物线,就会有个最顶点,是个最高点,这是你这次记忆单词的记忆最强点,这个点能产生一个记忆强度,在这,还能产生一个记忆时间T,在某个时间段,你对这次记忆单词会产生一个这次的一个最强点,那么,我们简单的来说,如果有谁能找到这点,这个时间段T,在这进行第二次的拉高复习,这是最有效的,我们翻书,我们看小纸片,其实是在模拟这个T,这个重复时间,即记忆黄金序列是由每个遗忘点排列而成。
    科学家们评价说如果说 内燃机的发明把人类从繁重的体力劳动中解放出来, 记忆核系统将把人类从学习过程中繁重的脑力劳动中解放出来。这场人类脑力的革命,将让大脑突破其生理极限运转,大大超越人类现有的学习速度,从根本上改变人类传统学习方式。

    5艾宾浩斯

    保持和遗忘是一对冤家对头。你对以前学过的知识能够
    艾宾浩斯遗忘曲线 艾宾浩斯遗忘曲线
    回忆起来,就是保持住了,如果回忆不起来或回忆错了,就是遗忘。
    德国心理学家 艾宾浩斯(Hermann Ebbinghaus)对遗忘现象做了系统的研究,他用无意义的音节作为记忆的材料,把实验数据绘制成一条曲线,称为艾宾浩斯遗忘曲线。
    这条曲线一般称为艾宾浩斯遗忘曲线,也称艾宾浩斯保持曲线,它的纵坐标代表保持量。曲线表明了遗忘发展的一条规律:遗忘进程是不均衡的,在识记的最初遗忘很快,以后逐渐缓慢,到了相当的时间,几乎就不再遗忘了,也就是遗忘的发展是“先快后慢”。
    遗忘的进程不仅受时间因素的制约,也受其他因素的制约。学生最先遗忘的是没有重要意义的、不感兴趣、不需要的材料。不熟悉的比熟悉的遗忘的要早。
    人们对无意义的音节的遗忘速度快于对散文的遗忘,而对散文的遗忘速度又快于有韵律诗。
    在学习过程中,对一种材料达到一次完全正确地背诵后仍然继续学习,叫做 过度学习。适当的过度学习可以使学习的材料保持得更好。研究结果表明,适当限度的过度学习比刚能背诵的效果好,但如果超过这个限度,其保持效果不再增加。如学习四遍后恰能背诵,则再学习两遍效果最好,但再学习效果则适得其反,对人的身心造成危害。
    一般记住后,在5分钟后重复一遍,20分钟后再重复一遍,1小时后,12小时后,1天后,2天后,5天后,8天后,14天后就会记得很牢。

    6主要贡献

    第一个在心理学史上对记忆进行系统实验的是德国著名 心理学家艾宾浩斯。他对记忆研究的主要贡献一是对记忆进行严格数量化的测定,二是对记忆的保持规律作了重要研究并绘制出了著名的“艾宾浩斯遗忘曲线”1886年他出版了《论记忆》一书。从此,记忆成了 心理学研究的重要领域。 [3]  

    7运用

    复习点的确定

    1. 第一个记忆周期:5分钟
    2. 第二个记忆周期:30分钟
    3. 第三个记忆周期:12小时
    4. 第四个记忆周期:1天
    5. 第五个记忆周期:2天
    6. 第六个记忆周期:4天
    7. 第七个记忆周期:7天
    8. 第八个记忆周期:15天

    背诵方法

    1. 初记单词时需要记忆的内容:
    a)单词外观,b) 单词的中文释义,c) 单词的记忆法
    2. 每个list的具体背诵过程(每个list按12页,每页10个单词计):
    a) 背完一页(大约5分钟),立即返回该页第一个单词开始复习(大约几十秒)
    b) 按上面方法背完1~6页(大约在30分钟),回到第1页开始复习(两三分钟)
    c) 按上面同样方法背完7~12页,一个list结束
    d) 相当于每个list被分为12个小的单元,每个小的单元自成一个复习系统;每6个小单元组成一个大单元,2个大单元各自成为一个复习系统。背一个list总共需要一小时左右的时间。

    复习过程

    a) 复习方法:遮住中文释义,尽力回忆该单词的意思,几遍下来都记不住的单词可以做记号重点记忆。
    b) 复习一个list所需的时间为20分钟以内
    c) 当天的list最好在中午之前背完,大约12小时之后(最好睡觉前)复习当天所背的list
    d) 在其后的1,2,4,7,15天后分别复习当日所背的list
    e)复习的原则
    时间间隔:30秒 1分钟 5分钟 30分钟 1小时 8小时 1天 2天 6天 31天
    重学节省诵读时间百分数:58.2 44.2 35.8 33.7 27.8 25.4 21.1

    复习点的确定

    人的记忆周期分为短期记忆和长期记忆两种。
    第一个记忆周期是 5分钟
    第二个记忆周期是30分钟
    第三个记忆周期是12小时
    这三个记忆周期属于短期记忆的范畴。
    下面是几个比较重要的周期。
    第四个记忆周期是 1天
    第五个记忆周期是 2天
    第六个记忆周期是 4天
    第七个记忆周期是 7天
    第八个记忆周期是15天
    以上的8个周期应用于背词法,作为一个大的背词的循环的8个复习点,可以最大程度的提高背单词的效率
    背单词就找个小本子窄窄的那种,每页中间对折左边英文右边中文,每天背100个,分5组每组20个,每一个看过留下读音和拼写的印象,基本上5~8分钟一组,全部5组大概看30分钟,最好不要超过40分钟,然后再从第一组再看,每天一百个新的,看过的按记忆周期在第2、4、7、15天重新复习,基本每天进行的300~400个单词记忆。

    注意事项

    a) 每天连续背诵2个list,并完成复习任务;
    b) 复习永远比记新词重要,要反复高频率的复习,复习,再复习;
    c) 一天都不能间断,坚持挺过这15天,之后每天都要花大约1小时复习;
    6. 时间表(左边序号表示第几天,*号之后表示复习内容)

      第1天 list1→2 *list1→2
      第2天 *list1→2 list3→4 *list3→4
      第3天 *list3→4 list5→6 *list5→6
      第4天 *list1→2 *list5→6 list7→8 *list7→8
      第5天 *list3→4 *list7→8 list9→10 *list9→10
      第6天 *list5→6 *list9→10 list11→12 *list11→12
      第7天 *list1→2 *list7→8 *list11→12 list13→14 *list13→14
      第8天 *list3→4 *list9→10 *list13→14 list15→16 *list15→16
      第9天 *list5→6 *list11→12 *list15→16 list17→18 *list17→18
      第10天 *list7→8 *list13→14 *list17→18 list19→20 *list19→20
      第11天 *list9→10 *list15→16 *list19→20 list21→22 *list21→22
      第12天 *list11→12 *list17→18 *list21→22 list23→24 *list23→24
      第13天 *list13→14 *list19→20 *list23→24
      第14天 *list15→16 *list21→22
      第15天 *list1→2 *list17→18 *list23→24
      第16天 *list3→4 *list19→20
      第17天 *list5→6 *list21→22
      第18天 *list7→8 *list23→24
      第19天 *list9→10
      第24天 *list19→20
      第25天 *list21→22
      第26天 *list23→24
      第27天
      第28天
      第29天
      第30天 *list1→2
      第31天 *list3→4
      第32天 *list5→6
      第33天 *list7→8
      第34天 *list9→10
      第35天 *list11→12
      第36天 *list13→14
      第37天 *list15→16
      第38天 *list17→18
      第39天 *list19→20
      第40天 *list21→22
      第41天 *list23→24
      起始(单元或页码)编号为1
      截止(单元或页码)编号为24
      总共需要复习的编号数为24
      每天需要复习的编号数为2
      你需要41天时间完成任务 [4]  

    8相关信息

    遗忘曲线对于英语学习的帮助
    那么,对于我们来讲,怎样才叫做遗忘呢,所谓遗忘就是我们对于曾经记忆过的东西不能再认起来,也不能回忆起来,或者是错误的再认和错误的回忆,这些都是遗忘。艾宾浩斯在做这个实验的时候是拿自己作为测试对象的,他得出了一些关于记忆的结论。他选用了一些根本没有意义的音节,采用辅音音节-元音音节-辅音音节的组合方式,比如rok,goch,tis,等等。他经过对自己的测试,得到了一些数据。 [5]  
    这条曲线告诉人们在学习中的遗忘是有规律的,遗忘的进程不是均衡的,不是固定的一天丢掉几个,转天又丢几个的,而是在记忆的最初阶段遗忘的速度很快,后来就逐渐减慢了,到了相当长的时候后,几乎就不再遗忘了,这就是遗忘的发展规律,即"先快后慢"的原则。观察这条遗忘曲线,你会发现,学得的知识在一天后,如不抓紧复习,就只剩下原来的25%)。随着时间的推移,遗忘的速度减慢,遗忘的数量也就减少。
    纠正这些错误,一年出口成章没问题
    错误一:说英语要有词汇量,单词背得越多越好
    一个人的词汇量是一个长期的日积月累的过程,绝不是一两个月的突击就能有好效果的。况且,大部分人都没有这么好的记忆力,会被这种枯燥的背单词“工程”吓倒的,到头来还是会选择放弃。研究表明:最常用的前5000个单词,出现几率或使用频率达97%。一个人的词汇量在5000左右就可以和老外正常的交流了,重要的是培养自己造句子的能力,能不能用有限的词语造出不同的句子,举一反三,把不同的句子用在不同的场合,再根据自己的生活和工作所需,去补充一些新的单词,理解地记下来,然后使用他们,渐渐地你就具备了驾驭英语的能力,从而快速走出“要学英语,先背单词”这个大大的误区。
    错误二:只要集中时间学习,英语也可以速成
    依照艾宾浩斯遗忘曲线,我们应该知道只有按照大脑的记忆规律,才能把输入的信息变成长时规律。这就大大的说明了,各种速成学习法是靠不住的。最多只能增加你的短时记忆。而如果每周学习时间超过大脑可以负荷的学习时间,其学习就会变得无效,被大脑遗忘。但同时,我们也应该明白,在相同的有限学习时间内,如果可以遵循一定的规律记忆学习,就会比单纯的突击能取得更好的效果。
    错误三:光学不练,语言吸收和输出不成比例
    打个比方,假如你想学骑自行车。我给你一本题目叫"如何骑自行车"的书,把书从头背到底,甚至倒背如流,但你肯定还是不会骑。原因是骑自行车不是简单的知识问题,它首先是一项技能。要学会一项技能,核心问题是练,光有书本知识是不行的。学外语当然比学骑自行车要复杂得多,但它首先也是一项技能,光看语法书、默背单词是远远不够的。必须练,要把知识变成技能。知道不等于知道怎么做。知道怎么做不等于实际上会做。从知道怎么做到实际会做中间有个反复练习的环节。
    错误四:学习缺乏系统性,学一套说一套
    市场上学英语的资料、方法、信息铺天盖地,处理不好就会带来不良的后果。今天用这个学、明天换另一个,或者干脆学习的内容和练习表达的内容毫无关系,学习便失去了系统性,也就无法达成完整的语言使用系统。

    展开全文
  • C# Winform 使用GDI+ 绘制实时曲线图、面积曲线

    万次阅读 多人点赞 2018-04-23 21:49:59
    通过一系列的点,绘制出曲线面积图或者曲线图。 2.能够实现实时界面刷新。 3.曲线图里面的很多属性都能自定义。需求分析 功能实现分析 1.GDI+绘图可以实现点与点之间的连接,而且能够实现路径(Graphi...

    问题来源

               最近为了公司界面的美化,想将原来的单纯曲线图绘制变成曲线面积图。

     

    功能需求

              1.通过一系列的点,绘制出曲线面积图或者曲线图。

              2.能够实现实时界面刷新。

              3.曲线图里面的很多属性都能自定义。

     

    需求分析

            功能实现分析

              1.GDI+绘图可以实现点与点之间的连接,而且能够实现路径(GraphicsPath)相连和路径填充。将一系列的点连接起来就是曲线图了,如果要将一系列点围城的图形填充起来就是面积曲线图了。

              2.GDI+能够将图片(Image)直接绘制到控件(Control)上,所以将1中得到的曲线图转换成Image所能识别的图像,实时返回给GDI+,然后GDI+就直接将图片实时绘制到控件上,就能实现实时刷新。

              3.在绘制曲线图时,通过类来对绘制的图片进行封装,将曲线图进行抽象,剥离相关属性使外界可以随时访问。

    如果对GDI+不太熟悉的小伙伴请先去看看GDI+哟,对于读懂下面的代码有帮助。

    话不多说了,来看看实现吧!

    具体实现

           曲线图类

              为了节省空间我在这儿就不在累述了,希望读者仔细研究代码。注意:这里使用的数据接受类型为List<Point>。

     public class GraphEdit
        {
            /// <summary>
            /// 画板宽度
            /// </summary>
            public int BoardWidth { get; set; }
            /// <summary>
            /// 画板高度
            /// </summary>
            public int BoardHeight { get; set; }
            /// <summary>
            /// 画板背景颜色
            /// </summary>
            public Color BoardColor { get; set; }
            /// <summary>
            /// 画图区域颜色
            /// </summary>
            public Color AreasColor { get; set; }
            /// <summary>
            /// 曲线图颜色
            /// </summary>
            public Color GraphColor { get; set; }
            /// <summary>
            /// 坐标轴颜色
            /// </summary>
            public Color AxisColor { get; set; }
            /// <summary>
            /// 刻度线颜色
            /// </summary>
            public Color ScaleColor { get; set; }
    
            /// <summary>
            /// 当前绘制的图
            /// </summary>
            public Bitmap CurrentImage { get; set; }
    
            /// <summary>
            /// 垂直(纵向)边距(画图区域距离左右两边长度)
            /// </summary>
            public int VerticalMargin { get; set; }
            /// <summary>
            /// 平行(横向)边距(画图区域距离左右两边长度)
            /// </summary>
            public int HorizontalMargin { get; set; }
            /// <summary>
            /// X轴刻度线数量
            /// </summary>
            public int XScaleCount { get; set; }
            /// <summary>
            /// Y轴刻度线数量
            /// </summary>
            public int YScaleCount { get; set; }
    
            public GraphEdit(int width, int height, Color boradColor)
            {
                this.BoardWidth = width;
                this.BoardHeight = height;
                this.BoardColor = boradColor;
    
                //默认值
                this.XScaleCount = 12;
                this.YScaleCount = 5;
            }
    
            /// <summary>
            /// 获得当前数据画出的曲线面积图
            /// </summary>
            /// <param name="data">需要绘制的数据</param>
            /// <param name="xRange">X轴范围(data数据里面的实际范围)</param>
            /// <param name="yRange">Y轴范围(data数据里面的实际范围)</param>
            /// <param name="isFill">是否需要面积填充</param>
            /// <returns>当前的曲线面积图</returns>
            public Image GetCurrentGraph(List<Point> data, float xRange, float yRange, bool isFill)
            {
                CurrentImage = new Bitmap(BoardWidth, BoardHeight);
                Graphics g = Graphics.FromImage(CurrentImage);
                g.SmoothingMode = SmoothingMode.AntiAlias;   //反锯齿
                g.Clear(BoardColor);
    
                //1.确定曲线图区域
                int iAreaWidth = BoardWidth - 2 * HorizontalMargin;              //画图区域宽度
                int iAreaHeight = BoardHeight - 2 * VerticalMargin;              //画图区域高度
                Point pAreaStart = new Point(HorizontalMargin, VerticalMargin);  //画图区域起点
                Point pAreaEnd = new Point(BoardWidth - HorizontalMargin, BoardHeight - VerticalMargin);             //画图区域终点
                Point pOrigin = new Point(HorizontalMargin, BoardHeight - VerticalMargin);  //原点
                Rectangle rectArea = new Rectangle(pAreaStart, new Size(iAreaWidth, iAreaHeight));
                SolidBrush sbAreaBG = new SolidBrush(AreasColor);
                g.FillRectangle(sbAreaBG, rectArea);
    
                sbAreaBG.Dispose();
    
                //2.确定坐标轴
                Pen penAxis = new Pen(AxisColor, 5);
                penAxis.EndCap = LineCap.ArrowAnchor;
                g.DrawLine(penAxis, pOrigin, new Point(pAreaStart.X, pAreaStart.Y - VerticalMargin / 2));
                g.DrawLine(penAxis, pOrigin, new Point(pAreaEnd.X + HorizontalMargin / 2, pAreaEnd.Y));
    
                penAxis.Dispose();
    
                //3.确定刻度线和标签
                Pen penScale = new Pen(ScaleColor, 1);
                int fontSize = 8;
                for (int i = 0; i <= XScaleCount; i++)
                {
                    int x = i * (iAreaWidth / XScaleCount) + pAreaStart.X;
                    g.DrawLine(penScale, x, pAreaStart.Y, x, pAreaEnd.Y);
                    string lbl = (i * (xRange / XScaleCount)).ToString();
                    if (xRange == 1440)   //如果按照一天分钟时间显示
                        lbl = (i * (xRange / XScaleCount) / 60).ToString();
                    if (i != 0)
                    { g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(x - fontSize, pAreaEnd.Y + VerticalMargin / 9)); }
                }
                for (int i = 0; i <= YScaleCount; i++)
                {
                    int y = pAreaEnd.Y - (i * (iAreaHeight / YScaleCount));
                    g.DrawLine(penScale, pAreaStart.X, y, pAreaEnd.X, y);
                    string lbl = (i * (yRange / YScaleCount)).ToString();
                    g.DrawString(lbl, new Font("微软雅黑", fontSize, FontStyle.Regular), new SolidBrush(AxisColor), new Point(pAreaStart.X - (fontSize * lbl.Length) - HorizontalMargin / 9, y - fontSize / 2));
                }
    
                //4.画曲线面积
                //4.1得到数据
                //4.2数据排序 :为了能顺序画出图,需要对X轴上的数据进行排序  冒泡排序
                List<Point> listPointData = SortingData(data);
    
                //4.3.数据转换:将实际的数据转换到图上的点
                List<Point> listPointGraphics = new List<Point>();//图上的点
                foreach (Point point in listPointData)
                {
                    Point p = new Point();
                    p.X = pAreaStart.X + Convert.ToInt32((iAreaWidth / xRange) * point.X);     //120为实际值的取值范围0-120
                    p.Y = pAreaStart.Y + (iAreaHeight - Convert.ToInt32((iAreaHeight / yRange) * point.Y)); //1000为实际值取值范围0-1000
                    listPointGraphics.Add(p);
                }
    
                //4.3将点的集合加入到画曲线图的路径中
                GraphicsPath gpArea = new GraphicsPath();
    
                //第一个点  //起点要从X轴上开始画 结束点也要画回X轴:即在开始点和结束点要多画一次原点的Y
                gpArea.AddLine(new Point(listPointGraphics[0].X, pOrigin.Y), listPointGraphics[0]);
                //中间点
                for (int i = 0; i < listPointGraphics.Count - 1; i++) //注意:超出数组界限时,编译器不会出错
                {
                    gpArea.AddLine(listPointGraphics[i], listPointGraphics[i + 1]);
                }
                //最后一个点
                gpArea.AddLine(listPointGraphics[listPointGraphics.Count - 1], new Point(listPointGraphics[listPointGraphics.Count - 1].X, pOrigin.Y));
    
                SolidBrush brush = new SolidBrush(GraphColor);//定义单色画刷 
    
    
                if (isFill)
                {
                    g.FillPath(brush, gpArea);   //填充
                }
                else
                {
                    g.DrawPath(new Pen(GraphColor, 5), gpArea);  //边缘 
                }
    
                gpArea.CloseFigure();  //是否封闭
    
                return CurrentImage;
            }
    
            /// <summary>
            /// 数据排序
            /// </summary>
            /// <param name="lp"></param>
            /// <returns></returns>
            private List<Point> SortingData(List<Point> lp)
            {
                for (int i = 0; i < lp.Count - 1; i++)
                {
                    for (int j = 0; j < lp.Count - 1 - i; j++)// j开始等于0,  
                    {
                        if (lp[j].X > lp[j + 1].X)
                        {
                            Point temp = lp[j];
                            lp[j] = lp[j + 1];
                            lp[j + 1] = temp;
                        }
                    }
                }
                return lp;
            }
        }

     

             在Form1中进行调用演示

                再演示中都是使用随机数生成的一些数据。直接画在Form1的窗体上。
                1.单纯曲线图

                

        public partial class Form1 : Form
        {                     
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                LoadingUI();
            }
    
            GraphEdit graphEdit;
            Color boardColor = Color.FromArgb(17, 81, 138);//指定绘制图的背景色  
            Thread toUpdate;                               //刷新线程
            private void LoadingUI()
            {
                graphEdit = new GraphEdit(640,350 , boardColor);
                graphEdit.HorizontalMargin = 50;                                   //横水平边距
                graphEdit.VerticalMargin = 80;                                     //竖垂直边距
                graphEdit.AreasColor = Color.FromArgb(100, 0, 0, 0);         //画图区域颜色
                graphEdit.GraphColor = Color.FromArgb(255, 110, 176);        //曲线面积颜色
                graphEdit.AxisColor = Color.FromArgb(255, 255, 255);         //坐标轴颜色
                graphEdit.ScaleColor = Color.FromArgb(20, 255, 255, 255);          //刻度线颜色
    
                graphEdit.XScaleCount = 24;          //X轴刻度线数量
                graphEdit.YScaleCount = 10;          //Y轴刻度线数量
                toUpdate = new Thread(new ThreadStart(Run));
                toUpdate.Start();
            }
    
            private void Run()
            {
                while (true)
                {
                    Image image = graphEdit.GetCurrentGraph(this.GetBaseData(), XRange, YRange,false);  //如果是面积曲线图将最后一个参数设为true
                    Graphics g = this.CreateGraphics();  //指定使用那个控件来接受曲线图
     
                    g.DrawImage(image, 0, 0);
                    g.Dispose();
                    Thread.Sleep(500);                 //每2秒钟刷新一次  
                }
            }
    
            float XRange = 1440;   //X轴最大范围(0-1440)
            float YRange = 500;    //Y轴最大范围(0-500)
    
            /// <summary>
            /// 得到(数据库)数据
            /// </summary>
            /// <returns></returns>
            private List<Point> GetBaseData()
            {
                Random r = new Random();
                List<Point> result = new List<Point>();  //数据
                for (int i = 0; i < XRange-200; i+=30)
                {
                    Point p;
                    if(i<100)
                    p = new Point(i, r.Next(180, 200));
                    else
                        p = new Point(i, r.Next(200, 220));
                    result.Add(p);
                }
                return result;
            }
    
            private void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
                try
                {
                    toUpdate.Abort();
                }
                catch (Exception)
                {
                    Environment.Exit(0);
                }
            }
        }

      效果图

    2.面积曲线图

    代码只需要修改下面这行代码

      Image image = graphEdit.GetCurrentGraph(this.GetBaseData(), XRange, YRange,true);  //如果是面积曲线图将最后一个参数设为true

    效果图:

     

    下载地址:

    https://github.com/mefdeamon/AreaGraphsInWinform

     

    心得总结

    GDI+是最近才开始接触的工具,功能很强大,值得挖掘的东西很多。好的界面效果是我一直追求的,希望未来的路越来越长。

    对于编程而言,实现的思路很重要,很多时候我们需要画图和打草稿来完善我们思路。

    新手上路,不足之处,详加批注,共勉滋补   

    展开全文
  • ros中rqt_plot画速度曲线欢迎使用Markdown编辑器新的改变前言一、rqt_plot是什么?二、使用步骤1.引入库2.实现:总结 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想...


    前言

    提示:这里可以添加本文要记录的大概内容:
    例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、rqt_plot是什么?

    一种工具,该工具是为了解决数据分析任务而创建的。

    二、使用步骤

    1. 代码

    publish_node.cpp:

    #include "ros/ros.h"
    #include "std_msgs/String.h" //use data struct of std_msgs/String  
    #include "mbot_linux_serial.h"
    #include "topic_example/speed.h"
    #include <sstream>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    //test send value
    double testSend1 = 0.2;
    double testSend2 = 0.4;
    double testSend3 = 0.3;
    double testSend4 = 0.3;
    unsigned char testSend5 = 0x07;
    
    //test receive value
    double testRece1=0.0;                  
    double testRece2=0.0;
    double testRece3=0.0;
    double testRece4=0.0;
    unsigned char testRece5=0x00;
    
    int main(int agrc,char **argv)
    {
        ros::init(agrc,argv,"public_node");
        ros::NodeHandle nh;
        ros::Publisher my_pub = nh.advertise<topic_example::speed>("myspeed",1);
    
        topic_example::speed msg;
        ros::Rate loop_rate(50);
        
        //串口初始化
        serialInit();
        double t=0;
        while(ros::ok())
        {
            ros::spinOnce();
            //向STM32端发送数据,前两个为double类型,最后一个为unsigned char类型
    	    writeSpeed(testSend1,testSend2,testSend3,testSend4,testSend5);
            //打印数据
    	    ROS_INFO("send to stm32:%f,%f,%f,%f,%d\n",testSend1,testSend2,testSend3,testSend4,testSend5);
            //从STM32接收数据,输入参数依次转化为小车的线速度、角速度、航向角(角度)、预留控制位
    	    readSpeed(testRece1,testRece2,testRece3,testRece4,testRece5);
    
            msg.a=testRece1;
            msg.b=testRece2;
            msg.c=testRece3;
            msg.d=testRece4;
            my_pub.publish(msg);
    
            //打印数据
    	    ROS_INFO("recevie form STM32:%f,%f,%f,%f,%d\n",testRece1,testRece2,testRece3,testRece4,testRece5);
    
            loop_rate.sleep();
    	t+=1.0/50.0;
        }
        return 0;
    }
     
    
    
    
    

    2.操作实现:

    代码如下(示例):

    $ roscore 
    $ rosrun topic_example publish_node
    $ rqt_plot /myspeed
    

    在这里插入图片描述


    三、速度参数更改;

    不完善:

    1. 代码

    在这里插入图片描述
    增加节点:
    speed_publisher.py:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # 该例程将发布/speed_info话题,自定义消息类型topic_example::Person
    
    import rospy
    from topic_example.msg import speed
    
    def velocity_publisher():
    	# ROS节点初始化
        rospy.init_node('speed_publisher', anonymous=True)
    
    	# 创建一个Publisher,发布名为/person_info的topic,消息类型为learning_topic::Person,队列长度10
        speed_info_pub = rospy.Publisher('/speed_info', speed, queue_size=10)
    
    	#设置循环的频率
        rate = rospy.Rate(10) 
     
        while not rospy.is_shutdown():
    		# 初始化learning_topic::Person类型的消息
        	speed_msg = speed()
        	speed_msg.a = 0.3;
        	speed_msg.b = 0.2;
        	speed_msg.c = 0.4;
    
    		# 发布消息
            speed_info_pub.publish(speed_msg)
        	rospy.loginfo("Publsh speed message[%f, %f, %f]", 
    				speed_msg.a, speed_msg.b, speed_msg.c)
    
    		# 按照循环频率延时
            rate.sleep()
    
    if __name__ == '__main__':
        try:
            velocity_publisher()
        except rospy.ROSInterruptException:
            pass
    
    
    
    
    

    更改:
    publish_node.cpp:

    #include "ros/ros.h"
    #include "std_msgs/String.h" //use data struct of std_msgs/String  
    #include "mbot_linux_serial.h"
    #include "topic_example/speed.h"
    #include <sstream>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    //test send value
    //double testSend1 = 0.2;
    //double testSend2 = 0.4;
    //double testSend3 = 0.3;
    //double testSend4 = 0.3;
    //unsigned char testSend5 = 0x07;
    
    //test receive value
    double testRece1=0.0;                                               
    double testRece2=0.0;
    double testRece3=0.0;
    double testRece4=0.0;
    unsigned char testRece5=0x00;
    
    // 接收到订阅的消息后,会进入消息回调函数
    void speedInfoCallback(const topic_example::speed::ConstPtr& msg)
    {
        // 将接收到的消息打印出来
        ROS_INFO("Subcribe speed Info: a:%f  b:%f  c:%f", 
    			 msg->a, msg->b, msg->c);
    
    //test send value
    double testSend1 =msg->a;
    double testSend2 =msg->b;
    double testSend3 = msg->c;
    double testSend4 = 0;
    unsigned char testSend5 = 0x07;
    
            //向STM32端发送数据,前两个为double类型,最后一个为unsigned char类型
    	    writeSpeed(testSend1,testSend2,testSend3,testSend4,testSend5);
            //打印数据
    	    ROS_INFO("send to stm32:%f,%f,%f,%f,%d\n",testSend1,testSend2,testSend3,testSend4,testSend5);
    
    
    }
    
    int main(int agrc,char **argv)
    {
        ros::init(agrc,argv,"public_node");
        ros::NodeHandle nh;
        ros::Publisher my_pub = nh.advertise<topic_example::speed>("myspeed",1);
    
    // 创建一个Subscriber,订阅名为/person_info的topic,注册回调函数personInfoCallback
        ros::Subscriber person_info_sub = nh.subscribe("/speed_info", 10, speedInfoCallback);
    
        topic_example::speed msg;
        ros::Rate loop_rate(50);
        
        //串口初始化
        serialInit();
        double t=0;
        while(ros::ok())
        {
            ros::spinOnce();
    
            //从STM32接收数据,输入参数依次转化为小车的线速度、角速度、航向角(角度)、预留控制位
    	    readSpeed(testRece1,testRece2,testRece3,testRece4,testRece5);
    
            msg.a=testRece1;
            msg.b=testRece2;
            msg.c=testRece3;
            msg.d=testRece4;
            my_pub.publish(msg);
    
            //打印数据
    	    ROS_INFO("recevie form STM32:%f,%f,%f,%f,%d\n",testRece1,testRece2,testRece3,testRece4,testRece5);
            loop_rate.sleep();
    	t+=1.0/50.0;
        }
        return 0;
    }
     
    
    
    
    
    

    2.操作实现:

    代码如下(示例):

    $ roscore 
    $ rosrun topic_example publish_node
    $ rqt_plot /myspeed
    

    总结

    以上就是今天要讲的内容,本文仅仅简单介绍了 rqt_plot 的使用,而 rqt_plot 提供了大量能使我们快速便捷地处理数据的函数和方法。

    展开全文
  • python绘制函数曲线

    万次阅读 多人点赞 2019-09-15 23:21:44
    之前一直使用matlab来画曲线,确实非常方便,但matlab作为商业软件,价格很贵,动辄好几个GB,安装很慢,并且还涉及license问题。 相对来说,python完全免费,只需要安装一个解释器,并且有很多科学计算库可以调用,...
  • 绘制科赫曲线

    千次阅读 2019-10-14 17:44:57
    绘制科赫曲线,并改变曲线绘制的速度、绘制方向和颜色 阶数:1-6阶 import turtle # 引入决解问题需要的工具——turtle作图包 # 定义turtle画笔和画布的参数 def huabi(i,h): if i==6: turtle.pencolor('red'...
  • 用python实现艾宾浩斯抗遗忘曲线(记忆曲线)学习复习计划表,代码如下 from datetime import date, timedelta times = [2, 5, 8, 15, 30, 60] #复习间隔,以天数为单位 for a in times: review_time = date.today...
  • Matlab 曲线

    千次阅读 2013-10-21 11:45:34
    上面的plot格式中,选项是指为了区分多条画出曲线的 颜色,线型及标记点 而设定的曲线的属性.MATLAB 在多组变量绘图时,可将曲线以不同的颜 色,不同的线型及标记点表示出来. 这 些选项如下表所示: 各种颜色属性...
  • 让CPU占用率画正弦曲线

    千次阅读 2011-04-22 16:38:00
    都说计算机编程乏味,可是好多程序员却玩地津津有味。计算机的世界什么都可以用来做为程序员的游戏,比如CPU。下面就让我们来让Windows下的任务管理器听我们指挥,画完美的正弦曲线吧!
  • 主要介绍了python 对任意数据和曲线进行拟合并求函数表达式的三种解决方案,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 印能捷调曲线教程

    2018-09-22 14:59:58
    此软件做的曲线是应用在PRINERGY的出版处理模板上,是调整來的印版的网点密度。
  • 本篇博客主要对 HslControls 中的曲线控件做一个详细的教程说明,大家可以根据下面的教程开发高质量的曲线控件 Prepare 先从nuget下载到组件,然后就可以使用组件里的各种组件信息了。 在Visual Studio ...
  • ROC曲线实例分析

    万次阅读 热门讨论 2016-08-02 03:11:50
    1 ROC分析相关 ROC(Receiver Operating Characteristic,受试者工作特征曲线)的概念来自信号检测原理中 ...通过以(FPR,TPR)为坐标点画二维平面中的曲线,即ROC曲线 Recall = TPR = TP/(TP+FN) (True Posit
  • 利用openCV画B样条基函数的曲线

    千次阅读 2016-03-26 16:32:46
    最近要做双三次B样条插值(bicubic),从基础的三次B样条开始看起,但是网上基本没有介绍B样条基函数的文章,所以在...公式太长,我懒得,可以在程序里面看。 下面用openCV画三次B样条基函数: #include...
  • 用C++画正态曲线

    2018-01-07 17:00:07
    C++画正态曲线,Gamma函数的计算,不完全Gamma函数,误差函数生产正态分布函数
  • 曲线及其方程

    千次阅读 2015-05-06 07:44:44
    曲线方程 动态演示其生成:
  • matplotlib绘图
  • 曲线和曲面 在生活中存在着各种各样光滑的曲线或曲面,例如汽车的表面,钢珠球等。 在建模的时候,我们通常使用很多的小三角形来逼近这样的曲面,因此放大了看,就会发现这些面其实是凹凸不平的。但是实际生活中...
  • NURBS曲线与曲面

    千次阅读 2018-11-14 01:26:03
    NURBS曲线与曲面
  • 使用PyTorch拟合曲线

    千次阅读 2019-07-18 11:00:59
    如何搭建拟合曲线模型 目的: 神经网络是如何通过简单的形式将一群数据用一条线条来表示. 或者说, 是如何在数据当中找到他们的关系, 然后用神经网络模型来建立一个可以代表他们关系的线条 在研究过程中,我们会得到...
  •   在使用caffe的过程中,我们知道其在训练过程中会打印相应的日志信息,可以帮助我们观察和判断模型是否收敛等。将日志信息重定向到文件中,然后利用python解析文件并用matlplotlib库即可将训日志信息以图像的...
  • 什么是ICC曲线

    千次阅读 2013-11-05 13:22:49
     很多人都问及ICC曲线,但又都很不了解,甚至有些人认为有了ICC曲线就能打印很漂亮的图片,其实不然,下面就我所掌握的知识给大家做个通俗的理解.国际色彩协会The international Color Consortium简称ICC,提出...
  • JAVA Applet——绘制心形曲线

    千次阅读 2018-10-09 15:34:00
    非常有名的笛卡尔曲线数学公式:(x2+y2−2ax)2=4a2(x2+y2)(x^{2}+y^{2}-2ax)^{2}=4a^{2}(x^{2}+y^{2})(x2+y2−2ax)2=4a2(x2+y2) 即心形曲线,本例通过Applet绘制笛卡尔曲线。 2.实现过程 笛卡尔曲线是一个...
  • 安卓动态曲线的绘制

    千次阅读 2015-11-20 17:58:24
    我们在安卓开发中,有时会用到统计图表的功能,而曲线绘制是其中比较典型的一种,一般是利用给定的坐标点集和安卓自带的绘图模块进行绘制,直接得到的是一张完整的静态的曲线图。但有时,我们需要动态绘制一些曲线图...
  • (1)绘制余弦曲线和直线 /* 绘制余弦曲线和直线 在屏幕上显示0~360度的cos(x)曲线与直线f(x)=45*y+31的迭加图形。...图形迭加的关键是要在分别计算同一行中两个图形的列方向点坐标后,正确判断相互的
  • python散点图拟合曲线-python曲线拟合

    千次阅读 2020-11-01 12:49:45
    http://blog.sina.com.cn/s/blog_aed5bd1d0102vid7.html1.多项式拟合范例:import matplotlib.pyplot as pltimport numpy as np#潘海东,2014/1/13x = np.arange(1, 17, 1)y = np.array([4.00, 6.40, 8.00, 8.80, ...
  • OpenGL 实践之贝塞尔曲线绘制

    千次阅读 2020-02-10 10:00:00
    说到贝塞尔曲线,大家肯定都不陌生,网上有很多关于介绍和理解贝塞尔曲线的优秀文章和动态图。以下两个是比较经典的动图了。二阶贝塞尔曲线:三阶贝塞尔曲线:由于在工作中经常要和贝塞尔曲线打交道,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,601
精华内容 22,240
关键字:

怎么打出曲线