- 1、本文档共14页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
科研和工程中的C编程4_方法步骤
科研和工程中的算法设计 科研工程的问题建模方法和步骤 科研工程的问题建模方法和步骤 问题的描述和分析要使用简明规范的学术语言来描述问题,弄清输入、输出和中间过程。提取其中描述性质的物理量作为变量,识别输入、输出、中间变量,并绘制问题的描述图。如: 科研工程的问题建模方法和步骤 用数学/物理/其它模型来建模和描述需要一定的各学科和领域的知识面,寻找相关合适的模型来描述问题,给出严格的数学公式和方程的描述,分析一下方程有没有解析解或数值解,求数值解时要对比不同方法的效率和内存占用情况,并讨论会不会收敛到合理的解,以及在计算机浮点运算不准确情况下会不会收敛。 科研工程的问题建模方法和步骤 设计数据结构,转换为算法,并实现快速原型验证(可用现成的库和工具,如matlab等)。 用工具绘制软件设计图(如用UML绘图),根据问题要求的精度选择数据类型,用C/C++编程、测试、调试、排错。 一般的技巧是设计一下软件系统运行时将有多少对象(可能有动态增长/删减的),每个对象用什么样的类表示。对象间关系以及生存周期判定,决定了在类中该如何编写以关联各个类之间的关系。 科研工程的问题建模方法和步骤 设计类和对象时还要注意类和对象的封装边界和功能明晰,如设计界面时,要做到数据的处理与显示要分离。 用开发工具来剖析编好的程序,进行优化、再测试。 进行可靠性、鲁棒性的分析,修改再测试(除了异常处理,还要查各种边界条件,程序是否能处理无效输入数据)。 科研工程的问题建模方法和步骤 考虑程序内代码的通用化,复用化。这样可慢慢积累自己的库,为以后的编程工作服务。通用化后重新测试程序。 通用化的方法有:(1) 考虑类型模板化。看处理的类型是否可以推广,此时可将类型作为模板参数。如ATL和STL中的容器类都带有描述元素类型的模板参数。 科研工程的问题建模方法和步骤 (2)考虑运算的抽象。如对容器内元素进行枚举的迭代器(iterator)操作运算,就是对用指针来枚举数组元素的抽象,针对每种不同的容器类,实现不同的迭代器类,而运算基于迭代器类进行,用模板参数表示之。 (3) 算法/方法的抽象,可以实现为模板函数/模板类/函数子(functor,重载operator()()),可查看STL中的排序、查找算法。 科研工程的问题建模方法和步骤 (4)风格的抽象。如对某类型有一组相对固定的操作,可以设计成Traits模板类,提供静态方法,并在其它类中调用。特殊类型要特殊处理的可以用特化、偏特化方法。如WTL中定义窗口风格的类,ATL中容器元素比较,STL中迭代器实现类。 (5)二进制级通用化,对于不想公开的代码,使用DLL来封装类/函数/COM组件。 科研工程的问题建模方法和步骤 (6)事件方式。算法运算时间较长,中间状态需要通知调用者时,可以使用COM的事件接口方式,或者回调函数,或者设计模式中的观察者模式(在数据采集/显示等工程应用中,当采集的数据发生改变时可用这个方法来通知客户端的程序以改变界面上的显示)。 参考书: 《设计模式》 科研工程的问题建模方法和步骤 代码/程序通用化的编写还要注意,不能调用特定于某种应用程序的函数和方法,如_tprintf_s, cout等仅用于console程序的类和函数。若使用了它们编写的库,则在编写其他类型的应用程序时将会链入不必要的代码。可以精心设计,使用较原始的数据类型在函数/方法间传递。 此外还可以考虑不同平台下的代码实现,争取编写的库能有一定的移植性*。 科研工程的问题建模方法和步骤 产品化的考虑:使用规范的软件工程的工具(版本控制、wiki、bug跟踪)来开发产品化的软件,把核心算法程序融合进去。检查第三方库的license,非商业用途的代码不可进入自己发布的商业产品(如OpenCV这样的开源库不可进入自己的商业产品),可找允许商业的替代库或者自己开发基础库。 算法评价基本工具 理论分析算法的空间复杂度和时间复杂度,参考《算法和数据结构》书 性能测量工具(windows下和linux下都有) 开发软件提供的代码剖析工具(如Visual studio提供了大量工具) 代码中写API函数来测量,如下表: 算法评价基本工具 上机 编写和完善测量运算时间和内存使用的类。 在前面的例子里加入测量类的代码,对比优化前后的测量数据,并作出结论。 * * 浙江大学计算机学院袁昕 需要从系统的/proc目录读取一些系统信息。然后分析得到结果 GlobalMemoryStatusEx 内存测量 gettimeofday GetLocalTimeCTimeCTimeSpan 时间测量 Linux windows * * * 古堡救美的改进分析 汽车路线有哪些信誉好的足球投注网站
文档评论(0)