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 。

相关文章
|
8月前
|
存储 安全 前端开发
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
利用正则表达式取出“积分:9.0/余额:103.25”里面的数字
57 0
|
8月前
|
Java C++ Python
C/C++每日一练(20230422) 存在重复元素、组合总和、给表达式添加运算符
C/C++每日一练(20230422) 存在重复元素、组合总和、给表达式添加运算符
69 0
C/C++每日一练(20230422) 存在重复元素、组合总和、给表达式添加运算符
Axure快速入门(09) -变量和表达式(计算商品总价例子)
Axure快速入门(09) -变量和表达式(计算商品总价例子)
224 0
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
算法练习Day43|● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ
|
算法 程序员
【LeetCode——编程能力入门第一天】基本数据类型[在区间范围内统计奇数数目/去掉最低工资和最高工资后的工资平均值)
给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)奇数的数目。 示例 1: 输入:low = 3, high = 7 输出:3 解释:3 到 7 之间奇数数字为 [3,5,7] 。 示例 2: 输入:low = 8, high = 10 输出:1 解释:8 到 10 之间奇数数字为 [9] 。 提示: 0 <= low <= high <= 10^9。
113 0
每日三题-组合总和、全排列、括号生成
每日三题 组合总和 全排列 括号生成
93 0
每日三题-组合总和、全排列、括号生成
6-7 统计某类完全平方数 (20 分)
6-7 统计某类完全平方数 (20 分)
148 0
|
存储 C#
C#常见金额优选类型及其三种常用的取整方式
C#常见金额优选类型及其三种常用的取整方式
263 0
|
iOS开发
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
242 0
iOS计算器: 表达式的精准计算(计算字符串数学表达式)MathStringExpression
|
开发者 Python
while 练习_特定条件数字求和|学习笔记
快速学习 while 练习_特定条件数字求和
100 0

热门文章

最新文章

下一篇
开通oss服务