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 。

相关文章
|
3月前
|
JavaScript 调度
BOM如何编制与管理?
BOM英文全称 Bill of Material,即“物料清单”,也称产品结构表。在制造业管理信息系统中,经常会提到BOM。物料清单是指产品所需零部件明细表及其结构。在ERP系统中,“物料”一词有着广泛的含义,它是所有产品、半成品、在制品、原材料、配套件、协作件、易耗品等与生产有关的物料的统称。
|
安全 算法 量子技术
【HTTPS】中间人攻击和证书的验证
【HTTPS】中间人攻击和证书的验证
248 1
|
10月前
|
边缘计算 缓存 Kubernetes
OpenYurt v1.6正式发布 | 提供节点级别的流量复用能力
本次发布的v1.6版本主要特性包括:节点级别的流量复用能力、增强的边缘自治能力等。
|
11月前
|
机器学习/深度学习 人工智能 算法
【AI系统】计算图挑战与未来
当前主流AI框架采用计算图抽象神经网络计算,以张量和算子为核心元素,有效表达模型计算逻辑。计算图不仅简化数据流动,支持内存优化和算子调度,还促进了自动微分功能的实现,区分静态图和动态图两种形式。未来,计算图将在图神经网络、大数据融合、推理部署及科学计算等领域持续演进,适应更复杂的计算需求。
292 5
【AI系统】计算图挑战与未来
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
《零样本学习:突破瓶颈,开启智能新征程》
零样本学习是人工智能的前沿研究方向,旨在让机器在无特定类别样本的情况下通过推理识别新类别。其主要挑战包括数据匮乏、知识表示不准确、模型泛化能力不足及语义理解困难。解决方案涉及知识图谱、强化学习、迁移学习、多模态融合和生成式模型等技术。未来,随着技术进步,零样本学习有望实现突破并在各领域广泛应用。
334 10
|
存储 自动驾驶 开发工具
在进行YOLOv3模型部署时,如何评估和选择最适合的硬件平台?
在进行YOLOv3模型部署时,如何评估和选择最适合的硬件平台?
|
机器学习/深度学习 人工智能 搜索推荐
未来人工智能在后端开发中的应用前景
随着人工智能技术的不断发展,后端开发领域也迎来了新的机遇与挑战。本文探讨了人工智能在后端开发中的应用前景,分析了其对传统开发模式的影响和未来发展趋势。
|
设计模式 开发框架 Java
Spring 依赖注入方式有哪些?
Spring 依赖注入方式有哪些?
572 0
Spring 依赖注入方式有哪些?
|
SQL 分布式计算 DataWorks
阿里云大数据ACA及ACP复习题(321~330)
本人备考阿里云大数据考试时自行收集准备的题库,纯手工整理的,能够覆盖到今年7月份,应该是目前最新的,发成文章希望大家能一起学习,不要花冤枉钱去买题库背了,也希望大家能够顺利通关ACA和ACP考试(自己整理解析也需要时间,可能有更新不及时的情况哈)
|
存储 区块链
区块链101:什么是SegWit(隔离见证)?
区块链101:什么是SegWit(隔离见证)?