2015年休斯顿大学实习周记(七)

作者:编辑:刘艳红发布:2015-11-20点击量:

程天舒

MATLAB to C++

虽然轮廓提取最终的仿真效果与paper的结果有所出入,但是matlab部分基本完成,另外图像分割部分的算法经验证可行,但是速度限制不能处理过大的图片,而且在matlab平台上暂时想不出更有意义的优化,基于现状导师提议:转C。

当导师问我“你会用C,对吧?”,我的肯定的回答是颤抖这说出来的,肯定是因为简历上明摆着的吗,颤抖是因为上一次接触C语言还是两年前大一上的C语言课,而且理论水平不含结构体及以后(学时有限,没学),实践水平也仅停留在数字符串,用星号打印三角形等入门级别。刚来实验室初用matlab的陌生感卷土重来,而且经反复确认我要用的编程语言实际上是C++,因为在他们眼中C和C++就是一个东西,但C++不是比C多一个难懂的“类(CLASS)”吗?而且不同于在matlab上做仿真一气呵成,换用C代码导师建议我每写完一个函数就测试正确性,如果正确,再用CUDA改写使之能借助GPU的并行计算提高速度,最后做成一个封装好的可移植性强的速度快的CUDA库函数,一个函数彻底优化封装好了再做下一个。

又是C++又是CUDA,又是自主学习中经常遇见的“万事开头难”的局面,我曾经也试过从自学理论教材入手的办法,但往往因为书中内容太多基本看完第一章就犯困打退堂鼓了,久而久之我找到了更高效快捷的途径:选一个最简单的任务上手,因为编程这种东西理论和实践差别很大但它的优点是实践的门槛不高,一台电脑一台人脑就够,所以学习变成你完全可以直入主题直接上手,另外选一个简单的任务也很重要,新手在学习一门新技能的初期如同面对一片未知的海洋,迷茫而恐惧,这时你不应该一头扎进深水区而是要选择一片浅滩去涉足,因为浅滩是已知和未知的过渡,已知的陆地和不多的未知的海水,随着你进入浅滩一步一个脚印的试探前行,下水的勇气便有了,最难的开头就过去了。

C++最简单的是什么?当然莫属“hello world”!于是我先跟着youtube视频编写“hello world”程序,与此同时学会了用Cmake进行configure;然后尝试改写matlab中的rgb2gray函数(彩色图转灰度图),于是学会了如何在实验室的库函数中加入CImg的库函数,以便在主函数中直接调用实验室的库函数来使用CImag(导师说这样做可以防止以后CImg出现更新版本需要大规模修改原代码),而就是在读实验室的库函数Image.h中接触到了类的概念,非常感谢Pavel师兄十分耐心的帮我解答了读Image.h遇到的若干疑点,尤其让我对类的概念有了极大的认识。其实CLASS(OBJECT)就类似以前C的结构体,它是一个多元素的集合,C++中类的内容似乎更加灵活,不仅可以添加成员变量还可以可添加成员函数。就这样一步一步我基本掌握了我所需要的基本技能,于是另外又花了几个小时终于写成了第一个gauss_derivative_filter函数(高斯一阶导滤波器)。

这次C++入门比想象的快了许多,我也渐渐发现了学习一门新语言的窍门就是:读程序,敲代码。

黄煜

MATLAB to C++

虽然轮廓提取最终的仿真效果与paper的结果有所出入,但是matlab部分基本完成,另外图像分割部分的算法经验证可行,但是速度限制不能处理过大的图片,而且在matlab平台上暂时想不出更有意义的优化,基于现状导师提议:转C。

当导师问我“你会用C,对吧?”,我的肯定的回答是颤抖这说出来的,肯定是因为简历上明摆着的吗,颤抖是因为上一次接触C语言还是两年前大一上的C语言课,而且理论水平不含结构体及以后(学时有限,没学),实践水平也仅停留在数数字符串,用星号打印三角形等入门级别。刚来实验室初用matlab的陌生感卷土重来,而且经反复确认我要用的编程语言实际上是C++,因为在他们眼中C和C++就是一个东西,但C++不是比C多一个难懂的“类(CLASS)”吗?而且不同于在matlab上做仿真一气呵成,换用C代码导师建议我每写完一个函数就测试正确性,如果正确,再用CUDA改写使之能借助GPU的并行计算提高速度,最后做成一个封装好的可移植性强的速度快的CUDA库函数,一个函数彻底优化封装好了再做下一个。

