- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);( W. Y+ Y2 W' o3 ], @
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on# l: n3 [6 r8 }1 a4 w* C# _4 T
- for n=[8:2:16]9 h( C+ C6 |: s
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)) a2 N* q' r [) ]! t) y
- end
2 }) A3 P1 g: q7 U -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:. v% ?3 y8 T" n; u+ |* b
7 F7 P F) F# Q. t
### 代码解释
( K1 M: `% r5 Q. g3 a* [
9 z Y/ k$ d6 p& p* k. D3 R( g& Z1. **定义 x 范围**:& c6 p- |& I' O9 N, f" j, a
```matlab# t/ u' x# x* w% i9 B6 E/ P
x0 = -2*pi:0.01:2*pi;6 r6 ~1 G) R/ \* @- r. k
```
; @5 N3 F( f0 y- k - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
! @/ d, ]+ E# G+ D
! b' s9 ~" B U! T: g! f2. **计算 sin(x0)**:, A m1 g0 }( M+ l W$ o
```matlab& w: G) q A+ O7 n9 c/ C; Y' L, n. y1 c
y0 = sin(x0);0 l( g) p5 N$ [, l! T, S
```4 }/ ~/ k7 g% u. r S. v3 G, B* X
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。 Z% V! V( l8 f! T
% U A! v z9 H1 G, d6 l3. **定义符号变量和函数**:/ q& V, H8 a: z
```matlab( A# S3 O/ L0 W* s9 L* b
syms x;8 o# I# c1 i+ s7 D7 Y
y = sin(x);
B( O- ?) [3 X, Y3 y K" } ```
$ z4 N3 m- V6 J: T* O$ _& g7 r0 d1 i - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
% V V5 X3 g0 N; \' n
" z# m% o/ _3 q: X1 c4. **绘制 sin(x) 图形**:
% A( b! d$ J/ G" |7 g! g ```matlab
- U. {8 P) [. G. y5 q; F plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
7 @0 x- F. H) F ```' T! d+ [/ @* n0 B1 _0 X/ o; `
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。1 b7 H, ^0 ?# E
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
% M* Q* j( o) l9 p - `hold on` 使得后续绘图不会覆盖当前的图形。
0 |' b5 M% E' v) U4 _; f4 K2 w1 d8 w% V1 c# Y
5. **进行泰勒级数展开和绘图**:) t1 @; x. D8 E( A" x ]# t
```matlab
, }0 e5 ^1 K/ k for n = [8:2:16]# w8 z2 o% q6 e- Y8 i
p = taylor(y, x, n);
$ W! v. K# T9 W7 I+ _1 w$ a y1 = subs(p, x, x0);
( k. O7 X& v- f" _$ U! u line(x0, y1): R" X3 u7 K z2 m
end( e) ]6 C3 m; I" a: g& G0 i
```
5 V' _# F! a. M" K4 k - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。" p1 q/ b8 U1 B
- 在循环内部:- U. [; D" @+ F! @" D
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
h, W$ h7 H5 c1 F" N V+ c - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。- e& h; U$ X! f1 C! u7 Q( Z- X
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。* i3 {, d& L6 N! L' E
3 ?; `# p2 h2 r) A+ Z### 效果
4 a! p# l; y/ T5 N
4 x* r$ g2 C( [& d6 u" K- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。) C, O6 D/ i+ _7 x
' A. j) |0 o7 ~+ s8 }1 _% g/ E
### 知识点总结8 Z+ R* e t* n9 M: `
+ c) u- I+ Q' M2 `3 D6 o+ w/ Q1. **泰勒级数**:: S# F: O/ x* J8 R: }; ^
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。9 C$ I6 ] S" [% A0 d4 ^
: `9 j2 A# X) K& z2 S" F4 |2. **符号计算**:4 d4 F e* \1 n' {$ h" X# ^& O5 w
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
2 x/ j" J: V8 Q0 Y0 d/ d
% H b( K3 c. c; T8 P, R8 y3. **绘图与数据可视化**:0 h) j+ Y' V3 R( m
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。; L4 a! L9 h' w/ F' H' z
2 n7 Q" n3 r5 g& d
4. **遍历与替换**:
4 S9 k" s: z: k! T+ ~9 s - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
) |9 C" O( a& w" m( U7 [* N' o/ S8 s2 b$ l
### 结论7 m4 Q) ~ `0 j9 N: y
- V% ~7 V" o2 Y6 k2 T" o这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。# D1 k$ N# u# z: O
7 [1 |8 v) n- E1 Q. m5 _0 \" V( D+ v) D' P5 m( i4 r2 p0 {4 X
5 v4 J1 j, M/ _$ v
$ F" k8 B8 {1 v0 v& A" L b
|
zan
|