- 在线时间
- 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 ]+ j! u3 ]! h. A\" a1 S - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on; C) c+ a/ L9 N
- for n=[8:2:16]4 X0 C0 }. W/ h# |* j( T
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)8 g7 a. \' @3 |8 s* Y
- end
7 ^! \! B. l! n/ v& Z -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:! y. O; p! E+ e. Y* ~! y: {0 U, \ C
4 |& L: V. t! L* i( `8 o
### 代码解释6 l, f' q% g& b+ b
$ X I" ~; I, K9 ]/ z2 h$ N9 Y+ A% p
1. **定义 x 范围**:
; S/ ?$ [' M% S ```matlab
# U% S7 P# E: w, S8 p x0 = -2*pi:0.01:2*pi;
& {" a' a& d& {2 [ ```
1 j" U* R# j! v1 X - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
! H7 K1 W$ B7 V0 Q4 @
8 Z2 z$ v! ?: a$ e, F9 I2. **计算 sin(x0)**:
% f! W/ v. M5 d- x3 M4 _3 f ```matlab4 B, P% G2 U4 t: s4 d# O) h6 I
y0 = sin(x0);0 X& ~9 n% @2 c0 a# F# `; n
```
% C* E: u, k" v8 V" ~5 r - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。 f; e1 _: u8 D% V" F$ e/ K- v n
( q, j# U" m J h8 i9 {3. **定义符号变量和函数**:
" z! i% _% O* N2 u1 Y; O3 A ```matlab0 t4 D7 V7 W$ b9 @0 o7 R- p
syms x;! c* F f- |4 `( |. R5 z
y = sin(x);
! \" _& W* A5 { g8 m ```! j& p# F, V+ z; }6 I+ K% e1 u
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
9 J5 D/ ^3 ~6 q5 Y6 Z+ C, z
, X& c$ S* q: J( K, w. f' V3 C: U' N4. **绘制 sin(x) 图形**:
) C3 j9 U7 k4 P5 v( C; U; m. g ```matlab+ O. o- Y k; b% }5 b4 {7 ~
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on: g7 P; g3 C- A
```. W! H- M# _, m5 F9 c E/ Y9 f
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。5 H% I% K7 D2 A+ |4 s9 x
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。: \# C! w7 q$ ^5 r" y) y
- `hold on` 使得后续绘图不会覆盖当前的图形。% ?. [" l3 V1 O
9 H; ~. c+ m( t! u) d1 G
5. **进行泰勒级数展开和绘图**:
0 q( A0 R' J3 V8 ^7 V* j: e ```matlab
7 Q9 j4 ^9 j" ~# `& U; `, ` for n = [8:2:16]3 h, J1 T: L6 R0 r9 b% ~, c% i- N! I# q
p = taylor(y, x, n);
$ { x+ C. I( L! z) H a y1 = subs(p, x, x0);
" c# b+ N$ b8 N4 ] H/ P# F line(x0, y1); g2 s! b. d/ G# K: }2 A+ C2 Z) ?
end6 p2 l$ L& d2 A3 O' o; Q/ G7 b
```
! C$ {, U* g( C- X$ A/ V/ O! u - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。9 ?8 e. Y6 k4 C$ i
- 在循环内部:
7 w( r) `5 r. l( [ - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
: L$ U. Q, k8 y9 Q A" v - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
0 W2 j$ e% Y4 R - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。; D: }) Z2 R/ j* N A$ k, ?
& l- c/ D# ^) N$ Z: h! j### 效果
7 B9 V. E u: ^4 t, V- C: ^0 k/ h7 z2 \
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。6 A, O# J$ j' L
& N# N) T; H) O9 C# U7 u### 知识点总结( k0 T# B- P+ k' f) A7 V' b% X. [, I
3 v+ x2 Y8 N4 c. U1. **泰勒级数**:1 T" ~# D! u2 ^$ z/ O
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
7 w+ b* x4 w% }5 L4 N9 D
3 Z# j+ r/ k+ x: _* J2. **符号计算**:: S$ r! y: I; v) Z
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。6 \8 Y' K$ ?' M5 b0 B
* Q3 K( [3 L( r& U' z: n3. **绘图与数据可视化**:& t; h1 ]' q1 U
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。. J6 N9 M; |& r$ r" g1 \
; W7 {. W7 T! P4 d
4. **遍历与替换**:: a: H' h( ^+ k N$ Q7 O
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。; l5 a% _. R$ G
1 M4 X. \$ d9 r, A: h- V- x
### 结论
: a6 ]( _9 { Q7 s8 T0 u3 s1 v, R& n! B, y6 @* w
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
/ x: `: Z4 [7 e' r- s% I, h- x6 f% a; n' Q+ v
, _! j% I4 w, g! k' C
* _% J: w% z! F7 i
7 u# B5 ^, j' U! x4 i9 G
|
zan
|