- 在线时间
- 471 小时
- 最后登录
- 2025-8-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7639 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2872
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1160
- 主题
- 1175
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
2 ^( o. T* P' L, f6 g - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
7 x, V# u, p! q! D\" X - for n=[8:2:16]
2 j; Y/ k, T. a; e, V: D - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)% @/ T( Y( p5 ]/ Y0 Z8 ^; P
- end! G5 s1 s* N& R8 u
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:# I! `* Y3 | U
6 A9 f" s% M' P1 B8 D* _### 代码解释: {# g2 g6 l! g+ }- _! d) F3 N6 w, T
6 s6 P. m$ J0 X8 l" i8 U: J- F1. **定义 x 范围**:
- ?5 q# O. h# b- Q L ```matlab; ^! a/ b, A6 G0 Z/ z1 Y$ U7 m
x0 = -2*pi:0.01:2*pi;# W1 _6 n8 O: b- _3 Z W7 s
```
2 y7 |' K" y9 E4 a" I - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
* G: l+ p+ n' h' X4 ?2 x
5 T1 R; _2 |( L4 `6 K2. **计算 sin(x0)**:4 Z k# A/ u- x. s& I' V' I
```matlab1 U7 x0 {; y$ Q' J( d( \: U
y0 = sin(x0);
* [1 ~4 F5 w9 U3 |; C ```) s1 |+ I6 I. F1 b
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。+ |1 m( X' Q) g$ b# D& A
- h- F2 y6 m' R) N1 E" G- Q3. **定义符号变量和函数**:+ Y% f" F, b3 K
```matlab
& @3 P0 ]4 |, `3 {3 a6 [ syms x;! y9 S W' u9 h: Z7 o
y = sin(x);" K! h$ t, A- g* N: ]2 j6 @
```% ?7 _/ U$ [+ |- e
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
: u+ a# _$ F1 W. j( k: V! n; ^* N$ z" u
1 ]/ }8 \* q. q, ^4. **绘制 sin(x) 图形**:" P8 C$ J9 Y; u! G. I3 l, o2 K" P
```matlab8 y1 i! E2 L$ Q- @+ w3 T* G: W
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on" u: Y0 X1 |: _1 A" c
```8 i9 [, ^. x; N; T9 l" S
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
7 }7 Q5 V" K0 Z r2 `! \; N - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
3 Z6 I7 B: A8 B+ [8 d+ M; ~' p - `hold on` 使得后续绘图不会覆盖当前的图形。2 P/ \- ], A. [' |9 O
3 |1 c7 D) @& `% L
5. **进行泰勒级数展开和绘图**:
- q% t# Z( ]8 b ```matlab
) {; S0 g. P# F9 i$ R5 X2 v: S for n = [8:2:16]
$ X3 C1 d- P1 M8 z7 |; D0 I p = taylor(y, x, n);
& F) B5 Y( v1 m8 @" D7 Y8 ?9 X y1 = subs(p, x, x0);
T8 W# N8 m% l/ q0 c* D' ?, ]: K line(x0, y1)
8 N: L3 N/ o$ G' w4 n4 [2 B* k end
$ g; q8 Y4 H) X/ L4 R: ? ```
$ R3 F( |0 _6 W! H3 p. d$ W6 I - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。2 `# e/ A1 u- [* y. p
- 在循环内部:
6 [" v) d! b1 Z/ u( E8 d( R% x8 c2 C - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。* u* F: C; @7 ]$ H ^
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
8 f, l/ }1 v+ N$ n2 V - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
/ _3 W: @$ S; q+ u" i; a7 K/ ^# w1 w6 d; J) d9 o/ I) w( c
### 效果
* D0 e: L; ?* w8 N" a( k8 q
1 ?6 |- T; o: o+ n- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
0 a" o2 q( O6 @, h8 _ ?
# n! Y; r2 x" Y" `- j2 y8 n7 x### 知识点总结
/ P* F3 {/ w4 T( t5 C$ H
, [- E4 \1 i/ ?+ y$ n8 m0 C1. **泰勒级数**:
. g$ |. E" ^- t - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
( q( }- `& r @* O: V# K0 J! O+ h* V3 u4 G" G; ~! p
2. **符号计算**:; u/ N( `8 J9 D7 r' E, I, B( O6 V0 v
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
6 i7 M/ \! ^5 t& v1 l. Z+ A
! a0 x7 T0 z! U* b! f3. **绘图与数据可视化**:2 C+ l/ e+ Q' z* O' u
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。9 N+ V9 v# V5 l$ u
2 y$ G2 ?) c) b4. **遍历与替换**:
' M' C" E" u2 c; ?, B C4 b* g- U+ y - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
3 W/ ^: r# g- t# O) E
! Y) e) y6 U# G% L8 G### 结论
/ l$ D* a. ^' l0 ]2 {& }) X1 }8 }. n# { r$ u h* {
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。2 F, H6 R$ ?( I6 z
# ^* P1 n9 U' B0 b
1 e3 @" r/ D: H* @3 o2 ]% Y* |0 Y& \7 C! ?& Q, {2 ^ }* u$ V
0 u, d" c& m- s! P- O' E4 j |
zan
|