- 在线时间
- 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);& [$ @/ ~& S) W8 u8 C0 I$ Y& D* U+ G% t
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
}' p1 y0 {: Z8 { i - for n=[8:2:16]
. b- B% F: {/ o! {3 N9 @ - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)- p' f. c* V. U* e0 y$ |2 ]2 v) x
- end d; V, S8 X* @+ `0 [. }\" G- J% v
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
/ K1 Y% {0 m8 R% @4 y0 A, _& r( `3 B) s5 q$ s7 f, s) W" C# ]2 F4 [
### 代码解释" ?. I5 p% ^6 {* n3 l% k
c6 F+ i: a0 v
1. **定义 x 范围**:
1 m# Q) B5 j& L. U, M* a Q2 T ```matlab
) f4 j5 s) n7 B$ | q) Y x0 = -2*pi:0.01:2*pi;
1 Z4 m2 x" @" g8 _ A ```' e% Y. q1 Q& k
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。. c* b# p; Z \1 b; S. n
+ D0 f; S. f3 ? ^1 v# t
2. **计算 sin(x0)**:. t$ K M' Z# _
```matlab6 ^0 v5 d. q/ u- ~& a* x
y0 = sin(x0);
0 U% _9 u3 E5 y" O( m/ r; A! T4 p/ f ```$ S0 j1 o/ _- t; f
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。( F& ]! U2 o( v
" p7 h) x2 e) C9 F( }( u% f
3. **定义符号变量和函数**:
" l" [( o$ A7 `* m& V* D* W0 M' T; G) d ```matlab; `+ G4 C: P% {+ u% @. O
syms x;
7 B7 d9 E# C6 v" [! m8 w y = sin(x);9 k% [: T, a" G N, a
```
2 C$ w, X ]8 W( T* L5 c - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
' ]* Y% ` t# _- z# a3 O" H# j( h; i4 D3 e, t; F
4. **绘制 sin(x) 图形**:" P" C+ B3 C4 H t! o- [
```matlab* x# ]# f7 H" z' M9 f& P# ~
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
6 x' e J! y0 Z. j0 b8 B( u ```
& Z/ Z# S/ {- \ - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。" T; l: W" k1 V A2 P9 g
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。" @$ \3 F/ F$ v0 a' x& D
- `hold on` 使得后续绘图不会覆盖当前的图形。
, m( K# D5 j- A1 [& C, Z E/ C' {+ {' R9 ]: k7 Q. d7 c( n
5. **进行泰勒级数展开和绘图**:
# z0 n: }" b" S5 @, H ```matlab
( r1 c# n- P( L4 o8 O) H for n = [8:2:16]
! ~% s. m4 \* n p = taylor(y, x, n);
' O4 z8 l' ~+ l8 [* P, z y1 = subs(p, x, x0);2 ^: Y. d' l1 v% g
line(x0, y1)
* _8 Q. q3 g4 Q+ q3 E9 T end
+ N, q/ c% k4 T& p" T4 q6 { ```2 i5 s0 x. L% C5 k8 e l6 a6 K
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。8 S+ }) n# j9 l- E# f5 E5 o& y
- 在循环内部:: C8 @9 n# G$ U, H% @
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
) W0 q T4 C/ [" x+ K& e& X - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。! _* R8 i# \0 i5 R
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。3 M; t) g1 _% b8 ?
; a; p# r+ q# j1 A6 G! z l8 M- ]
### 效果
w( ^% C% h- N. S+ k7 E3 u0 e3 K: T8 A0 J7 S, A* }+ }
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
/ ?) y9 B0 D! ^' A8 Q0 V: D" {: \9 E( W1 ~! ]( N. m
### 知识点总结) C9 u8 h1 ` Z6 F" ~ Y) p
! \4 @, V$ }& x5 I( F% I: U8 Q1. **泰勒级数**:, e4 w. P0 {5 c
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
5 x( v0 ]+ z- q4 @& A: `% e: h ] ^+ L p c
2. **符号计算**:
% }/ [5 m o/ `6 U/ a7 z! v# [- ^ - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。: s: q1 M7 C2 p- i3 I/ s
1 K/ R$ q l( B3 h7 R+ I8 Y, L
3. **绘图与数据可视化**:0 m8 B& t, d1 t
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
" I' {! e- u7 F7 ?4 d- ^. \" l8 z! j b) f! g5 l
4. **遍历与替换**:
% H' U- } j8 D# L1 | - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。, j+ o% z8 S9 Z$ P% h, I$ y6 U; y. H
) _8 Y4 t* }! Q7 V+ z0 F( X# r### 结论
& K4 _+ \, E( W9 R @5 b& R8 J% v( |
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。5 z9 f7 t! _$ u: F0 q5 k
* Z: z! E& ?: D; \
$ N4 i& G0 M+ w" S2 y' h
+ W9 e2 S' [' n) U- U- t
2 ^+ e+ S, Q7 T l; K |
zan
|