- 在线时间
- 463 小时
- 最后登录
- 2025-6-15
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7342 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2781
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1156
- 主题
- 1171
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
( [+ a4 C2 b7 W# @% a9 I\" ` - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on {$ f, e& i+ p5 v* b
- for n=[8:2:16]
2 ]3 l7 R. K) g W7 r( c6 d - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
5 g8 F1 C* d! d+ t0 ] - end
9 p4 H4 E' x% S. v6 ?; F) q -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:3 U/ f0 ~% P" R
0 M8 s& V6 ^- V- o. h3 m- m
### 代码解释
1 h) e. K x2 C4 ~0 h3 e0 D& L* X f. P. P" \& j* t
1. **定义 x 范围**:0 }+ T$ M& J% Z
```matlab
! C1 N3 X; b8 l& L9 R x0 = -2*pi:0.01:2*pi; D3 c) ~! j+ @" N" B5 W6 j4 |6 B
```
- V2 P8 U& E6 K4 H - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。9 I( V' n( p5 }7 K) A, a) ]# G
' `1 c5 F2 p0 L1 S2 @
2. **计算 sin(x0)**:
* ~& h) @+ z ^3 I, _" t* H* B ```matlab. R+ U% S2 l2 G, `- J) D
y0 = sin(x0);
# x& B) }4 ?% B6 t4 K: ~( I5 v" h ```
' j4 p& p$ g! [# d - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。9 o7 D) v8 [ z U
6 t! t2 ?* E: P
3. **定义符号变量和函数**:6 Y' Z/ F9 Z+ J, B2 w8 Q
```matlab% V( M/ h! Y: q( Y; L
syms x;
+ I3 L2 _: c s& `/ `; }/ p! j' n6 _ y = sin(x);
: `) b" s* T- D( d! {0 ` ```, Y; X1 Z% ^7 G. d6 D
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
; T4 x; s8 y) b7 F2 k
5 N* k6 V! Z" p" v+ ~4. **绘制 sin(x) 图形**:9 i. `. u1 D; d* y% K' E3 o$ r
```matlab4 y6 ^6 Z1 D, \& G+ D/ u
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on2 n% {3 ]0 O0 _- O7 D* c
```
; W7 B0 l1 w' X2 G% K - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
: @% a0 p7 [' F% O+ } - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
/ m: N0 v2 {# M" N, Y - `hold on` 使得后续绘图不会覆盖当前的图形。) Q7 h$ }% N) e, I4 c8 C" R
( d; X& S, q& V( X. U# ?- q! e. q5. **进行泰勒级数展开和绘图**:
$ B5 r5 s: I) U/ k ```matlab s/ G) r. F/ g+ F* R
for n = [8:2:16]0 D; ?8 L( h7 U7 w8 O
p = taylor(y, x, n);& n0 a% D* T6 [* F$ _+ J
y1 = subs(p, x, x0);# y, l. @7 i/ L1 ~4 |# |/ y
line(x0, y1)
! n+ s+ N8 ]& W0 {. V9 z N3 k- F end1 Q5 `6 F" ^4 e8 K$ V7 K' B- y
```
3 e" A1 {* ~) M, z ^ - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
2 X. ]3 c$ S2 B) ?. D9 q - 在循环内部:
8 B, r1 o, v1 {, Z7 l - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
# b( ]) V, s" \" |2 t4 D - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。1 J% Q& p( d( n0 G9 M& ?
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
1 K3 [) {0 N% Y6 \. S7 W! P) W8 \
* D) r" o- L4 H) C2 X& f### 效果6 Q6 ]; I7 Z7 X( ~$ g
/ O& t% L5 [. ]) `( E1 q- d" R" I- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。/ g& S* v7 M" i
' V5 B8 u& K: b8 E, c### 知识点总结
! {4 N1 r+ x, X( N( A. Q( e6 R: j
1. **泰勒级数**:# R* j0 T* m' Y" h4 `2 l5 T
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
* C. I( k. p( C5 I- Y" Z% O4 L, @4 Z- A5 \1 n" a2 g
2. **符号计算**:
- M3 O9 S5 ~3 W* ? - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
' g% Z' Y+ N' ?, c' }' |7 Y; R" m, a1 u7 T% B; s4 e& _! D" m
3. **绘图与数据可视化**:
; u2 ?# I" |& f; y2 E; a - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。6 Y, g6 y6 x2 r" `
- p" u# \( S \1 t. @6 y0 }
4. **遍历与替换**:
- C6 k; b! Y4 R; e - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
* g( t/ ?9 q: z
9 _4 X; b0 B' g+ v* w. ?### 结论& J+ }! B2 H' s* v B8 v
9 ^/ M* l9 \" D' U
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
# x0 Z2 h8 k" l
3 C6 E/ x% b( V" F+ o$ V. e, ^
6 \ ^, E# b7 O6 a) T/ I: l- X6 d o& y) s; Z: }0 m# O
0 X3 g5 V2 L W- g6 N) o |
zan
|