面向对象第一单元表达式博客作业

第一单元三次作业主题均为表达式求导。

第一次作业需要完成的任务为简单多项式函数的求导,运算法则只报包括加法和乘法,因子只有常数和幂函数。

完成此次作业我的做法是设计三个类,Diff,Poly和Item,分别为求导的主函数类,多项式类和项类。我在Item类总定义项的求导,在Poly类中一次完成表达式的匹配和项的分割,然后得到幂函数的底数、指数后逐项求导,再合并同类项并化简,输出结果多项式。

本次作业需要注意的问题是一次完成表达式的匹配和项的分割的做法并不好,容易在正则匹配时爆栈或在分割项时匹配错误。

第二次作业在第一次作业的基础上增加了三角函数求导的需求,也因此涉及了函数相乘的求导。

在这次作业中的三个类Deriv,Poly,Item大体与第一次作业相似,将每一项抽象为k*x^a*sinx^b*cosx^c进行求导,主要改进在于由一次匹配整个表达式改为逐项匹配。

本次作业由于涉及三角函数,性能优化方面多了需要做的处理,比如恒等式sinx^2+cosx^2=1的使用,另外将每一项抽象为k*x^a*sinx^b*cosx^c进行求导的做法虽然简单,但不利于扩展,若使用继承、接口等更利于完成第三次作业。

第三次作业的嵌套和表达式因子使架构设计和输入处理方面存在困难,求导方面也相应出现了复合函数求导。

这次作业我使用了9个类,表达式类Expression,项类Item,因子父类Factor,5个因子子类(常数类Constant,余弦函数类Cos,正弦函数类Sin,嵌套因子类Nesting,幂函数类Pow),和主函数类Main。做法采用指导书提示的建立表达式树然后在树上求导,输出结果未做优化,本次作业UML类关系图见下。

经过第一单元三次作业,我掌握了初步的面向对象思想,并树立了测试程序的重要意识。

转载于:https://www.cnblogs.com/buaa17373128/p/10611216.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值