- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);; u# c: k' e# l6 Y( a0 N
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
. I$ i\" Z( P6 L2 I: B: c - for n=[8:2:16]/ F* m; V$ i3 }\" Z# z. p
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
- F+ A5 P: Q. [2 D' ]1 a- z, I - end
7 R* y, i* s8 V9 N9 d* ~0 t -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
8 D2 O" a, ^8 b$ W9 c) A$ ?3 h+ e
8 y+ P. Y, u& Q' |( D1 j) \### 代码解释+ ~' K3 c+ W& D5 t* v2 f
# n$ H$ `2 ]: Z& `0 S8 [; \
1. **定义 x 范围**:5 ?+ r- o. \; E3 g) s
```matlab
% E8 g( }' k) \4 F# U x0 = -2*pi:0.01:2*pi;
! t$ ]) ]9 w% b3 P' y! z7 N ```
$ V' J' E4 \1 D! S. S - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
: L. `! k9 P- K1 _- E' j) k
2 i1 q+ {3 i+ h& g- ^5 t- V# X: v' m2. **计算 sin(x0)**:# r, x5 g7 O9 Y+ H, m7 H$ H: A
```matlab. H8 }2 V" f) U( x6 O: t! ]* g: g
y0 = sin(x0);# G. h- \8 [8 }' y4 l
```
6 c( g, \5 u) G- ]1 S - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。( _- ]" T, \7 p& w
6 x- x. N' w- H3 p* n- S8 l4 g
3. **定义符号变量和函数**:& \& t. Y# a5 ~, f S" C
```matlab
8 i5 A/ x. Q; l; o, O: K syms x;4 f6 Y' K9 e7 w+ a
y = sin(x);% O& `8 @& e( R# S( z
```
+ O9 o2 j. x3 ~* w" x - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。. h5 P* h; {& k7 a6 i2 R
& Q% X! m& e0 V9 A7 ]- Y/ @4. **绘制 sin(x) 图形**:
! p3 D3 c1 n, R4 x& s' w ```matlab" b2 s6 D% j' A3 G' [2 `
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on0 {: O4 a; j0 ]0 s" H
```# q9 }- Q& D4 t7 z5 y
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。$ }' ^- M* Z, \8 v, S+ d
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
) Q6 |' E2 ~) C1 p2 ]# {- ^ - `hold on` 使得后续绘图不会覆盖当前的图形。
1 f* K; o3 i1 {" p# A
5 `. V) w! L* `5. **进行泰勒级数展开和绘图**:
! z* n8 t Y: x. J8 D4 [5 Y; d ```matlab
$ ?: q0 ^8 Z0 k ?- _5 j# m6 a; Q for n = [8:2:16]
4 \4 y8 n# Z/ b- \3 Q p = taylor(y, x, n);
- V2 y9 H) ~4 D y1 = subs(p, x, x0);
0 q3 U' `, F- G- w; f+ }! [6 k4 @( ~ line(x0, y1)
; e6 r6 k" Z; d2 g( I5 l* _ end( l7 `9 o/ r7 k) e1 X
```
$ G0 A7 ^4 O. B8 T - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
8 G+ K: z1 c4 h5 w- l2 \3 f& H - 在循环内部:0 v+ [0 M/ {; g; m7 W
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
# q- f" y- X$ P/ o' P - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。5 I6 }4 k* I& l* s1 |0 O" c' ?5 F+ n
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
1 {- @; n9 R* ~) ?5 C* `( E' I* \8 u' a$ {
### 效果8 d* g% f5 {" \: B
" X; \' ~9 F1 N1 h- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
9 n% }( \. i- ~/ q4 Y+ N- V" n1 {5 H. m
### 知识点总结* K. Z+ p, t9 j7 W8 p5 L
3 `! \! Y+ D$ @5 r) x( T1. **泰勒级数**:& s. u$ i% \1 m" c& O, F% l
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
7 ]! k1 S @2 E: t+ q
7 G) M" ]/ u! z9 \$ k9 F/ O2. **符号计算**:
3 |. X1 D" F# v( m. O - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。. s- k6 N o7 n5 n0 k Z. G J
' V l+ `9 W3 @$ E! J3 t; `" A
3. **绘图与数据可视化**:
4 O6 U( B" ?2 ?! Q4 J* f - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
% \& {. W8 P: I0 L6 {% j/ J
" G/ `7 Z5 w8 m4 |) K/ f4. **遍历与替换**:& I* h, {" B3 q+ l; s
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。3 ^ X6 G, G$ |. H' g5 `6 S
( k( o; [( W9 E# `! y+ }7 v% g9 N
### 结论) a4 P# S* ^# Y6 M: J
, H8 G) n7 Y! O1 K% L- S这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
& |0 g4 H& F1 J9 a: _
! W! d% K1 C9 _6 w" b6 Q6 n3 f5 H- h) G e" ]) }
( c" [& H) _4 W4 H/ _
1 }9 z2 h9 w; V l" X( O4 b
|
zan
|