- 在线时间
- 479 小时
- 最后登录
- 2026-4-17
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7790 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2923
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
% K; V* Q. q8 |( [ - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
( c% Y; ^, b( u: E. o - for n=[8:2:16]
* S& J4 G( `* @\" d; W1 E - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
: u) _' n6 ^# g7 n: t* H, n4 w: o/ T - end V4 m4 u3 ]2 b1 T, p
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:# D. x4 R+ ?+ H) l+ u: ?5 I5 C
7 ^6 h) @: c0 ?8 V, Q# _
### 代码解释- I$ { @# y. |5 z% Y! g5 g9 q
+ p! Q( y. u7 p# D1. **定义 x 范围**:
/ Y. Z O b: ], g2 A ```matlab
0 K3 C, f- z6 [- N" x* ^ x0 = -2*pi:0.01:2*pi;
- o1 n+ J7 v& i' r( C ~( H ```
+ P& ^2 v. A8 m1 } - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
0 M+ K# V$ O6 J+ L/ T. I
3 m) O- T' O; V i, z; z2. **计算 sin(x0)**:
& X' ^( d2 v* I4 F4 Z% X& W1 ^( ? ```matlab
% P; r+ w' z5 H+ Z y0 = sin(x0);1 ^5 K4 _% U! a7 z" c
```
9 {. O: {. b% O/ o; c8 |& { d - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。, n" |8 t K! L1 {3 e5 e
% t3 ] ~+ Z) }% Y
3. **定义符号变量和函数**:" [+ V+ i; w3 v3 J1 |
```matlab
0 h& L! H& C y$ c. h" U* G- h9 F syms x;
" o* d! @& i1 [! d1 }1 `1 P) ^ y = sin(x);
# d' ?$ z2 v1 w8 F4 ? ```
- R2 |) i2 Q" g+ f/ ?! v/ X6 `5 z0 ~" o - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
x+ ~5 H: T- I- r" d
& u! f; |5 t0 K* s4. **绘制 sin(x) 图形**:, y9 t- _& C6 F
```matlab% _5 U# d4 _6 E, V2 O$ ?
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
- `3 }) W7 j7 V ?5 V. @* K ```
) p1 K) X3 w' U3 [4 C2 W1 U - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。; a. [$ G3 ^" v3 U( t- q
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
3 o% L) f, M" I5 ~7 S$ p$ ~7 e - `hold on` 使得后续绘图不会覆盖当前的图形。
6 e8 q: V8 g# [% ]) N1 |: W6 p5 n, K! j% y
5. **进行泰勒级数展开和绘图**:) X5 a: h* X1 q( E4 W& s
```matlab6 I; L, [5 F4 @ o9 O/ G$ o
for n = [8:2:16]6 a- x3 R* R. @
p = taylor(y, x, n);
% }* @2 s& J4 C/ v3 l6 K( e y1 = subs(p, x, x0);
* x( A% s7 W. \' b$ P( p4 j line(x0, y1)
! g w" ^1 k) g& p end' \$ y" ~" @2 |3 N
```9 w0 \& c& a( L- z! b3 ~- N
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
4 u5 z$ ~+ A3 {; N* e* U - 在循环内部:
( [6 U9 b( I7 G1 L9 c. q. U& Y - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。% v6 Y# K p- X& S2 O) x
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
# s. ^ d# b/ x1 D$ g - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
. f/ c: x4 A9 \
' W! Q7 q& W. K2 A$ V+ h0 R### 效果
# z/ C+ I- \8 ?. m& w7 v4 y# ~* a# ^" }
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。% T# E$ ?3 _. k/ {7 {4 E. z5 B; Q2 e7 f
* r: _% m; H" R. h( K$ ?5 P### 知识点总结
2 i- O- ~/ E3 n+ l; l) O) _3 f. t* X/ R2 W& [6 _) l- T( a' ^
1. **泰勒级数**:& \% e% j+ F8 p. u/ \& L
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。3 F* M/ o) ?: z S y) } m( N+ l
% D/ S4 ~& K4 ]# d$ @2. **符号计算**:+ l6 G, \) I+ H+ o
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
$ @+ B3 _, K D3 @6 |+ K1 Z% n) E e; E$ L
3. **绘图与数据可视化**:- V4 ?1 @5 o4 E) p) Y5 U
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。) O- d. G( H1 V
. s. e5 e; _# f, F* d6 D7 \4. **遍历与替换**:
' S' e! f7 S* [# ~) w0 C( _- g - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。8 w2 X4 S* d% B8 [
( b- Q% k, E. s' a7 ]- w5 t3 I
### 结论
. U1 S% r2 i* S R) M
, S9 `& b, s4 ]# B; g, \+ B这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。! K/ c1 {) J4 D3 {+ U, c% i
% p$ M% j9 ?3 h+ a+ `
9 w4 R) z8 y9 }' J* X$ |8 ~) B2 Y- H& q. e
- ]5 |( i. H' J' x1 p3 }, [ |
zan
|