博文

做科研的几点体会(2006-07-05 15:57:00)

摘要:序
我刚刚开始做实验的时候,别人怎么说我就怎么做,每天在实验台旁干到深夜,以为这就是科研了。两个月过去,突然发现自己还在原地踏步。那种感觉,只能用"沮丧"来形容。我开始置疑自己的行为和观念。感觉有种习惯的力量在束缚着我。习惯于人云亦云,习惯于奉命行事,习惯于忙忙碌碌。我根本不是什么研究生,只不过是一个廉价而又勤奋的技术员罢了。后来看到周围的研究生在重复同样的错误,我又惊讶于这些问题的普遍性。于是我决定把科研中的经验总结出来,与大家探讨。希望借此逼近真正意义上的科研;希望这些经验在经历千锤百炼之后成为研究生群体的积累,使后来人可以借鉴,少走弯路,直达问题的实质。要感谢丁香园,在这里我才能思考得深入。是为序。
体会(一)
1.一半时间做实验,一半时间看文献。
千万不能把时间全部消耗在实验台上。看文献、看书、看别人的操作、听别人的经验、研究别人的思路,边做边思考。要学会比较,不要盲从。否则,会被一些小小的问题困扰许久。
2.准备越充分,实验越顺利。
古人云,磨刀不误砍柴工。前期的知识储备、文献储备、材料准备、方法准备可以避免手忙脚乱,充分的预实验使你充满信心。一步一个脚印,就不必"从头再来"。最不能容忍的是在开始的几步偷懒,造成后面总有一些无法排除的障碍。
3.记录真实详尽。
人总是有一点虚荣心的。只把成功的步骤或漂亮的结果记到实验记录里,是很多人的做法。殊不知,许多宝贵经验和意外发现就这样与你擦肩而过。客观、真实、详尽的记录是一笔宝贵的财富。
4.不要为老板省钱。
效率为先。整天算计着省钱,一旦用了不可靠的东西,只会浪费时间,遭受打击,到头来一分钱也省不了。
5.把握心理优势。
做过实验的人都经历过失败和挫折。有些失败应当在预实验阶段发生,你这时能坦然接受。假如不做预实验,在正式的实验中遇到,你的挫折感就很明显。假如你因为赶时间而误操作,你会沮丧。假如你能因为目前心浮气燥而果断地放一放,就可以避免悲剧的发生。假如你早上进入实验室之前还不知道今天要干什么,你最好想好了再去。最大的错误是重复犯同样的错误。记住,屡教不改者不适合做实验。
体会(二)
1.先看综述,后看论著
看综述搞清概念,看论著掌握方法
2.先看导师既往发表的文章,再看师兄师姐答辩的论文
看前者知道大......

阅读全文(67) | 评论:0

常见插值方法介绍(2006-07-05 15:15:00)

摘要:Inverse Distance to a Power(反距离加权插值法)”、
“Kriging(克里金插值法)”、
“Minimum Curvature(最小曲率)”、
“Modified Shepard's Method(改进谢别德法)”、
“Natural Neighbor(自然邻点插值法)”、
“Nearest Neighbor(最近邻点插值法)”、
“Polynomial Regression(多元回归法)”、
“Radial Basis Function(径向基函数法)”、
“Triangulation with Linear Interpolation(线性插值三角网法)”、
“Moving Average(移动平均法)”、
“Local Polynomial(局部多项式法)”

1、距离倒数乘方法
距离倒数乘方格网化方法是一个加权平均插值法,可以进行确切的或者圆滑的方式插值。方次参数控制着权系数如何随着离开一个格网结点距离的增加而下降。对于一个较大的方次,较近的数据点被给定一个较高的权重份额,对于一个较小的方次,权重比较均匀地分配给各数据点。
计算一个格网结点时给予一个特定数据点的权值与指定方次的从结点到观测点的该结点被赋予距离倒数成比例。当计算一个格网结点时,配给的权重是一个分数,所有权重的总和等于1.0。当一个观测点与一个格网结点重合时,该观测点被给予一个实际为 1.0 的权重,所有其它观测点被给予一个几乎为 0.0 的权重。换言之,该结点被赋给与观测点一致的值。这就是一个准确插值。
距离倒数法的特征之一是要在格网区域内产生围绕观测点位置的"牛眼"。用距离倒数格网化时可以指定一个圆滑参数。大于零的圆滑参数保证,对于一个特定的结点,没有哪个观测点被赋予全部的权值,即使观测点与该结点重合也是如此。圆滑参数通过修匀已被插值的格网来降低"牛眼"影响。