又是C++又是CUDA,又是自主学习中经常遇见的“万事开头难”的局面,我曾经也试过从自学理论教材入手的办法,但往往因为书中内容太多基本看完第一章就犯困打退堂鼓了,久而久之我找到了更高效快捷的途径:选一个最简单的任务上手,因为编程这种东西理论和实践差别很大但它的优点是实践的门槛不高,一台电脑一台人脑就够,所以学习变成你完全可以直入主题直接上手,另外选一个简单的任务也很重要,新手在学习一门新技能的初期如同面对一片未知的海洋,迷茫而恐惧,这时你不应该一头扎进深水区而是要选择一片浅滩去涉足,因为浅滩是已知和未知的过渡,已知的陆地和不多的未知的海水,随着你进入浅滩一步一个脚印的试探前行,下水的勇气便有了,最难的开头就过去了。

C++最简单的是什么?当然莫属“hello world”!于是我先跟着youtube视频编写“hello world”程序,与此同时学会了用Cmake进行configure;然后尝试改写matlab中的rgb2gray函数(彩色图转灰度图),于是学会了如何在实验室的库函数中加入CImg的库函数,以便在主函数中直接调用实验室的库函数来使用CImag(导师说这样做可以防止以后CImg出现更新版本需要大规模修改原代码),而就是在读实验室的库函数Image.h中接触到了类的概念,非常感谢Pavel师兄十分耐心的帮我解答了读Image.h遇到的若干疑点,尤其让我对类的概念有了极大的认识。其实CLASS(OBJECT)就类似以前C的结构体,它是一个多元素的集合,C++中类的内容似乎更加灵活,不仅可以添加成员变量还可以可添加成员函数。就这样一步一步我基本掌握了我所需要的基本技能,于是另外又花了几个小时终于写成了第一个gauss_derivative_filter函数(高斯一阶导滤波器)。

这次C++入门比想象的快了许多,我也渐渐发现了学习一门新语言的窍门就是:读程序,敲代码。但是用四元数只操作4个数,满足一个约束。单位四元数的对可以表示四维空间中的一个转动。所有单位四元数的集合组成一个三维球S3和在乘法下的一个群(一个李群)。S3是行列式为1的实正交3×3正交矩阵的群SO(3,R)的双重复盖,因为每两个单位四元数通过上述关系对应于一个转动。正是因为这些优点,现在主流的大型电脑游戏或者CAD软件都是用四元数来代替旋转矩阵做旋转变换的。

MATLAB里面提供处理四元数的函数,我经常用的是angle2quat()和quatrotate(),前者是把旋转角度转换成四元数,后者接收四元数和待旋转的矩阵然后返回旋转之后的矩阵。四元数旋转形式如下:

p`=qpq^(-1)

p和p`分别为旋转前和旋转后的向量或者矩阵。如果表示R3的旋转,向量p由如下形式表示:

(x,y,z)=x*i⃗+y*j⃗+z*k⃗

q是单位四元数,q-1是它的倒数(reciprocal)并且四元数也满足欧拉公式:

e^(θ/2*(u*i+v*j+w*k))=cos θ/2+(u*i+v*j+w*k)*sin θ/2

证明这个公式的方法和证明复数欧拉公式一样,用级数展开即可。

我把握自己的一个控制plate-ball系统的算法改写成用四元数旋转的之后发现运行速度大幅提升。之前要238秒多一点的运行时间,现在只要17秒多。但是MATLAB提供的四元数操作函数有些缺陷;它无法操作含有变量的四元数,所以我没办法把我那个梯度下降法的控制算法改写成四元数形式。

