plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on9 {8 U n4 G6 s& z8 P
for n=[8:2:16] % w$ L- L/ t4 k9 h: a; n1 U
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)8 I. k7 |1 N \9 O
end- ?$ h! u/ B% S, `
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释: 5 v2 K, s& b7 C7 l& X% r e3 `1 R6 _* W& c2 V% B" h7 r# z
### 代码解释5 d* _7 A Z0 Z/ A2 G' o, ^& [
& x1 o4 ]6 d6 {# ^ f1. **定义 x 范围**:* r, Y3 x m2 O
```matlab + b7 v w6 k& R O x0 = -2*pi:0.01:2*pi;! q# z2 ?2 U! Y. A' c( V
```" S0 H7 z% i9 ^2 L
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。 6 c) b2 G4 g! P X; [9 } 7 z6 z! W8 \+ L# }, D3 P" t' D2. **计算 sin(x0)**: 5 T+ Z7 ]) F, S- I- J ```matlab9 n. A# }5 n0 C6 h; j D
y0 = sin(x0);5 N, s4 b; f9 `1 ]1 x2 Y" N7 q' Q
```9 x' X) Z( @% e9 \
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。 * A) d9 b5 h |8 U' k ( }: B B! q# W7 |: J. K+ i8 S& r( c3. **定义符号变量和函数**: Q( q: g( N" B1 P- |( X# E
```matlab9 X) M8 j1 V* e9 B
syms x;! \7 Q+ r! f4 g" u+ V7 ^
y = sin(x); " t2 a) A/ U: _* \4 H ```5 V2 f, ]8 E& h$ `$ L% F' E
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。) K/ d6 g" P+ t7 ^
, C0 J! P$ n/ Y4 s( p1 K
4. **绘制 sin(x) 图形**: 1 X- w6 F+ P: Z+ s/ j8 V5 m ```matlab. f( o" b& }4 P0 z% \& o7 h+ a. v$ Y
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on0 }! k6 {, Y+ f7 C/ |- U
```# u. D" y% Q' R) H! [
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。 , W/ F) s8 ~: Z2 U# r - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。( n/ i/ V3 S: z. g8 S) D
- `hold on` 使得后续绘图不会覆盖当前的图形。1 \$ H. V5 i. D! M' b8 s' f- z
. P6 ~/ V3 T, `' ^3 u% [ O0 T
5. **进行泰勒级数展开和绘图**: 5 l6 q3 n3 k5 C1 F2 F$ R ```matlab 4 [3 G$ y$ w6 F* M for n = [8:2:16] o- k4 |9 R9 y% c
p = taylor(y, x, n); & a, n$ }* R2 N$ q$ ~ y1 = subs(p, x, x0);$ r; F5 Y- E4 |' i' c9 J
line(x0, y1) " B, X0 l- U) ~: W* A end1 w/ D8 n G* C1 W! K' s
```8 N6 o( A9 ]* O% Z
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。' a$ c+ E. N0 E6 `2 X
- 在循环内部:% |5 [/ ?- B9 S* m! G1 Y* ~. ~
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。$ M- K! i! s6 [& n3 C- P, U
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。 # y5 F0 E" Z% k4 e6 {- i - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。8 f; Q" ^2 u9 K9 Y L: Y1 X/ }
9 u4 r+ T. C. t* e/ j### 效果# I9 r' I4 M0 D, A
7 \% U N$ n: b* U5 d3 M- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。 W; |; {8 h& W O- [ N. {/ F k( e$ |1 J( C! H
### 知识点总结6 g% e1 d% `) N. V% E
# ~" R: J! k0 M) q$ U5 z1. **泰勒级数**:* u! r4 u/ z; ~' y1 {
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。 1 {' Y4 l5 {# k4 L 8 @+ U. \4 n: e* t. n2 j2. **符号计算**: 4 ^+ L+ F' B) d/ E8 K$ l - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。/ Z6 J! c) L, ^- Z9 Y5 u) q3 R" v