2、克里金法
克里金法是一种在许多领域都很有用的地质统计格网化方法。克里金法试图那样表示隐含在你的数据中的趋势,例如,高点会是沿一个脊连接,而不是被牛眼形等值线所孤立。
克里金法中包含了几个因子:变化图模型,漂移类型 和矿块效应。

3、最小曲率......

阅读全文(3586) | 评论:0

english:vegetable(2006-04-29 16:48:00)

摘要: 1. broccoli n.[植] 甘蓝;花椰菜   就是俗话说的绿菜花,学名是花椰菜。白色的菜花是cauliflower;卷心菜是cabbage,洋白菜的学名,这可是在市场上随处可见的品种了吧。  
2. asparagus n.[植] 芦笋。   经常能在菜市场或是餐馆里见到这种菜,绿色的茎状物,我印象最深的是在全聚德烤鸭店吃的“鲍贝龙须”,龙须指的就是芦笋。   3. celery n.[植] 芹菜   就算前两种不是很熟悉,这种总算吃过吧   4. bean sprout n.豆芽,豆芽菜   中国常吃的一种菜,是一个合成词,bean是豆子的意思,sprout则是苗、芽的意思。   5. taro n.芋头   芋头是一种产于亚洲热带地区的被广泛种植的植物,很常见吧,也很好吃。   6. eggplant n.茄子   也许是因为茄子长的象鸡蛋,所以才叫这个名字的,可千万别当“蛋菜”翻译啊。还有一种写法是aubergine,看起来麻烦了一点,这个词还有象茄子般的紫色的意思。   7. white[wax] gourd n.冬瓜    这个谁敢说没吃过?不过没有一个专门的单词形容它,仿佛是不公平了些,由于它产于中国,所以只能用两个词形容了,gourd是葫芦的意思,希望下次你吃冬瓜的时候不要有什么心理障碍哦!类似的还有:the Spanish gourd南瓜;the sponge[towel] gourd丝瓜   8. laver n.紫菜   吃馄钝时常放的调味用的菜品,虽然生于海里,是藻类,但也应该算是“菜”了吧。   9. marrow n.西葫芦   长长圆圆的东西,很向茄子的形状。   1. broccoli n.[植] 甘蓝;花椰菜   就是俗话说的绿菜花,学名是花椰菜。白色的菜花是cauliflower;卷心菜是cabbage,洋白菜的学名,这可是在市场上随处可见的品种了吧。  
2. asparagus n.[植] 芦笋......

阅读全文(1980) | 评论:0

文件(2006-04-26 16:28:00)

摘要:二进制文件和ASCII文件 ASCII文件可移植,当需要转换才能输出 如:char ch='5';       int integer=ch-'0';       cout<<"integer"<<integer; 二进制文件不需要转换,当不能在终端或打印机上直接打印,不可移植。 行结束问题: unix以<line feed>作为行结束符, 而window以<carrige return><line feed>作为结束符。要写入二进制数据,必须使用二进制选项打开文件: out_file.open("test.out",std::ios::out|std::ios::binary); 非缓冲区文件读写,对系统调用会消耗大量资源,只有在读取或写入大量二进制数据,或对设备,文件进行直接控制时,才使用。 open() read() write() close() C++输入输出缓冲所有的输出结果。cout,cerr是行缓冲,每还一次行就进行一次缓冲区刷新。......

阅读全文(1761) | 评论:0

c风格文件操作(2006-04-26 16:08:00)

摘要:文件的输入输出 #include<cstdio.h>
FILE *file;
file=fopen(name,mode);//打开文件
status=fclose(file);//关闭,status为0则操作成功
fgetc()从文件中读取单个字符,返回一个整数,若文件中无数据了,则返回常量EOF
fputc(character,file)写入单个字符
fgets()读取一行,包括结束符'\n',把它放到缓冲区中,会引起各种错误发生。
scanf的问题:不太可能正确处理行结束,可用以下方法: char line[100]; fgets(line,sizeof(line),stdin); sscanf(line,"%d %d",&number1,&number2); c风格二进制输入、输出 read_size=fread(data_ptr,1,size,file); 返回值为读取数据大小,当它等于size,则为正确的。 write_size=fwrite(data_ptr,1,size,file);......

阅读全文(1903) | 评论:0

文件输入※输出 (2006-04-26 15:47:00)

摘要:c++文件输入、输出
基于三个类:istream,ostream,iostream,把文件当字节流。程序启动的时候,会自动创建4个类变量 cin,cout,cerr,clog.

#include<iostream>
#include<fstream>
#include<cstdlib>