这周一的时候我把我实现的梯度下降法的算法给Aaron看,Aaron修改了几个参数然后观察了重新生成的误差曲线,看完之后一直和我强调说曲线很奇怪,让我确认一下写的代码是不是正确的。周三的时候我仔细看了一番之后发现代码确实有点问题,全局目标函数一直被覆盖了,规划的都是局部目标函数。但是改回来之后发现用确定步长的梯度下降法收敛性太差了,比之前差了很多。所以我决定要实现一个可变步长的。

然后问题就来了搜索步长的算法怎么解决?和我一个实验室的印度硕士生srikanth用过梯度下降法,然后我问他怎么解决变步长的问题,他和我说他用的也是步长0.01的梯度下降法。后来我自己在维基上找了一种比较通用的搜索思想——黄金分割法(golden line search)。费了一番工夫之后把算法完成了,采用变步长的梯度下降法生产的误差曲线和路径如下:

图一:误差收敛曲线(变步长梯度下降法)

图二:对应的路径

可以明显看出,这种变步长的方法可以让误差收敛得快很多而且生成的轨迹也不像之前的那么死板。

后来通过不断地变换参数我发现了一个现象:存在那么一些特定的z

轴旋转角度能使旋转后的球误差快速下降。后来和Aaron讨论之后我们猜测,可能是这些角度使得所有球的z轴在xy平面的投影指向一致了。然后为了验证这个猜想,我用MATLAB重新仿真了一下这种情况,Aaron建议我先用开挂的方法单独操作球,看看是不是这个情况。按照这个思路生产的误差曲线和轨迹如下:

图三:如果能把球的指向弄一致之后的误差曲线

图四:上述情况生成的轨迹

可以明显看出来误差收敛为零了,所以说如果可以做到这点,那么这个控制算法的仿真基本就算做完了,之后就可以开始硬件实验来验证这个了。

王泽

这周主要的任务是看文献(关于如何利用NPGD在红外区来实现超高灵敏度PD),以及完成两个实验。

文献部分,还在整理当中,到时候需要给组里面的一个印度的phd做一个汇报,告诉他每篇文章的主要内容和精髓。之后会在周记中整理出来这部分内容。

关于实验部分。实验一是帮助富生学长检测他改变adhension layer的厚度之后做出来的一批sample的变化,主要是用硝酸去做一个腐蚀的过程。把金银合金的腐蚀的过程展现出来。这个过程叫做“monitor”,就是监视的意思。这个和之前的直接看结果的这个步骤不同,这个步骤测试出来的曲线,可以展现反映的过程。

一开始的第一次试验用的是25%的硝酸。除了刚开始注入的时候,吸收峰有明显的变化外,其余的在注射之后基本都没有变化。富生学长一开始说是因为我的操作有问题,导致溶液泄漏,但是后来我反复确认,没有发现溶液泄漏,于是我说有可能是因为硝酸的浓度太低了,但是他说没有,他计算过。后来讨论了很久,我决定用浓度更大的硝酸试一试,看看效果。结果成功了,这一次特别开心。因为完全是自己设计的实验,而且实验结果证明了自己的理论的正确性,所以特别开心。

如果是40%的硝酸,曲线如下图所示:

这个曲线就可以很好的看出来硝酸对于金银合金的作用,曲线随着时间的延长是在不断的减小的。最终想NPGD的吸收谱过渡,这说明这个数据还是很棒的。

下面是50%的硝酸的作用曲线:

明显作用要快一些,也节省时间一下。如果下一次要继续monitor这个过程的话,我们多半会选择50%的硝酸去处理。这样比较合理一点。

第二个实验是帮助玉龙学长测量一下他用PDMS做出来的lens的吸收峰,PDMS的性质我之前也提到过,它的吸收曲线应该是近似直线的。只是理论上的估计,实际上我们会去测量一下。

这个是拿到的lens的样品。玉龙最大的发明是一种叫做dotlens的东西,把dotlens放到手机的摄像头上,手机立马可以变成低倍显微镜,感觉还是很棒的,我想走之前一定要那一点回去玩。

