- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7953 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2978
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);4 |; Y2 F7 q& x1 f
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
- W6 z( ^: A1 { - for n=[8:2:16]
& L/ k1 U% y# q. @/ o - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
! X' O; O. E5 i2 [ - end( `; N* S/ \1 q9 b0 P P! g4 j* I
-
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:5 \3 _( R/ ]: A1 b! S7 D. V
5 I+ N0 S- Z5 i
### 代码解释! n3 K- V6 ?# @4 P7 g; W
- U, ]" n7 @6 g- k1. **定义 x 范围**:: w8 e/ P( v$ `7 f6 I& f
```matlab
" g/ W5 h8 Q h8 @& p5 ^ N" g x0 = -2*pi:0.01:2*pi;' ~/ A3 {( N2 A
```; `/ z/ F1 Y9 t# s
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。. r6 H7 I4 I6 x2 ^1 O" C
: d% p! x+ n0 f# D2 Z2 M
2. **计算 sin(x0)**:
f* b8 s4 ^4 d6 z ```matlab+ x. ?5 J/ W- T" L+ Y+ |
y0 = sin(x0);( X* i9 r* B% C/ B4 h3 K, F
```
/ x J9 U2 X% [+ L9 X. Y - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
$ i: X/ M4 z y7 k/ X8 n: _: x
$ | b2 R7 X: ~. L4 t3. **定义符号变量和函数**:
5 N9 n& k0 F0 M' Q8 i ```matlab B4 T ]* [9 d* n8 b# ?0 d5 x
syms x;6 S$ L1 ^2 l3 f( A9 ^
y = sin(x);1 z) f u2 u2 j2 Y( |
```
- K' \2 J d" j0 U& A - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
7 W( u4 ]! V# i/ n+ z3 ^# i! O( P5 i' `$ e6 M+ V3 K/ K
4. **绘制 sin(x) 图形**:
1 x- A! W5 [1 a4 h- M$ y$ b ```matlab) O. _; G, K. T1 Z6 i& f# K0 z. U
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on# z1 @* N& s7 g# G/ M1 s, e' e. H- {
```
5 T o% L2 H1 \0 J - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
# ?3 L/ N/ m$ y4 \4 E# l: l - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。7 t' b4 a5 {0 j$ k+ r5 F! {
- `hold on` 使得后续绘图不会覆盖当前的图形。) k4 E) {3 H) Y1 Y) m
9 g: Q. A8 u: Q/ g6 g3 U0 k* C
5. **进行泰勒级数展开和绘图**:
, `1 k- P1 y1 z- t% c% G ```matlab
" Z {. h& H+ o: T2 `5 N B for n = [8:2:16]7 ]) |/ e( Y' j
p = taylor(y, x, n);$ H4 a" ?! l+ ?+ j$ ~7 s
y1 = subs(p, x, x0);
4 R# B) z, u9 U' h$ u% S5 V line(x0, y1). Y: N, W8 Q$ x, y1 ~8 C
end
7 e: Q: q4 Q7 |* _, R! f ```% U; M+ ~8 n# K( @
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
2 Q0 S( S6 D5 f - 在循环内部:, V. t8 O/ ~2 w$ q. m: f! e
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
: ^. n( C: U/ {( Z, s- a - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。. Q& d8 F. c/ X) m
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。# h! S8 x" y- y7 r# X- K
+ ^" Y E2 n5 `8 I e
### 效果
3 {9 e, \7 x$ v. @7 A$ e9 g; {+ ?! \" r2 y9 ~) o1 t J$ J
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。2 k! f, Y4 t- g/ e
* T4 D: ]- ^4 n9 Z( c4 [! t3 o5 i$ ^### 知识点总结6 B1 W3 Z/ o7 q: c- U
' H1 @* d1 t$ P* J$ U' _
1. **泰勒级数**:
3 b5 {* |2 }: U; \( E" e - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
% B& o. I. n6 P
# V- J9 A$ H/ a! }8 n1 ?/ ]3 Q! X4 N2. **符号计算**:
* @* a$ `" V0 ~4 Q+ \6 ` - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
( @- ]7 d. y6 y/ u# s. w
" |# y3 A5 A( M% H3. **绘图与数据可视化**:& T) ?; B: J1 m A
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。! L0 K2 E& j0 I( [" X
: E8 z5 @- v, U6 G+ U$ ?# J4. **遍历与替换**:
' y; x1 X) \7 S/ _ - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
- F2 B& i, @7 _5 T( ?
8 C2 h) b$ s$ i6 J% ?### 结论
1 [! ^9 d1 C. F+ B
, ^ n, u6 n3 Y" f) y这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。6 D4 C2 ]0 {" f% q5 R c! W ~
3 f! a d* P/ o* H9 f6 w8 j, I; R, G+ c ^1 S9 {% {
9 S `: _) z$ @1 Z q D) M5 a; ^7 c- _ N" j7 Q. K
|
zan
|