- 在线时间
- 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);% P- J+ Q0 y/ H* g; o# G
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on5 Q- q. ^6 ]& { {2 n) {2 t\" A% M
- for n=[8:2:16]
& F4 }% a, k8 Q0 E( J, m( R\" p+ E! J - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)4 Y4 Q) g$ L ^( m5 v
- end
3 R5 k( F3 `7 m2 G; T3 e0 P$ H -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:, @2 Q, _4 d( n
7 X+ ]! b; Q4 z# X' C) K2 I* W### 代码解释5 U) U: u6 z8 B! _7 n
m) p8 u$ M1 p h- V+ d1. **定义 x 范围**:# Q4 W9 Q2 S) m8 W
```matlab# b! ^+ q( S( J/ `3 T1 D4 G
x0 = -2*pi:0.01:2*pi;
5 K) z9 Q% L1 g5 c, e4 m ```; ~6 `* F n' R' g. O( F$ o
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
6 B# b6 Q0 B& C1 @
4 U# I7 G) y- u8 ?/ `2. **计算 sin(x0)**:: b8 r! j$ E7 c% H$ l3 n- \+ }
```matlab
$ W* z( {% s8 ?2 n y0 = sin(x0);
% e9 _' X1 t8 T; ~* R ```
7 y' _# [3 ]: O+ ^ - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
# e. Y: `! t" h* V& U w
, _& H a$ F! |% f3. **定义符号变量和函数**:
& `, H) q" k9 k8 ~' f ```matlab
/ J5 k; D" c' E+ Q( X% j! Z syms x;
+ Y: E1 W2 a3 c+ Q y = sin(x); ?" D3 i5 b8 |6 e
```
x% S& D4 e$ g) U: o - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
* I! {$ y% i4 ?; i! {8 [8 G% C3 f _* F4 e. l4 o q% X8 w
4. **绘制 sin(x) 图形**:
# |& I( _9 ^9 h7 |& k! m1 Y ```matlab/ Z+ b2 a z! K5 h2 ~
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
. v! u3 l* D6 @: x y1 b ```, W: E& d# S% X1 G
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
4 j1 N1 Z( c% v5 b6 y - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。6 C [' W4 w& z1 A, v; j
- `hold on` 使得后续绘图不会覆盖当前的图形。
) ~% N8 {$ b- p3 n% ]: T0 H1 |8 n9 m* q3 x5 o- k
5. **进行泰勒级数展开和绘图**:
1 p& W" }) e: S ```matlab
3 _$ z( O1 M2 i9 W5 u6 n0 U for n = [8:2:16]
: [; }: F5 O2 H3 \# @ p = taylor(y, x, n);! [! Q! _6 c, j# {! R, _
y1 = subs(p, x, x0);( T; J9 P% p/ W/ Q& _
line(x0, y1)% d+ d8 P* {$ |% a2 N- N
end! G# m3 Y2 Y+ H( I+ Z0 `
```. @9 Q5 ?% X! S% ^& m
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。4 N/ O7 Z" Q) X" `" a
- 在循环内部:
* O2 n0 o' G6 U - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
4 ^& K, l/ C( A1 C/ T5 a6 k& z - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
& Q& E: H, f3 _" v; P; z- i - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
/ e) ?# L$ `/ e9 U2 o& V$ T1 J
% j6 @2 T) P' p2 I( u### 效果/ Z3 F8 m, P4 r; R' Z7 m
9 \6 h' N; P. G% |* `; k- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。+ o ?0 J3 V% K. ^
6 P+ V5 l$ n" S" y6 a$ o### 知识点总结
9 Q7 ~0 K- m2 e& M
3 W: Y2 t4 X6 J- r1. **泰勒级数**:
o. x9 p; X, {. B( R# Z8 S+ s - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
% b" s, {6 `$ y P# B- C
9 ]6 k2 B5 ]0 j: p; K2. **符号计算**:
/ K0 J" v* |4 X+ q& K! J( O: u+ R" ` - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
- M! Z5 i: v+ m2 j8 K: D6 [( r% \; w. y
3. **绘图与数据可视化**:
. e* z1 q4 k1 \" ]* O - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。! N ]3 d G3 B" q0 b+ Z
. N6 n% [% n7 E8 @% N4. **遍历与替换**:/ m$ I b% s' q" n
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
) X5 \& D% C2 \; a9 e" `0 K; l _ C6 |' A2 ^) o* g
### 结论
! E" Z: A O; x4 ]8 L, U' W! {; a) [5 `! l
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
' O$ a/ A- q$ O/ i
7 C5 X- K1 ?6 b# Y2 ^) w( m; O, H
/ y4 [# m" M. W6 c
6 l A3 Z( r6 t" G4 Y
|
zan
|