- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7951 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2977
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
8 b7 X+ f6 \6 ]8 A: B: {8 P - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on6 m) @8 r ~8 g# N\" t9 _
- for n=[8:2:16]' R. I& V7 B: Y
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)9 O E8 H% o\" T8 G2 w
- end# M, S9 n2 \2 E; I
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:% p8 u, O* c5 F
8 O9 J* f" k- O N% }; z### 代码解释
' `5 ]- t) P% L# [4 }+ _$ ?. M K! ]6 e& ^% a- h
1. **定义 x 范围**:
6 @/ @9 P: X6 r2 |$ n1 ^ ```matlab
7 J! d. c. `3 K x0 = -2*pi:0.01:2*pi;1 E3 p) E! y+ O) [% T
```
8 O5 @% u9 ]3 d4 ]1 e- m' A - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
0 k: r* _$ a8 k0 d' G" M% R$ t( V. _ s
2. **计算 sin(x0)**:
7 Y- |8 B- Q# P0 R+ j+ F ```matlab
' \3 [. ]8 F5 h6 K- ~! I' ^/ G y0 = sin(x0);
3 M; E% U% p3 F ```" \6 [2 t M ^1 j( C j
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
4 S4 n0 c8 @0 T
5 _( o! ?- ]% q, t3 W5 A) w3. **定义符号变量和函数**:2 T( ]3 O, m# q6 t d* L7 @2 Y g; _
```matlab
! M/ y! d% j( O, N2 m; j) q syms x;$ s. b9 A; v* G- K5 j2 Y9 L- I. I
y = sin(x);. L/ p; B- a5 n' a9 Z
```* J: z9 C- \2 d+ K, P
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。8 e8 E! }" J$ F6 ?! q' J
0 c! b" m+ g% {. \9 \8 P4. **绘制 sin(x) 图形**:
3 c: @/ M1 w# C8 M6 v$ n3 Y- `# U ```matlab% f6 @9 H' X. U' o$ C
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on/ `+ z& i+ ?3 u# j* S! I1 @
```* i3 Y$ b. E7 B! e
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。, Z" B" e) ^; w; x
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
7 |& O7 i3 z @+ y0 h% U - `hold on` 使得后续绘图不会覆盖当前的图形。
. z, _ V# l8 B7 Z/ c8 p% B4 M8 D& L
5. **进行泰勒级数展开和绘图**:$ f6 k6 U7 I; D: p; k; G, n
```matlab
0 c6 @, ^9 r: F3 Q7 i for n = [8:2:16]; Z, T2 u G+ B! C
p = taylor(y, x, n);4 `$ S' [. E( P4 |8 a
y1 = subs(p, x, x0);2 L: O" |4 v3 R; \2 X
line(x0, y1)0 w @' s. I3 J& w5 Q$ R
end
& Z$ T1 ? ^0 p- |7 ]# e( G ```
- {0 {1 \- \( o5 r - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
* m% O% G: }' E# f' o, } - 在循环内部:: Z/ ]+ ?0 a6 { a/ h5 r9 _) A
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。+ h' q. E( w" c" A/ D' Z
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
2 \* U! j( k% c+ N - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
! C) }3 _8 t+ e/ W) [% F: o; a9 R
1 l+ ]) B3 U9 B+ n2 o: A3 D. v### 效果
# p$ [1 q, \# E" {
3 r9 E. c! E3 t k- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。( `( U" G5 Z" O- V, H$ m
: b- s( j- a6 f1 }; x$ E### 知识点总结, K6 r' T$ i: v/ W
% v2 k, p$ l$ D m0 }5 b1. **泰勒级数**:
, ~; M% d0 n3 |3 v - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
/ b9 H+ b8 R8 g
; I3 p3 ?7 e3 I# u1 D" m2. **符号计算**:
. _5 g6 h2 [" k9 T, w - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。6 Y5 e! e1 l/ ]; Q8 [. L7 [9 m
0 |' B2 n5 Z; l3. **绘图与数据可视化**:
8 v" Y. ^' y' L - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。8 T9 i1 c: K1 T! L
# o% d$ n4 f" E8 b5 o, M$ _
4. **遍历与替换**:
' u: x" F5 i' E' r - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
% _# m3 `) c- u5 n! b/ I$ c+ {
# O; s8 d/ u+ v### 结论4 R" u! Z1 t* |! y1 I+ q
+ s% t' c: M7 Z( w5 T) e这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。' p9 y) B! M! P% G
5 E3 S% A1 t, c) M, E6 l
* k! P- v Y' {" S* ~3 K
' _. o# F: j+ _$ B1 Q1 P8 _0 o- A0 v1 j
|
zan
|