- 在线时间
- 463 小时
- 最后登录
- 2025-6-26
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7343 点
- 威望
- 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);3 m1 z _8 M- B
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on2 E7 E t0 x9 u% z
- for n=[8:2:16]+ a0 `& m8 ^: H6 k& f5 R
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
* F0 ^. R& E. F* M& R3 v - end6 E$ O3 y& Q: p* h
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:# ^ v/ c# d0 q# }# F% |7 F- U
1 Q* @7 U" i; ^! ~9 I3 Y
### 代码解释; S5 G. X v8 O& v- P- `8 }
# _6 g$ ^# n- C- n" Z! E1. **定义 x 范围**:
+ N6 t8 b0 c/ s9 \ ```matlab
3 q. t+ I3 ^0 L' I3 @7 _ x0 = -2*pi:0.01:2*pi;$ o: n& k) k1 C; d- L6 `8 P2 I$ c
```
1 w; R9 [, d; `3 ]7 H H; N - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。4 o+ e; b& C8 d7 i5 w
2 u1 k* ^5 H. ^0 d' M. ?2. **计算 sin(x0)**:# S. o8 j0 |: p0 G; Y. f8 N
```matlab
% P: n% g4 p: S- t" I y0 = sin(x0);
! i L) T5 Z) Q- S ```. x( W Q( U9 y% ^
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
& S2 M+ w( i2 L8 Z$ d# p! q7 A5 }) C; W5 F$ l; f/ Z" l
3. **定义符号变量和函数**: D" M; R: r+ w. n" X7 G
```matlab6 j% M3 ~% j6 h6 r' P2 V& S# n
syms x;. Z8 r, {( w8 J0 Q q% T
y = sin(x);8 c5 R4 s. L3 f2 x
```
, d2 ?& J" ~7 O7 [! f. Z X - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
9 r7 n1 x7 j6 _7 w
6 s; J# w# Y: _! z2 w! W4. **绘制 sin(x) 图形**:+ c: F; M) ~, \
```matlab1 y% M0 k" o. T/ ?
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
. X8 \# i w' M+ ]; a4 R% S' g4 U ```- y6 A, ^. V5 B+ e0 w! |6 L
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
, {- h0 n9 D8 s8 P' [. X3 I - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
4 @8 X3 _5 K, T' s - `hold on` 使得后续绘图不会覆盖当前的图形。
" E4 _; ~, i9 ~4 e9 [) ^6 ^* @, g ~/ z0 F& }. @( A$ x7 S
5. **进行泰勒级数展开和绘图**:0 w$ C; t/ W5 L" v3 d! T
```matlab# ]+ k/ H3 i5 b& O% x
for n = [8:2:16]' @: K( Z4 G! F( S1 ?* n3 ^
p = taylor(y, x, n);
( x% S; M- }) |% d y1 = subs(p, x, x0);% b5 p. `& h, E; A; f4 q* k R- p
line(x0, y1)/ L0 h' X( d+ o/ I3 Y( C# d
end0 F. A8 @" H+ c) G
```
% b! z5 e" h) L* h9 H/ v& y. P! K - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。. ]0 |$ f% f) ]4 _/ b& O
- 在循环内部:7 ~% Y {3 a Q! f
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。5 R7 b' }5 @9 m$ g5 c
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。3 r9 `% H$ z9 l: @- }& s
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
9 k8 d) ~' ^5 {+ G2 P. B. j" p. X) a& W- b7 g3 S
### 效果
; Z ?1 j& N/ r
" q) U4 Z+ d ^: Q1 R- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。3 I( _/ W$ u# S+ j8 h( _
7 a; D4 _$ h( n) O6 ^### 知识点总结: C: R t0 G- a9 Y, m1 v
! P9 ~, [1 N% R
1. **泰勒级数**:0 v$ k7 N* j5 Z
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。: p V9 V' I0 O; h, B1 Z
) m0 M" G' i7 y: r2. **符号计算**:
: j, A: [1 N9 w% k - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。3 c3 {- a6 R. b1 u2 l
) U. s: w( w4 @3. **绘图与数据可视化**:
8 [* i( U$ a8 U$ ]) c2 y - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。$ H- `0 |- G, N! e3 V
" B- C0 G$ R5 y! V( S5 R: |3 [
4. **遍历与替换**:
% ^3 ^0 u. e% x - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
$ G$ T" c+ |6 o8 f/ W5 _ y. B l, C, |7 i+ j
### 结论
1 \) }0 k7 _& B S; b7 v; E
/ m, `1 s) b6 ~% J0 C这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
4 I; [3 n, @2 {
. {: A3 y; X5 o) x+ Q9 f/ w* k9 R, U8 S. ?5 V1 O2 d. u; j7 J
0 d8 K* ^/ ]& z; v8 w
# N `2 _( _% W$ Q/ N2 q# j: H: ~ |
zan
|