【Scheme】符号求导
思路:
- 定义一个求导算法, 令其在抽象对象上执行求导操作。
可以由以下规约规则完成:
dc/dx=0
dx/dx=1
d(u+v)/dx=du/dx+dv/dx
d(uv)/dx=u(dv/dx)+v(du/dx) - 对抽象对象进行具体表示。
实现:
首先,让我们假定现在已经有了一些过程,可以实现对象的判断、构造以及选择。
(variable? x) ;是否为变量?
(same-variable? v1 v2) ;v1、v2是同一变量?
(=number? exp num) ;exp是否为数值且等于num?
(sum? x) ;x为加式?
(product? x) ;x为乘式?
(make-sum a1 a2) ;构造a1+a2
(make-product m1 m2) ;构造a1*a2
(addend s) ;被加数
(augend s) ;加数
(multiplier s) ;被乘数
(multiplicand s) ;乘数
求导函数:
(define (deriv exp var)
(cond ((number? exp) 0)
((variable? exp)
(if (same-variable? exp var) 1 0))
((sum? exp)
(make-sum (deriv (addend exp) var)
(deriv (augend exp) var)))
((product? exp)
(make-sum
(make-product (multiplier exp)
(deriv (multiplicand exp) var))
(make-product (deriv (multiplier exp) var)
(multiplicand exp))))
(else
(error "unknown expression type -- DERIV" exp))))
判别函数,用来判断所求导的对象以及表达式类型。
(define (variable? x) (symbol? x))
(define (same-variable? v1 v2)
(and (variable? v1) (variable? v2) (eq? v1 v2)))
(define (=number? exp num)
(and (number? exp) (= exp num)))
(define (sum? x)
(and (pair? x) (eq? (car x) '+)))
(define (product? x)
(and (pair? x) (eq? (car x) '*)))
构造函数,构造和式和乘式:
(define (make-sum a1 a2)
(cond ((=number? a1 0) a2)
((=number? a2 0) a1)
((and (number? a1) (number? a2)) (+ a1 a2))
(else (list '+ a1 a2))))
(define (make-product m1 m2)
(cond ((or (=number? m1 0) (=number? m2 0)) 0)
((=number? m1 1) m2)
((=number? m2 1) m1)
((and (number? m1) (number? m2)) (* m1 m2))
(else (list '* m1 m2))))
;这里的加/乘式构造函数已经将式子进行了一定程度的化简
对加/乘数以及被加/乘数的选择函数。
(define (addend s) (cadr s))
(define (augend s) (caddr s))
(define (multiplier s) (cadr s))
(define (multiplicand s) (caddr s))
【Scheme】符号求导的更多相关文章
- 2019 OO第一单元总结(表达式求导)
一. 基于度量的程序结构分析 1. 第一次作业 这次作业是我上手的第一个java程序,使用了4个类来实现功能.多项式采用两个arraylist来存,系数和幂指数一一对应. private ArrayL ...
- Deep learning:五十一(CNN的反向求导及练习)
前言: CNN作为DL中最成功的模型之一,有必要对其更进一步研究它.虽然在前面的博文Stacked CNN简单介绍中有大概介绍过CNN的使用,不过那是有个前提的:CNN中的参数必须已提前学习好.而本文 ...
- MATLAB 单变量函数一阶及N阶求导
1 对一维函数的求导及求特定函数处的变量值 %%最简单的一阶单变量函数进行求导 function usemyfunArray() %主函数必须位于最上方 clc clear syms x %syms ...
- 【机器学习基础】对 softmax 和 cross-entropy 求导
目录 符号定义 对 softmax 求导 对 cross-entropy 求导 对 softmax 和 cross-entropy 一起求导 References 在论文中看到对 softmax 和 ...
- OO第一单元总结——多项式求导
第一次作业分析 1.程序结构分析 类图: 好吧,这一次基本上完全是在面向过程编程,没有看出来任何的面向对象的特性. 复杂度: 可以看到模块间的相互耦合度很高,PolyDerive方法的非结构化程度也不 ...
- BUAA-OO-表达式解析与求导
BUAA-OO-表达式解析与求导 解析 按照常规,解析这一部分我们分为词法分析与语法分析.当然由于待解析的字符串较简单,词法分析器和语法分析器不必单独实现. 词法分析器 按照常规,我们先手写一个词法分 ...
- OO Unit 1 表达式求导
OO Unit 1 表达式求导 面向对象学习小结 前言 本博主要内容目录: 基于度量来分析⾃己的程序结构 缺点反思 重构想法 关于BUG 自己程序出现过的BUG 分析⾃己发现别人程序bug所采⽤的策略 ...
- 多项式与三角函数求导——BUAA OO 第一单元作业总结
第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...
- BUAA_OO Summary——多项式求导问题
从C.DS.计组一路折磨过来, 几乎都在采用过程化.函数式的编程思想.初接触面向对象的项目开发,经过了三周的对多项式求导问题的迭代开发,经历了设计.coding.测评环节,算是对面向对象有了一定的认识 ...
随机推荐
- 新装Windows Server 2008 R2的设置
原文链接:https://www.kafan.cn/edu/2898054.html 1.2008设置自动登录 具体方法:开始→运行→输入“rundll32 netplwiz.dll,UsersRun ...
- 28.Mongodb问题解决
mongodb问题配置解决: 之前官网下载msi文件安装总是出现问题,这次使用zip压缩包直接解压使用(较为省力). 链接:https://pan.baidu.com/s/1G-jh7CXD1gCz8 ...
- OpenGL Hello World
▶ OpenGL 的环境配置与第一个程序 ● CUDA 中自带 OpenGL 需要的头文件和库,直接拉进项目里边去就行 ● VS项目属性右键,属性,C/C++ 目录,包含目录,添加 CUDA 的头文件 ...
- python学习笔记_week14
Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. s1 import socket def handle_reques ...
- 考勤管理系统V1.0.3
1.0.3:添加了缺勤名单统计.导出功能: 原本的设想是直接上手Node.js 连接MySQL,写一个能增删改查数据的功能,很遗憾小林属实弟弟,但这个“系统”我会一点点完善的,这一次的代码比之前好看了 ...
- JavaScript 函数与对象的 简单区别
直接上例子 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <met ...
- Android DBFlow学习及示例
项目地址:Kotlin-DBflow-example Kotlin-DBflow-example DBFlow是一个功能强大的,非常简单的,带有注解处理的ORM Android数据库.github地址 ...
- poi excel设置合并单元格边框格式
版本3.17 //设置合并单元格的边框 public static void setBorderForMergeCell(BorderStyle style,int color, CellRangeA ...
- PHP提取HTML代码中img标签下src属性
需求:提取整片文章中img的src属性,并保存到一个数组当中 preg_match_all("/(href|src)=([\"|']?)([^\"'>]+.(jpg ...
- golang 操作redis 错误:failed redigo: unexpected type for String, got type int64
报错的代码: isExist,err := redis.String(conn.Do("EXISTS", key)) 这个操作返回的应该是bool类型,所有改成 isExist,e ...