- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
1 x6 r\" P S5 P* T - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on: i0 e- ^# K) |; L7 _4 _
- for n=[8:2:16]8 `9 o- n\" C V, `0 y. s8 t
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)\" n& X# h/ E! p) l! K9 \
- end
) R/ X+ u: c+ z6 R5 h\" `4 @. X -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
! P0 q' T5 m1 s) j( G4 S9 q, ?1 v+ K! [/ u, s
### 代码解释1 [( w) O5 F c1 t) ~
. s% ^1 M0 {- J4 }8 t# G5 `1. **定义 x 范围**:
! q7 H& i( t1 s: L/ q ```matlab
. M! T) d' b, ?# N* A2 Z5 { x0 = -2*pi:0.01:2*pi;
9 r0 h4 S5 @9 J) l0 h ```) ]3 A3 v" ]0 p! r: e& d% f
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
2 E) l. `# h; k. _- e( ]
" V; s! r5 _2 }+ u2. **计算 sin(x0)**: E" \" I* |. c4 B
```matlab
( a8 P# A! s1 m# P. a% I y0 = sin(x0);9 D2 O/ a7 L- I: ^3 g7 z
```4 h5 O; c$ O t& B* f% g
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
I7 U1 Y! E* S+ T+ I
, q5 T1 E6 v( \3. **定义符号变量和函数**:; I G5 U1 Z, a V Q
```matlab
: j7 X7 x6 e* _: w! F syms x;
6 P. |3 `. i8 T+ V y = sin(x);
) G9 a( }# n5 |$ E- P ```' g% E, C1 P8 X/ B3 y
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。2 \& m' O8 _# H a6 p( M7 g
" J9 H! L1 s+ G4. **绘制 sin(x) 图形**:7 D" g. P1 z, l9 h3 Z7 z
```matlab
- s! Z, h0 S- ?7 j8 f) b+ R plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on# L. ?- d9 ]) x* Q$ S2 Y
```
0 f; z$ k( G+ U4 B. V. Q - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。5 l( j6 w2 O( t( {; N/ d4 _8 F
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。- s! p% k/ q8 V/ p/ o: H) u
- `hold on` 使得后续绘图不会覆盖当前的图形。; @( s! F% K; X6 j: Z5 s
/ } t C# \8 ^' C4 O2 R
5. **进行泰勒级数展开和绘图**:
; A4 W/ `+ u( u0 K9 a! n ```matlab$ G8 W( M+ P5 z6 R$ R3 B
for n = [8:2:16]
& g ^8 {9 E. t9 b; J7 o p = taylor(y, x, n);* p! B9 C: Q* }$ {! _1 G; E
y1 = subs(p, x, x0);9 U+ M) s, o7 y9 V. b7 @2 m
line(x0, y1)
1 {) m* f" S, \4 p% A# U u end
* ]8 z) @* O7 H8 |5 { ```! d1 [, U4 i9 I
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。( _; V5 ]2 Y; ]6 j( b, H" L( i- M
- 在循环内部:) Z N# t+ @5 ^: D
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
1 h9 l& h, m5 C$ r - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
. F( U( O$ x- h+ r+ J - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
6 m7 u( `+ \2 L, O- Q4 Q
7 V7 W# i9 D: w. v: y- w! o6 u! m$ e# `### 效果
: B3 G2 u/ o, M1 \9 L5 q+ i& Q n' R( K8 p6 X1 N
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
) C- H. v5 ]! q7 R( j/ ?5 f1 }1 r8 p" u" T0 }/ }6 o: _
### 知识点总结# e- v2 B; z: H. |9 @# A4 j
/ A' x5 F- V: D1. **泰勒级数**:
+ a2 b% S2 [3 |. o - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
- Z9 N( ^9 y! S7 U1 R5 K- z8 c6 y/ m2 m* C' v1 G3 O# [
2. **符号计算**:7 m4 ^$ w/ Q- i& `# B" g; H2 W# `
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
5 C7 n. s u6 p1 k( \ q$ F e% e5 [+ H* P) V& }
3. **绘图与数据可视化**:* c0 T" A' |) [- j+ f0 ~
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
: Y4 r; F7 A+ L3 `5 `
5 N8 _- r8 x! M8 F9 E* P4. **遍历与替换**:3 V( @. B# ? S6 E/ ]2 U) ]
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。0 g1 V& s6 F P
" [5 V3 B4 M+ {
### 结论
; c! b5 z. `& z O4 e2 b
5 D! {) D( z% _1 V7 S/ g这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。6 j% }8 x& r7 r0 s' H+ E
/ V; G" s' c6 y; q y5 s
. c `# n" S0 U- M
- }5 v2 ], q7 B
t1 a) W: n z; j5 r) x |
zan
|