File: simpson.c

package info (click to toggle)
src2tex 2.12h-11
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,136 kB
  • sloc: ansic: 5,679; sh: 405; makefile: 95; lisp: 46; sed: 39
file content (101 lines) | stat: -rw-r--r-- 2,639 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/* {\hrulefill} *

{\bf Simpson}θ

{\ % beginning of TeX mode

\noindent
ʬ $\displaystyle\int_a^b f(x)\,dx$ ׻ĤˡȤơ
ζɤȤ롣

$$\int_a^b f(x)\,dx\sim{h\over3}\,(y_0+4y_1+2y_2+4y_3+2y_4+4y_5+
					\cdots +2y_{n-2}+4y_{n-1}+y_n)\ ,$$

\noindent
ǡ $n$ ϶Ȥ
$\displaystyle x_i=a+{i\over n}\,(b-a),\ y_i=f(x_i)\quad (i=0, 1, 2, \cdots, n)$
Ȥ롣
θξϡŪ䤵
äTaylor Ƴ

$$\int_{\xi-{1\over h}}^{\xi+{1\over h}}f(x)\,dx
	\sim\int_{\xi-{1\over h}}^{\xi+{1\over h}}p(x)\,dx
	={h\over3}\,\bigl(f(\xi-{1\over h})+4f(\xi)+f(\xi+{1\over h})\bigr)+O(h^5)$$

\noindent
 $\,\displaystyle{n\over2}\,$ ­碌뤳Ȥˤꡢ
θϾ롣

\special{epsfile=simpson.eps hscale=.7 vscale=.7 hoffset=25}
\vskip 13cm

\noindent
ǡ$p(x)$ ϼΤ褦ʾ­룲¿༰ɽ:
$$
p\Bigl(\xi-{1\over h}\Bigr)=f\Bigl(\xi-{1\over h}\Bigr),
\ p(\xi)=f(\xi),
\ p\Bigl(\xi+{1\over h}\Bigr)=f\Bigl(\xi+{1\over h}\Bigr)\ .
$$

\noindent
{\tt A, B, F(X), N} 򤤤Ѥơƿͤǿͼ¸ԤäƤߤ褦

% end of TeX mode }

* {\hrulefill} */


/* {\hrulefill\ simpson.c\ \hrulefill} */


#include <stdio.h>
#define A 0.				/* ʬ򤹤 $[a, b]$ {\hfill} */
#define B 1.
#define F(X) ((X)*(X))			/* ʬؿ $f(x)$ {\hfill} */
#define N 20				/* {\  $[a, b]$ ʬ $n$
					   \hfill} */

double simpson_rule()			/* {\ Simpson θѤ
					   $\displaystyle\int_a^b f(x)\,dx$
					   ׻ؿ \hfill} */
{
    long i;				/* long Ȥ {\hfill} */
    double h, s, y[N + 1];		/* {\ å $h$, ʬ $s$,
					   ʬ $\displaystyle{i\over n}$
					   Ǥδؿ $y_i$ \hfill} */

    h = 1. / (double) N;		/* {\ $\displaystyle h={1\over n}$
					 \hfill} */
    for (i = 0; i <= N; ++i)		/* {\ $\displaystyle y_i
					   =f\bigl({i\over n}\bigr)
					   \quad (i=0, 1, 2, \cdots, n)$
					   \hfill} */
	y[i] = F((double) i / (double) N);
					/* ʲ {\hfill} */
					/* $\displaystyle
					   s={h\over3}(y_0+4y_1+2y_2+4y_3+
					   \cdots +4y_{n-1}+y_n)$ {\hfill} */
					/* η׻ {\hfill} */
    s = y[0];
    for (i = 1; i < N; ++i)
    {
	if (i % 2 == 1)			/* {\  {\tt i \% 2}= $i\ $
					    2 dzä; \hfill} */
	    s += 4. * y[i];
	else
	    s += 2. * y[i];
    }
    s += y[N];
    s *= (h / 3.);
    return s;				/* $s$ ֤ͤ {\hfill} */
}

main()
{
    double s;

    s = simpson_rule();			/* {\ ؿ
					   simpson\_rule() Ȥ \hfill} */
    printf("%.16f\n", s);		/* {\ $s$ 򾮿ʲ16ɽ
					 \hfill} */
}