由于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++、Visual C++(VC)和Microsoft Foundation Classes(MFC)框架来实现计算功能,包括求解任意函数值、计算表达式、执行积分运算以及处理线性方程组。这些功能对于科学计算、工程应用和数据分析等...
总之,"非线性方程求根MFC实现"是一个结合了数值计算和图形用户界面开发的实例,它展示了如何利用C++和MFC库来解决实际的计算问题。这个程序不仅可以让用户直观地了解非线性方程求解的过程,也为学习者提供了一个...
这可以通过解以下线性方程组得到: ``` P = A1 + t1 * D1 = A2 + t2 * D2 ``` 其中t1和t2是参数。解这个方程组,如果找到一组实数解t1和t2,那么两条直线就相交。 3. **韦达定理**:对于直线Ax + By + C = 0和...
1. **线性代数**:包括矩阵运算、解线性方程组的方法(如高斯消元法、LU分解、QR分解)、特征值和特征向量计算等。这些算法在物理模拟、图像处理、数据分析等领域广泛应用。 2. **数值积分**:如梯形法则、辛普森...
对于两条直线L1和L2,它们的交点可以通过解这两个线性方程组来得到。 求两直线交点的基本步骤如下: 1. **获取直线方程**:根据直线上的两个点,我们可以很容易地计算出直线的斜率和截距。如果直线是通过点(x1, y1...
在实际应用中,通常使用牛顿-拉夫逊迭代法或快速分解法等算法来解决非线性方程组,以达到计算目的。 2. **MFC框架** MFC是微软提供的一个C++类库,用于构建Windows应用程序。它封装了许多Windows API,提供了窗口...
这个过程涉及到线性代数的知识,如向量和线性方程组的解法。 以下是在MFC中实现Cohen-Sutherland算法的步骤: 1. 定义直线段类,包含起点和终点坐标。 2. 定义窗口类,包含窗口的左下角和右上角坐标。 3. 实现代码...
3. 计算样条函数:求解得到的系数用于计算在任意x值下的样条函数值。 4. 绘制曲线:使用OpenGL或GDI+等图形库,将计算出的样条曲线绘制到屏幕上。 在压缩包文件“yjyNCS”中,可能包含了实现这些功能的源代码文件,...
CLAPACK(Compaq Linear Algebra PACKage)是基于Fortran 77编写的开源线性代数库,它提供了大量的矩阵运算功能,包括但不限于求解线性方程组、计算特征值和特征向量、奇异值分解、最小二乘问题等。这个库是源于著名...
这些实例可能涉及矩阵运算、求解线性方程组、优化问题、傅立叶变换等。 每个实例都可能包含完整的源代码、详细的注释和运行结果,这对于学习和理解VC++编程,尤其是对于新手来说,是非常宝贵的资源。通过实践这些...
这通常涉及到数值计算,可能需要用到一些数值分析的方法,如梯形法则或辛普森法则进行数值积分。 为了便于扩展,我们应当设计一个灵活的框架,允许用户输入不同的参数或选择不同的曲线类型。这可能需要创建一个用户...
CubicSplineInterpolation.cpp文件中实现了这一算法,通过线性代数求解一组线性方程组来得到三次样条函数的具体形式,使得曲线在给定点间平滑过渡。 其次,贝塞尔曲线是计算机图形学中广泛使用的参数曲线。它由一...
假设第一条直线的方程为Ax + By = C,第二条直线的方程为Dx + Ey = F,我们可以联立这两个方程,通过高斯消元法或其他解线性方程组的方法求解。一旦得到交点坐标(x, y),我们就可以在屏幕上使用`SetPixel()`函数将其...
4. **法方程**:由观测方程推导出的关于未知参数的线性方程组,是计算平差结果的关键步骤。 5. **协因数矩阵**:反映了观测值之间的相关性和精度,用于评估平差结果的可靠性。 在VC++环境下实现经典平差,主要涉及...
B矩阵是基于最小二乘法的线性方程组系数矩阵,它与未知参数的解算直接相关。 8. 程序代码编写: 软件的开发离不开程序代码的编写,文档中虽然没有直接提供代码,但提及了闭合差计算、间接平差和精度评定代码的编写...
在本案例中,“GPS网平差VC代码”指的是使用Visual C++(VC)编程语言实现的GPS网平差算法。下面我们将深入探讨这一主题,包括GPS平差的基本概念、平差方法以及VC代码实现的关键点。 首先,GPS平差是基于测量数据的...
描述提到“VC实现的常用数值计算方法”,这表明这个压缩包可能包含了用Visual C++(VC)编写的用于执行常见数学计算的代码示例。 在C++编程中,按钮控件是构建图形用户界面(GUI)的基本元素,通常用于触发某个操作...
2. **数值计算库**:可能会使用到Microsoft的数学库(如VCLib)或其他第三方库,如BLAS(基础线性代数子程序)和LAPACK(线性代数包),这些库提供了高效、稳定的数值计算功能。 3. **错误处理和精度**:在数值计算...
可以计算相关系数、决定系数(R²)等统计量来评估拟合质量,并使用图形库(如MATLAB MFC或OpenGL)绘制数据点和拟合曲线。 在VC++中,你可以使用标准模板库(STL)容器存储数据,使用`#include <cmath>`头文件中的数学...