下面是我用UV-VIS测出来的各种不同的吸收曲线:

从图中来看,大部分是平行的,但是有少数样品会有不同的吸收峰,虽然不是很明显,但是还是看得出来。

这就是这个星期大概的实验内容。

李慧晗

第五周还是延续上一周的Rex实验,本来只要做到星期三,但是周二的实验非常不顺。首先digitize做完之后电极位置的误差很大,调整了几次cap之后,电极的位置才勉强达到要求。然后注射gel,左边cap的一个电极注射之后,一直显示为红色,电阻很大,并且发现头套在注射的过程中发生了移动,可能是由于头套拉伸过大,在注射的时候慢慢收缩造成的移动。在注射完gel之后已经拖得很晚了,于是当天的实验就取消了。周四的实验由于另外一个baby project的进行,往后顺延了一天。

进行digitize时的照片

周五下午pediatric exoskeleton开了小组内的组会,对foot和ankle的设计进行了brainstorming。

我主要做GRF相关的,在上周发了两封邮件给GRF论文作者,请求原始数据,希望能够得到答复。

现在的问题是做出来的ankle actuator太大,不适用于儿童,所以要重新设计。现在主要搜集ankle actuation相关的论文,看看前人是怎么设计ankle actuator的。

周日坐metro rail去了Houston natural science museum和zoo。自然科学博物馆很大,在里面看了介绍恐龙的3D电影,和关于宇宙的球幕电影,视觉上非常震撼。自然科学博物馆里还有一个很大的玻璃房,里面有许多植物和蝴蝶。

叶庆莹

转眼就到了第五周,在这周和Ogmen谈过之后,他推荐我在学习paper的同时也要多学习engineering的基础课程。读paper学习的是实验的思想、有更好的理论基础,学技术是为了提高自己做实验的能力,例如C语言编程,Linux/UNIX等等。所以这周,我开始自己找教程学习这些,主要以C语言为主,因为有C++的底子,学起来倒是不难,但是很多细节的语法还是需要揣摩。从下周开始,我也要开始准备每周组会的presentation了,顿时觉得压力有点大,以前都是听师兄们讲,真正轮到自己还是很紧张,这周也在积极准备。

实验室以外,还在准备托福考试,时间上也还比较紧,只剩下3周不到的时间就要考试了,每天口语听力写作阅读一个也不能少。工作之余的时间就少了很多了,但我们还是抽空拜托学长带着我们去了位于downtown的莱斯大学。傍晚的莱斯大学就像中世纪的城堡,学生很少,整个校园有种安静的气息,整体的装饰非常和谐,砖红色为主色,有种温馨温暖的感觉。

IMG_20150828_201202_mh1440867534240

图一莱斯大学

IMG_20150828_200818_mh1440867609257

图二莱斯大学广场

不管是休大还是莱斯大学,都尽力为学生提供更好的学习与生活的环境,从两边的图书馆配置、教授人数、校园环境等等多方面都可以看出。但不得不提学费还是很贵的,所以在美国读得起大学的毕竟还是不多,并且私立学校的学费尤其贵。

这周我们还开了LAW RESIDENCE HALL的会议,这是我们宿舍楼的第一次开会,认识了我们的manager还有RA,是个非常非常漂亮的白人女生,对人也很热情(下图中站起来的女生),我们一起做了热身活动,讲了在校住宿的要求和权利。和国内一样也是要签到的,但氛围还是活跃很多,因为不在方方正正的教室里,大家都感觉很放松,一场比较无聊的教导会议也不觉得长了。在会议上,我们还认识了几个来休大读Master的学生,有机械的还有计算机的,出门在外,大家约好相互串串门

IMG_20150823_192147

图三meeting

储晓青

这一周的主要任务还是看文献,学习一些关于电池及超级电容器的基础知识,寻找实验中问题的解决方法。

