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 。

相关文章
|
6月前
|
存储 安全 前端开发
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
45 0
Axure快速入门(09) -变量和表达式(计算商品总价例子)
Axure快速入门(09) -变量和表达式(计算商品总价例子)
190 0
|
算法 数据建模
二重积分、三重积分
二重积分、三重积分
算数运算相关的元方法
算数运算相关的元方法
91 0
|
算法
数学:分数的加减乘除模板(二)
数学:分数的加减乘除模板
75 0
数学:分数的加减乘除模板(二)
|
存储 人工智能 Serverless
6-2 多项式求值 (15 分)
6-2 多项式求值 (15 分)
141 0
|
存储 算法 Java
怒刷力扣(二进制求和)
二进制求和,其实和上一题有着异曲同工之妙。但正是这异曲同工之妙让我陷入了固化思维,将简单的问题复杂化。
104 0
怒刷力扣(二进制求和)
|
存储 C#
C#常见金额优选类型及其三种常用的取整方式
C#常见金额优选类型及其三种常用的取整方式
235 0
数学:分数的加减乘除模板(一)
数学:分数的加减乘除模板
67 0
|
iOS开发
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
219 0
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression