由于1.0版本是大二的课程设计,有几个功能是针对指定函数的,所以在2.0版本给它禁用了,等有兴趣了再慢慢改吧,主要是那时写的程序变量名称可持续发展性太差了,现在不想改。
这次2.0版本主要是重写了表达式计算类,所以比1.0版本只在表达式计算方面加强了
1.0版本的限制在于:括号内的运算符只能有一个
2.0版本在其基础上增强了一点点细节,如大小写随意,可输入空格换行等
一【函数表达式】
主要功能:
1】计算任意函数类型,如sinlog......
2】计算任意复合及组合的函数表达式,如sin(log(2,x)+2x)
主要特点:
1】函数报错功能,
如不小心将sin(x)写成了sni(x),
将提示【第1项函数的类型为【sni】,暂无此函数类型】
如括号多写了sin(x)),
将提示【第2个右括号无匹配】
2】大小写随意,如SIn(x)也能识别
3】输入符合我们平时书写的习惯,如-x-1*x(-1)*x都是可以识别的
4】兼容空格、制表符Tab、换行,因此您可以书写得更美观
如sin(cos(tan(cot(x+x*2)+3)+4)+5)
可写成sin(cos(tan(cot(x+x*2)+3)+4)+5)
或者sin
(
cos
(
tan
(
cot
(
x+x*2
)
+3
)
+4
)
+5
)
总之,发挥你的想象力吧
测试数据
sin
(
cos
(
tan
(
x+x*2
)
+3
)
+4
)
/*m_Input="1"
x=1;
m_Input="x"
m_Input="-1-1";
m_Input="(-1)+(-1)";
m_Input="(-1)+1";
m_Input="-2*1";
m_Input="(-2)/1";
m_Input="2/(-1)";
m_Input="(-2)*sin(1.57)";
m_Input="-2sin(1.57)";
x=1.57;
m_Input="-sin(1.57)+2sin(x)";
x=4;
m_Input="log(2,x)*cex(0)+cxn(x,2)";
x=-1;
m_Input="1cos(2sin(tan(log(2,2cxx(-2x,2cos(2x+2cex(0)))))))";//0.959906
x=0;
m_Input="-cos(x)*sin(x)/cos(sin(x))-sin(x)/cos(x)+cos(sin(x))-cos(x)+cex(x)+4log(2,x+2)+5cxn(45.2,x)";//10
m_Input="";
m_Input="-sin(1.57+1.57*2)";
m_Input="-sin(1.57+1.57+1.57)";
*/
二【函数表达式积分】
1cos(2sin(tan(log(2,2cxx(-2x,2cos(2x+2cex(0)))))))
用这个表达式计算积分时,提示错误,因为机器是按照机器的方式工作的
有兴趣可以用MATLAB算一算
这里算法用的是龙贝格大神的,
大二的代码就献丑了
voidCExpInt::OnBnClickedButtonRomberge()
{
//TODO:在此添加控件通知处理程序代码
doubleT[N][N];
doublea,b,h,f0,double_temp,n;
doubledet,esp,x;
intk,l,m;
UpdateData(TRUE);
if(m_MyInput=="")
{
MessageBox("请输入数据");
return;
}
cAnyExp.ReceiveCharacter(m_MyInput,cAnyExp);//接收表达式,cAnyExp为表达式计算类
a=atof(m_My_a);
b=atof(m_My_b);
esp=atof(m_MyEps);
det=esp;
h=b-a;
T[0][0]=(f(a)+f(b))*h/2;
l=0;n=1.0/2;
/******************************【开始积分】******************************/
while(det>=esp)
{
l++;
n=2*n;
for(f0=0,k=0;k<=n-1;k++)
{
x=a+double((2*k+1)*h)/2/n;
f0=f0+f(x);
}
T[0][l]=T[0][l-1]/2+f0*h/2/n;
for(m=1,double_temp=1;m<=l;m++)
{
double_temp=double_temp*4;
for(k=1;k<=l-m+1;k++)
T[m][k-1]=(T[m-1][k]*double_temp-T[m-1][k-1])/(double_temp-1);
}
det=T[l][0]-T[l-1][0];
if(det<0)det=-det;
}
m_MyOutput.Format("T[%d][0]=%lf",l,T[l][0]);
UpdateData(FALSE);
}
doubleCExpInt::f(doublex)
{
returncAnyExp.f(x,cAnyExp);//返回表达式在x处的值
}
【PS】:所谓的任意只是在小编看来是任意罢了,目前我们所常用的函数应该都在此内吧,如有未包含的,请来信指教哦~
人有失足之时嘛,任何软件都不敢保证100%无误,本软件数据的正确性以10多组刁蛮数据作为测试,均正确。若有问题,请来信,不甚感激!
本软件仅供学习交流之用,不得非法商用,否则因软件本身计算有误导致严重后果的,责任自负
MathTool1.0.zip
http://download.csdn.net/detail/qq316293804/6369469
MathTool2.0.zip
http://download.csdn.net/detail/qq316293804/6369485
相关推荐
C++、VC、MFC 计算任意函数值、计算表达式、积分、线性方程组 工具。不错的工具哦
C++、VC、MFC 计算任意函数值、计算表达式、积分、线性方程组
数值分析 课程设计 解线性方程组 插值 最小二乘拟合 数值积分 附带报告
提供C++解线性方程组的方法,让你的学习不再是一个艰巨的问题!
此函数计算方程组Ax=b的解,并将结果存放在数组b[0,n)中。 函数成功时返回false,否则返回true。 3. void qr(double* a, double* d, int n);矩阵的QR分解 假设数组anxn在内存中按行优先次序存放。此函数使用...
c++线性方程组求解源代码c++线性方程组求解源代码
采用拟牛顿法求解非线性方程组,结构完整,非线性方程组在此程序里为显示,若是隐式也可借鉴
解线性方程组的C++类库,能够解决大多数线性代数问题,比如矩阵计算,线性方程组的求解等
//拟牛顿法 解非线性方程组 //徐世良主编 数值分析与算法 // C++接口 需要Eigen3支持
c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,求解线性方程组。 c++代码,利用eigen矩阵库,...
求线性方程组的解C++源代码。求出系数行列式的值,再根据克莱姆法则求解。(保证全过)
数值方法中用高斯消元法求解线性方程组,c++源码。已调试成功。
雅克比迭代法求解线性方程组c++源代码,结合https://blog.csdn.net/weixin_41788456/article/details/102920383文章学习,内附有输出结果。
雅克比迭代法和高斯-赛德尔法解线性方程组(C++).docx
这是数值计算第二章的第七个程序----追赶法解线性方程组。
C++ VC MFC QQ申请器源码 QQ注册器源码
数值计算基础实验之一 追赶法解线性方程组C语言实现
第三章 解线性方程组的直接解法
在数值计算方法中用高斯消元法和列选主元来求线性方程组的解的C++源代码