周四,我参加了镁电池小组的讨论会。在讨论会中,化学系的老师和姚老师以及该小组的博士生对XRD结果的分析进行了激烈的讨论,讨论时间长达两个多小时。这种讨论会是我在国内没有见识过的,面对一个现象或者问题大家都提出自己的见解和分析,正是在这种思想的交流和碰撞中才会得到相对正确的理论。我原先在华科也是在锂电池课题组学习做实验,因为缺少分析测试设备的原因,研究者大都只关注一个材料的性能而没有手段去分析这个材料储能的原理,所以写出来的文章只不过描述表象而缺少实质的分析和讨论。但是,在国外的实验室,研究者会应用所能用到的设备仪器去探测材料的内部结构以及组装成电池后的结构变化,从而分析出其储能的原理,在文章中用大篇幅分析和讨论,给出自己的理论,所以这种文章才能发表到较高水平的期刊中。由此可见,国内的实验室要提高科研水平,不仅要引进各种先进的测试仪器,还更应该加强老师和学生之间的交流以及讨论。

戴政泓

时间进入第二个月,这周导师带我认识了一下ECE系的一个做薄膜生长的大牛,台湾人,是长硫化钼、石墨烯等二维材料的高手,我特意把我们先前长的比较不错的样品带上希望得到他的指点。他一看我的基片上的薄膜颜色就告诉我这是初期实验最常见的一种,显然,得到的薄膜太厚,如果是monolayer的硫化钼,那么基片颜色不应该有太大变化。他也给我提供一些改进意见,比如用真空泵把体系中的空气除去,再同氩气,生长效果会好很多,同时增大先驱物MoO3和substrate之间的距离。另外他还告诉我,做这种二维材料经验很重要,不同的组通过不同的方法都可能成功。然而实验的可重复性并不乐观,比如他曾经用半年的时间合成了硫化钼薄膜,但是有一次他换了一个boat来装基片和前驱物,就很难再成功合成了,看来我想在之后的两个月能有突破还是任重而道远啊!

韩聪

感觉最近的休斯顿气温要凉快了很多。

这一周都在思考处理钉子加入的问题,仅仅钉长就制造了这么多的麻烦,还有钉子半径和最抽象的钉子散布,我尝试了神经网络的方法,但是由于数据少,非线性问题的解决并不理想。所以我除了在一直思考有没有新的方法,一面不停的仿真数据,观察数据规律。不得不说由于实际仿真的速度很慢,而所需数据的维度又比较高,感觉数据获得速度远远不够。这也更加坚定我做出这个成果,因为这确实意义比较大。

从上周末我有了新室友,一个ABC,看着非常亲切。我们有时间就会一起聊聊天,交流交流文化。现在开学了,学校里每天的人变多了,这里的人感觉都过的非常happy,我也很happy,因为每天都可以吃这里的食堂了,这里的食堂真的不错,自助餐,虽然西餐在中国人这里口碑并不好,但我非常喜欢。

周五晚,学长带我们几个人逛了莱斯大学,看了露天的Opera,还驱车去了几乎是空城的DOWNTOWN,看了火箭队的球馆丰田中心。我非常的开心,觉得这周非常的充实有意义。

熊诚

一个月已经过去了,这一周过得很忙碌,实验室实验进入了白热化,每天都要至少完成一组实验测量,每天工作到晚上,但是实验数据并不是特别满意,boss也给了我学习cyclic voltammograph的任务,虽然比较简单,但是涉及的原理是我没有学习过的,所以学习起来有一点吃力,不过还是能够handle,每天做试验的时候和Iran小哥聊天还是很长知识的,了解了Iran的情况,以后可去Iran参观。

伤心的是我的室友搬走了,不得不说美国人读大学大部分都是靠自己啊,室友觉得学费太贵,银行贷款太多,于是quit了,刚刚和Justin混熟,略伤感。

不得不说在实验室的学习让我认识到书本的知识更多的只是对你的一种检测和磨砺,真正开始进入实验室工作看的更多的是你的想法和态度,有时候知识的广度也是很重要的,而且实验室还是比较严格的,boss更多的是把你当做工作人员看待了。

Copyright © 华中科技大学启明学院 版权所有