Racket 程序 "integral" 其中 returns 双参数程序表示函数
Racket procedure "integral" which returns double argument procedure representing function
我在大学里需要帮助来完成一些简单的任务。我陷入了片刻如何表示过程
没有给定的积分 (a b)。
我必须定义程序 (integral f prec) - 它采用集成程序和精度数
用 sum = (b-a)/prec 估算积分的迭代。该过程应输出双参数过程,因此通过输入 a 和 b 我们可以计算我们的积分。
> ( define foo ( integral ( lambda (x) 10) 1000) )
> ( foo 0 10)
99.9999999999986
> ( define foo ( integral ( lambda (x) x) 1000) )
> ( foo 9 10)
9.499500000000001
> ( foo 0 10)
49.95000000000001
> ( define foo ( integral sin 1000) )
此外,我必须使用为求和定义的程序:
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
我试图用 lambda 表达式来解决这个问题,但我是这门课程的新手,时间很少。
我找到了一段可能有用的 Simpson 积分代码。
(define (simpson-integral f a b n)
(define h (/ (- b a) n))
(define (next x) (+ x (* 2 h)))
(* (/ h 3) (+ (f a)
(* 4 (sum f (+ a h) next (- b h)))
(* 2 (sum f (+ a (* 2 h)) next (- b (* 2 h))))
(f b))))
函数 sum
是您的 sum
,稍作调整:>
替换为 >=
。
函数integral
returns双参数lambda调用数字后,数字之间的整个区间被划分为prec
个区间(例如1000个区间)和矩形区域in 间隔相加。
Next
是函数,returns 给定数字的下一个间隔。 (例如,在 0 和 10 之间有 1000 个区间,因此 0 => 0.01 或 5.55 => 5.56。)
Term
是计算一个矩形面积的函数。一侧是区间长度,一侧是 f(x) 和 f(x+next) 的最小值,这些值相乘。
(define (sum term a next b)
(if (>= a b)
0
(+ (term a)
(sum term (next a) next b))))
(define (integral f prec)
(lambda (a b)
(sum (lambda (t)
(* (min (f t)
(f (+ t (/ (- b a) prec))))
(/ (- b a) prec)))
a
(lambda (n)
(+ n (/ (- b a) prec)))
b)))
((integral (lambda (x) (+ (* 2 x) 3)) 1000) 2 5) => almost 30
我在大学里需要帮助来完成一些简单的任务。我陷入了片刻如何表示过程 没有给定的积分 (a b)。 我必须定义程序 (integral f prec) - 它采用集成程序和精度数 用 sum = (b-a)/prec 估算积分的迭代。该过程应输出双参数过程,因此通过输入 a 和 b 我们可以计算我们的积分。
> ( define foo ( integral ( lambda (x) 10) 1000) )
> ( foo 0 10)
99.9999999999986
> ( define foo ( integral ( lambda (x) x) 1000) )
> ( foo 9 10)
9.499500000000001
> ( foo 0 10)
49.95000000000001
> ( define foo ( integral sin 1000) )
此外,我必须使用为求和定义的程序:
(define (sum term a next b)
(if (> a b)
0
(+ (term a)
(sum term (next a) next b))))
我试图用 lambda 表达式来解决这个问题,但我是这门课程的新手,时间很少。
我找到了一段可能有用的 Simpson 积分代码。
(define (simpson-integral f a b n)
(define h (/ (- b a) n))
(define (next x) (+ x (* 2 h)))
(* (/ h 3) (+ (f a)
(* 4 (sum f (+ a h) next (- b h)))
(* 2 (sum f (+ a (* 2 h)) next (- b (* 2 h))))
(f b))))
函数 sum
是您的 sum
,稍作调整:>
替换为 >=
。
函数integral
returns双参数lambda调用数字后,数字之间的整个区间被划分为prec
个区间(例如1000个区间)和矩形区域in 间隔相加。
Next
是函数,returns 给定数字的下一个间隔。 (例如,在 0 和 10 之间有 1000 个区间,因此 0 => 0.01 或 5.55 => 5.56。)
Term
是计算一个矩形面积的函数。一侧是区间长度,一侧是 f(x) 和 f(x+next) 的最小值,这些值相乘。
(define (sum term a next b)
(if (>= a b)
0
(+ (term a)
(sum term (next a) next b))))
(define (integral f prec)
(lambda (a b)
(sum (lambda (t)
(* (min (f t)
(f (+ t (/ (- b a) prec))))
(/ (- b a) prec)))
a
(lambda (n)
(+ n (/ (- b a) prec)))
b)))
((integral (lambda (x) (+ (* 2 x) 3)) 1000) 2 5) => almost 30