任意数学表达式计算
2009-04-15 20:03:45 来源:WEB开发网函数:200*sin[X+30]+100*sin[X/2.0] 绘图结果:
图片看不清楚?请点击这里查看原图(大图)。
3.2样例二:数值计算器
输入表达式可计算结果;
运行效果如下:
图片看不清楚?请点击这里查看原图(大图)。
用matlab验证计算结果:
pow[(log[2,3+2]*2*log[2,3+2]*2),0.5]
程序计算值:4.64386 matlab计算值:(log2(3+2)*2*log2(3+2)*2)^0.5 ans =4.6439
1+2+3/4+sin[30]+log[10,100]
程序计算值:6.25
matlab计算值:1+2+3/4+sin(30*3.1415/180.0)+log10(100) ans =6.2500
(注意:matlab中使用弧度)
为了检验程序的正确形使用6层嵌套计算结果并同matlab计算结果比较
matlab计算值
exp(sin(exp(sin(exp(sin(30*3.1415/180.0))*3.1415/180.0))*3.1415/180.0)) ans= 1.0181
(注意:matlab中使用弧度)
4. 关于CExpress的几点说明
以前上C++课时,老师讲过可以用堆栈的方法实现表达式计算,但是那时候没好好学,所以对堆栈一点也不懂。CExpress纯粹是表达式分析,实现所有功能使用的时CString类,靠的是它的成员函数如:Find, Delete,GetAT,SetAT。不存在什么堆栈,链表等问题。所以在效率上有不如堆栈方法等高,但是很实用。比较满意的一点是能实现一些复杂表达式的计算和函数计算,如:
exp[(56-(((((((sin[(1+29)]+3+2.5)+4)+sin[30]+4.5)+6)+7)+8)+9)-10)]+56-sin[30]+4.5
计算结果:62.7183
网上估计也有一些表达式计算,但是到目前为止还未找到令人兴奋的代码。我用了两天从算法分析,程序设计,调试BUG,文章写作总算顺利。一直犹豫要不要公布代码(包括自己很辛苦写的DataShow类),自己学习的时候从网上得到了很多东西。自己写的东西若对大家有用,那是编程乐趣所在,顾决定公布代码。
若你发现Bug请联系我;若你想获得代码(当然在VCKBASE上能得到)请联系我;若你想和我交流,请联系我。
联系方式:TEL:13512524413,mail:visualsan@yahoo.cn
南京航空航天大学能源与动力学院 庄三少
5.关于DataShow的说明:
DataShow是本人编写的一个数据显示类,可以显示X,Y轴的数据,用它基本上可以实现一般的数据显示,在VCKBASE的代码下载处的C++MFC一般编程问题处可以得到它,里面有相关文档,说明,使用方法以及样例程序。
更多精彩
赞助商链接