`
473687880
  • 浏览: 535321 次
文章分类
社区版块
存档分类
最新评论

C++、VC、MFC 计算任意函数值、计算表达式、积分、线性方程组

 
阅读更多

由于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++、Visual C++(VC)和Microsoft Foundation Classes(MFC)框架来实现计算功能,包括求解任意函数值、计算表达式、执行积分运算以及处理线性方程组。这些功能对于科学计算、工程应用和数据分析等...

    非线性方程求根MFC实现

    总之,"非线性方程求根MFC实现"是一个结合了数值计算和图形用户界面开发的实例,它展示了如何利用C++和MFC库来解决实际的计算问题。这个程序不仅可以让用户直观地了解非线性方程求解的过程,也为学习者提供了一个...

    判断两直线是否相交 C++ MFC

    这可以通过解以下线性方程组得到: ``` P = A1 + t1 * D1 = A2 + t2 * D2 ``` 其中t1和t2是参数。解这个方程组,如果找到一组实数解t1和t2,那么两条直线就相交。 3. **韦达定理**:对于直线Ax + By + C = 0和...

    Visual C++常用数值算法集

    1. **线性代数**:包括矩阵运算、解线性方程组的方法(如高斯消元法、LU分解、QR分解)、特征值和特征向量计算等。这些算法在物理模拟、图像处理、数据分析等领域广泛应用。 2. **数值积分**:如梯形法则、辛普森...

    求两直线交点的算法

    对于两条直线L1和L2,它们的交点可以通过解这两个线性方程组来得到。 求两直线交点的基本步骤如下: 1. **获取直线方程**:根据直线上的两个点,我们可以很容易地计算出直线的斜率和截距。如果直线是通过点(x1, y1...

    vc界面版潮流计算(可通过拖动图元创建电路图)

    在实际应用中,通常使用牛顿-拉夫逊迭代法或快速分解法等算法来解决非线性方程组,以达到计算目的。 2. **MFC框架** MFC是微软提供的一个C++类库,用于构建Windows应用程序。它封装了许多Windows API,提供了窗口...

    mfc Cohen-Sutherland直线裁剪算法

    这个过程涉及到线性代数的知识,如向量和线性方程组的解法。 以下是在MFC中实现Cohen-Sutherland算法的步骤: 1. 定义直线段类,包含起点和终点坐标。 2. 定义窗口类,包含窗口的左下角和右上角坐标。 3. 实现代码...

    用vc实现的自然三次样条曲线

    3. 计算样条函数:求解得到的系数用于计算在任意x值下的样条函数值。 4. 绘制曲线:使用OpenGL或GDI+等图形库,将计算出的样条曲线绘制到屏幕上。 在压缩包文件“yjyNCS”中,可能包含了实现这些功能的源代码文件,...

    clapack综合资料

    CLAPACK(Compaq Linear Algebra PACKage)是基于Fortran 77编写的开源线性代数库,它提供了大量的矩阵运算功能,包括但不限于求解线性方程组、计算特征值和特征向量、奇异值分解、最小二乘问题等。这个库是源于著名...

    vc基础应用实例200

    这些实例可能涉及矩阵运算、求解线性方程组、优化问题、傅立叶变换等。 每个实例都可能包含完整的源代码、详细的注释和运行结果,这对于学习和理解VC++编程,尤其是对于新手来说,是非常宝贵的资源。通过实践这些...

    用VC编写的实现高等数学常用曲线的例子

    这通常涉及到数值计算,可能需要用到一些数值分析的方法,如梯形法则或辛普森法则进行数值积分。 为了便于扩展,我们应当设计一个灵活的框架,允许用户输入不同的参数或选择不同的曲线类型。这可能需要创建一个用户...

    VC++三次样条插值&贝塞尔曲线&GDI+平滑曲线程序

    CubicSplineInterpolation.cpp文件中实现了这一算法,通过线性代数求解一组线性方程组来得到三次样条函数的具体形式,使得曲线在给定点间平滑过渡。 其次,贝塞尔曲线是计算机图形学中广泛使用的参数曲线。它由一...

    VC++6.0 两直线交点

    假设第一条直线的方程为Ax + By = C,第二条直线的方程为Dx + Ey = F,我们可以联立这两个方程,通过高斯消元法或其他解线性方程组的方法求解。一旦得到交点坐标(x, y),我们就可以在屏幕上使用`SetPixel()`函数将其...

    经典平差 vc 测量平差程序

    4. **法方程**:由观测方程推导出的关于未知参数的线性方程组,是计算平差结果的关键步骤。 5. **协因数矩阵**:反映了观测值之间的相关性和精度,用于评估平差结果的可靠性。 在VC++环境下实现经典平差,主要涉及...

    基于VC平台的高程控制网平差软件设计与实现

    B矩阵是基于最小二乘法的线性方程组系数矩阵,它与未知参数的解算直接相关。 8. 程序代码编写: 软件的开发离不开程序代码的编写,文档中虽然没有直接提供代码,但提及了闭合差计算、间接平差和精度评定代码的编写...

    GPS网平差VC代码

    在本案例中,“GPS网平差VC代码”指的是使用Visual C++(VC)编程语言实现的GPS网平差算法。下面我们将深入探讨这一主题,包括GPS平差的基本概念、平差方法以及VC代码实现的关键点。 首先,GPS平差是基于测量数据的...

    tjansactionmultiple.zip_按钮控件_C/C++_

    描述提到“VC实现的常用数值计算方法”,这表明这个压缩包可能包含了用Visual C++(VC)编写的用于执行常见数学计算的代码示例。 在C++编程中,按钮控件是构建图形用户界面(GUI)的基本元素,通常用于触发某个操作...

    szfxvcnet_VC++源码_

    2. **数值计算库**:可能会使用到Microsoft的数学库(如VCLib)或其他第三方库,如BLAS(基础线性代数子程序)和LAPACK(线性代数包),这些库提供了高效、稳定的数值计算功能。 3. **错误处理和精度**:在数值计算...

    vc 最小二乘法拟合 数据拟合

    可以计算相关系数、决定系数(R²)等统计量来评估拟合质量,并使用图形库(如MATLAB MFC或OpenGL)绘制数据点和拟合曲线。 在VC++中,你可以使用标准模板库(STL)容器存储数据,使用`#include &lt;cmath&gt;`头文件中的数学...

Global site tag (gtag.js) - Google Analytics