- 在线时间
- 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);+ B) Q, N2 u3 J, d- c# |
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
% T! Z: C# y {1 w& V - for n=[8:2:16]' m3 I1 f( [; j
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
7 U7 u2 Q5 q/ U/ U5 ? - end
9 Q/ @! t2 {5 n4 b4 O& ` -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:: I% n5 @5 b5 A% j1 `7 n7 @3 f# H
) H& j6 ?( ]# d3 `. Z. y
### 代码解释
" V1 u. k1 y/ \5 ^( G" D6 c. Z1 E& O
1. **定义 x 范围**:
1 f9 R- P* k% _ k: M } ```matlab) v0 _: S% u, p1 \7 x" T
x0 = -2*pi:0.01:2*pi;) w* {" `9 ^8 E7 s+ n) w
```
2 Z8 O8 l* z/ s' B. B - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
7 j6 E$ a6 a$ R( L$ R' h% H. X. J/ L6 O, M0 t4 e
2. **计算 sin(x0)**:5 c6 S% o6 I9 o5 Q( L& j
```matlab
) t: H. H _& ~ y0 = sin(x0);
1 M4 z2 I+ C1 T1 _% n! D ```- f; q+ ~: T8 o' ?1 T
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
- X" Z( A8 \1 a0 ?0 T6 _% M, r) i: M) _# d! Q( i
3. **定义符号变量和函数**:
$ D+ G7 G, k) f. V ```matlab
0 u4 g/ Q& M: `2 A8 Z syms x;
1 G s( `8 S. q! i y = sin(x);1 J% X0 c5 g: b0 E2 a0 _
```4 b# ^5 p4 L& W" H9 Y" G- w
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
: k+ U2 T5 J6 y6 M3 J( b; \+ q \7 q6 c
4. **绘制 sin(x) 图形**:
1 j1 }, F0 n- ^ o0 n2 @ ```matlab
' z" n( j( ^3 P0 n# c' y2 R& ] plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
4 B, y2 ]5 X/ T, t" }! H ```9 X- M* L3 ^( H) X
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
/ A8 A/ {( D' @5 V) U. E - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。. ^0 u* ?; M" ~4 A
- `hold on` 使得后续绘图不会覆盖当前的图形。
* u3 ?7 u3 M- {! T
) u8 K: b2 H3 S5. **进行泰勒级数展开和绘图**:+ _! R$ f) u6 T ?* I
```matlab
4 b M8 ^/ R1 I1 X! t for n = [8:2:16]7 W' |! _8 s: x+ ^+ }
p = taylor(y, x, n);* \+ m, H8 D& F' @% `+ x
y1 = subs(p, x, x0);
5 S5 A6 P+ L8 E6 R line(x0, y1)
* T( i! e: x6 I& e/ U end% _" _8 `1 [3 x# A$ e" e( X/ ^
```$ [# B2 a, ~# s
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。3 z9 u" V( [7 Q7 m4 O$ J
- 在循环内部:
3 ]; P( T" s( D7 s% g M - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。+ {, {. F& Q( r" l0 y0 G3 E: y
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。% O$ N$ @! @& m8 E$ a4 @( ~
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
, c3 [8 I7 T$ H$ J% l+ {6 n; c. Z8 w: L4 `- g
### 效果3 k/ g+ }! e+ a3 k. o2 ?' W
" ^0 Q* n( r! ?1 G- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。$ M- U. x9 f' z) t% s
% b1 G) |& j# r4 a### 知识点总结2 W+ v/ A$ ?" f8 O3 f( X2 N
7 f6 \. S8 C# B J$ h4 e9 {0 g" r
1. **泰勒级数**:
8 w6 v! s. M+ F" Z o$ G" I - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
$ _* u) s7 ?8 ~0 P2 f# _! }
; i, @2 ~& z* Q1 Z; R, @4 n% V* q2. **符号计算**:
( [8 ~4 b. U2 O4 K" G - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。6 z" F3 ~! |: N% h
" E! V. o; {0 p. W6 h
3. **绘图与数据可视化**:
; h; _1 Z# F. D* H8 J3 E2 |! I - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
& ?2 W* G9 X& o; T( }
. J* B: H% F/ O8 L2 m6 m F7 Z4. **遍历与替换**:/ q/ y- j+ s8 u; s8 M
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。6 F/ [3 m/ ~ p* \6 m
/ t# o5 _- N7 p/ ?5 q### 结论
+ x, D- Y9 j. A8 G& K+ G2 l! Y' V! x9 F5 F! A, b' N {# T
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。7 `0 G' t/ L5 w1 f( {4 b
( [/ c+ o( ?. t( p. r5 @
; s1 T* t9 N' {, Z3 L: e
4 o# o& h6 T4 Q) l0 f0 N7 C$ ?% T5 O/ }; s( } M
|
zan
|