int main()
{
    const int DATA_SIZE=1000;
    float data_array[DATA_SIZE]={0};
    std::ifstream data_file("number.dat");//输入文件变量
    int i;

    if(data_file.bad()){
        std::cerr<<"error: could not open number.dat"<<'\n';
        exit(8);
    }

    for(i=0;i<DATA_SIZE;++i){
        assert(i>=0);
        assert(i<sizeof(data_array)/sizeof(data_array[0]));
&......

阅读全文(1918) | 评论:0

cout 学习(2006-04-21 13:07:00)

摘要:每次都用cout,一直没有想为什么这样用,今天然看kusk的这篇文章,让我学到不少: 先转贴如下:       和大多数朋友一样,我头一遭遇到cout是在生平第一个看到C++程序——经典的“Hello, World!”中,作为我如今最擅长编写的程序之一(^_^),它大概是这样子的: #include <iostream> using namespace std; int main()
{
    cout << "Hello, World!" << endl;
    return 0;
}        由于以前学过C,所以这段代码的其它部分在我看来都还算“正常”,然而cout却很独特:既不是函数,似乎也不是C++特别规定出来的像if,for一类有特殊语法的“语句”。由于只是初步介绍,所以那本书只是简单的说cout是C++中的“标准输入输出流”对象……这于我而言实在是一个很深奥的术语。这还没完,之后又遇见了cin……因为不知底细,从此使用它们的时候都诚惶诚恐,几欲逃回C时代那简明的printf(),毕竟好歹我可以说:我在调用的是一个函数。那有着一长串<<、>>的玩意,究竟算怎么回事呢?我一直想把它们当作关键字,可偏偏不是,而且居然是用C++语言“做”出来的,呵!但printf()用多了就开始有人好心地批判我的程序“C语言痕迹过重”……
       后来随着学习的深入,总算大概明白了cout/cin/cerr/...的鬼把戏:那些东东不过是变着法儿“哄人”,其实说到底还是函数调用,不过这函数有些特殊,用的是运算符重载,确切地说(以下还是以cout为例)是重载了“<<”运算符。我们现在就让它现出函数的本来面目,请看Hello World!的等效版本: #include <iostream> using namespace std; int main()
{
    co......

阅读全文(1673) | 评论:0

编程修养(2006-04-17 21:49:00)

摘要:编程修养(一)
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。
2、积极向上的态度,有创造性思维。
3、与人积极交流沟通的能力,有团队精神。
4、谦虚谨慎,戒骄戒燥。
5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。 这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如果我要了解一个作者,我会看他所写的小说,如果我要了解一个画家,我会看他所画的图画,如果我要了解一个工人,我会看他所做出来的产品,同样,如果我要了解一个程序员,我想首先我最想看的就是他的程序代码,程序代码可以看出一个程序员的素质和修养,程序就像一个作品,有素质有修养的程序员的作品必然是一图精美的图画,一首美妙的歌曲,一本赏心悦目的小说。 我看过许多程序,没有注释,没有缩进,胡乱命名的变量名,等等,等等,我把这种人统称为没有修养的程序,这种程序员,是在做创造性的工作吗?不,完全就是在搞破坏,他们与其说是在编程,还不如说是在对源程序进行“加密”,这种程序员,见一个就应该开除一个,因为他编的程序所创造的价值,远远小于需要在上面进行维护的价值。 程序员应该有程序员的修养,那怕再累,再没时间,也要对自己的程序负责。我宁可要那种动作慢,技术一般,但有良好的写程序风格的程序员,也不要那种技术强、动作快的“搞破坏”的程序员。有句话叫“字如其人”,我想从程序上也能看出一个程序员的优劣。因为,程序是程序员的作品,作品的好坏直截关系到程序员的声誉和素质。而“修养”好的程序员一定能做出好的程序和软件。 有个成语叫“独具匠心”,意思是做什么都要做得很专业,很用心,如果你要做一个“匠”,也就是造诣高深的人,那么,从一件很简单的作品上就能看出你有没有“匠”的特性,我觉得做一个程序员不难,但要做一个“程序匠”就不简单了。编程序很简单,但编出有质量的程序就难了。 我在这里不讨论过深的技术,我只想在一些容易让人忽略的东西上说一说,虽然这些东西可能很细微,但如果你不注意这些细微之处的话,那么他将会极大的影响......

阅读全文(1401) | 评论:0

解决外部符号错误:_MAIN,_WINMAIN@16,__BEGINTHREAD(2006-04-17 21:40:00)

摘要:在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
下面介绍解决的方法:
1. Windows子系统设置错误, 提示:
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/subsystem:console改成/subsystem:windows
2. Console子系统设置错误, 提示:
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
控制台项目要使用Console子系统, 而不是Windows, 设置:
[Project] --> [Settings] --> 选择"Link"属性页,
在Project Options中将/s......

阅读全文(5973) | 评论:0