- 在线时间
- 472 小时
- 最后登录
- 2025-9-5
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7689 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2887
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1161
- 主题
- 1176
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
' Z) x' m& N/ | - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on( u/ q8 O: A% P2 K7 V) |! r
- for n=[8:2:16]
$ O5 q5 J7 ~' `0 i - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
M# Z& ^, Q8 v - end. n: Z\" D3 `, r( L
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
, O/ n4 t. q3 k) l- L# o6 D
9 ]+ n8 \. W8 f! ~" W7 ] n6 R4 f7 V### 代码解释
( u) N) L) E! [' _0 ]3 A
9 d8 k- P" Y3 S3 V1. **定义 x 范围**:* |* X0 C& e1 E8 g! V. N
```matlab0 c! w7 Z5 J4 O8 _: N5 I5 o
x0 = -2*pi:0.01:2*pi;
E* D- [- I! D8 P, B ```
$ q+ f, n5 f" D" p- |4 _ - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
( s B1 d6 {" k% g7 b
& z! z$ c* C9 u$ Q* y0 W% g2 F2. **计算 sin(x0)**:% r. F9 _; S( {+ s$ {0 _
```matlab
& [. V3 e7 x( W& U: m1 r! S. Q y0 = sin(x0);
& M! Z+ z; L: Y0 Z8 s! p- y; i8 l ```* F6 W" b2 K% P1 u9 \7 Y
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
: M& f) g% t2 d9 k# {$ W9 ^/ K8 ]3 g8 U/ {, }( v
3. **定义符号变量和函数**:+ B8 N$ S/ M: l, h/ l8 Y7 Y
```matlab7 l. { G1 L. ]7 A% E, n$ \
syms x;
. W! H8 _( }, E' P; b y = sin(x);- n9 b7 Q: @# @# D% O. i5 T' m
``` l2 S, t. w& a' G2 c0 A
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。2 o$ x8 D3 s W3 b2 B
# U6 `, i9 W* a ^7 e, K$ v f; w4. **绘制 sin(x) 图形**:
7 c3 P2 x& t' _. `2 N4 @0 Z1 T( [ ```matlab8 |0 d. `( E. k7 r8 b# j( g
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on9 F2 W; R! n5 L( E+ U; w
```
3 M9 M6 b( k& K - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。2 X7 L& h% ]( V0 v# o% \0 ?3 [
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。9 A" X3 ^1 [, v+ F# u
- `hold on` 使得后续绘图不会覆盖当前的图形。6 p6 l! B; s9 F, q1 V: }" {: S+ b+ K
9 A( s. o! j' J; Z
5. **进行泰勒级数展开和绘图**:
# H }) q7 J6 \' v: P$ ]# k/ w ```matlab
& M$ ^8 K' X; d& U3 {/ Y for n = [8:2:16]% F3 k5 Q) t+ _
p = taylor(y, x, n);
$ J6 o6 h0 `+ W* K5 u5 L y1 = subs(p, x, x0);. o: A- y( i) D- d( X4 q
line(x0, y1)5 f d6 {' X/ S: V; s. s; S0 L
end, |0 @# t! e$ Q) \& d
```8 ^+ m! [$ q0 Y" `' y5 _
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
7 a) Y" T' d2 P" u8 ? - 在循环内部:
! n C" D1 ^& n - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
/ ^7 N3 Y) g3 R* R9 U - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
$ Q, C$ C/ L+ d7 i; t# K - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。3 f+ G) J) L5 {' S2 V1 \3 B
; y4 \' x7 g) G### 效果
o7 R# l8 R/ o; k- B. ^
7 g: I+ Y0 H4 Z- R' s0 F- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。3 S Z/ _" K- G% l; q
$ m8 M. K8 p. v. Q& q9 M" P' O### 知识点总结4 N% t" e; T [# L- a4 P4 I4 p! X
! C: r$ P2 u q( q1 ? k1. **泰勒级数**:
$ b% A1 R" i8 r1 R$ m - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。7 n3 S$ g* [1 M1 W
5 J7 a8 _0 g9 |' F2 [2. **符号计算**:% g; \7 M n. ]- |9 g5 c1 t
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。* }7 T) o7 S# }8 f& F" `: a5 p4 J( [/ X
4 V0 z9 l' T9 o: _
3. **绘图与数据可视化**:
2 m2 t+ }- [* V6 k1 B2 s/ N) w - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。4 i/ `. \: f+ ^
R% O6 y& ?0 C; U- l# R. K$ P5 @4. **遍历与替换**:
) p$ y( B7 _9 G0 D, J0 m) v4 E, s - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
0 F9 s- h( e* y2 g& U" q5 v. U$ w% ?* e5 \6 s* g1 q1 B
### 结论0 M# O( r, t8 P0 z
7 ` [! M7 j3 f) d
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。2 @, p4 a5 Q- B" `
% E# r; ^* M5 g( ]0 Z/ I. F% {
% m7 I! l0 ^5 e) I+ S, W/ I; x
2 e+ X. `! j* ^* W) q- N( P/ Y! s
: E+ P) Y% B- D# z% c& o |
zan
|