F#表达式积分

简介: 如何用F#对数学公式进行不定积分(x^3)-x => (0.25*x^4)-(0.5*x^2)

     前面一篇博文,介绍了F#对数学表达式进行求导运算,这里再介绍一下如何用F#对数学表达式求积分。求符号积分比求导要复杂一点,其复杂不在于原理,而在于求导的规则少,而求积分的规则非常多,要想相对全面的涵盖是比较难的。

  这里只是探索一个求积分的思路,而不会实现一个功能完备的积分引擎。首先还是定义一个数据类型:

typeExpr=|CstFoffloat|Varofstring|AddofExpr*Expr// +|SubofExpr*Expr// -|MulofExpr*Expr// *|DivofExpr*Expr// / |PowofExpr*Expr// ^ |SinofExpr|CosofExpr|NegofExpr

   再次,给出一个包含少数积分规则的求积分函数:

letrecintfe=matchewith|CstFf->Mul(CstFf, Var"x")
|Varx->Mul(CstF0.5, Pow(Varx,CstF2.))
|Add(e1, e2)           ->Add(intfe1, intfe2)
|Sub(e1, e2)           ->Sub(intfe1, intfe2)
|Pow(Varx,CstFa)     ->Mul(CstF (1./(a+1.)),Pow(Varx,CstF (a+1.)))
|e->e

  这里主要就是最后一条,即 x ^ a 求积分为 x^(a+1)/(a+1) 。同样的,给出DSL字符串输出的函数:

letrecprintExpr2e=matchewith|CstFf->stringf|Varx->x|Add(e1 , e2) ->"("+ (printExpr2e1) +"+"+ (printExpr2e2) +")"|Sub(e1 , e2) ->"("+ (printExpr2e1) +"-"+ (printExpr2e2) +")"|Mul(e1 , e2) ->"("+ (printExpr2e1) +"*"+ (printExpr2e2) +")"|Div(e1 , e2) ->"("+ (printExpr2e1) +"/"+ (printExpr2e2) +")"|Pow(e1 , e2) ->"("+ (printExpr2e1) +"^"+ (printExpr2e2) +")"|Sin(e1) ->"sin("+ (printExpr2e1) +")"|Cos(e1) ->"cos("+ (printExpr2e1) +")"|Neg(e1) ->"-("+ (printExpr2e1) +")"|_->failwith"unknown operation";;

  最后,计算一下数学公式(x^3)-x的积分值:

lete1=Sub(Pow(Var"x", CstF3.0), Var"x");; 
printExpr2e1+" => "+printExpr2 (intfe1) ;; 

  运行此示例,输出结果如下:

1628574321590046518.jpg

(x^3)-x的积分表达式为: 0.25*x^4 - 0.5*x^2 。

相关文章
|
2月前
|
测试技术
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数
|
2月前
|
存储 安全 前端开发
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
26 0
|
8月前
Axure快速入门(09) -变量和表达式(计算商品总价例子)
Axure快速入门(09) -变量和表达式(计算商品总价例子)
100 0
|
C语言 C++
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
C语言经典实例:1-10例:三角求和、显示所占字节数、自增自减运算while语句输出最小值、计算快递费用、学生成绩统计
|
算法
分数的加减乘除
分数的加减乘除
104 0
分数的加减乘除
|
存储 C#
C#常见金额优选类型及其三种常用的取整方式
C#常见金额优选类型及其三种常用的取整方式
198 0
|
iOS开发
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
190 0
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
|
开发者 Python
while 练习_特定条件数字求和|学习笔记
快速学习 while 练习_特定条件数字求和
F#表达式化简
如果使用过Matlab或者Maple等软件,应该知道这类数学软件的符号计算引擎非常强大,可以进行数学公式的推导,比如可以对数学公式进行化简。当然,实现一个功能完备的化简引擎还是不容易的。这里用F# 实现一个简单的化简函数: ( a + x )+( a - x ) => 2 * a
875 0
F#表达式化简
|
存储 C#
C#常见金额优选类型及其三种常用的取整方式
原文:C#常见金额优选类型及其三种常用的取整方式 这两天一直在做一个商城后台的对账方面的工作,忽然发现C#真的有很多值的学习的东西: 一、C#常用的三种取整方式(主要适用于double、decimal、float这一类型的数据): Math.
1148 0