数学建模社区-数学中国
标题:
通过泰勒级数展开绘制了正弦函数的逼近
[打印本页]
作者:
2744557306
时间:
2024-8-27 11:05
标题:
通过泰勒级数展开绘制了正弦函数的逼近
x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
0 k2 C5 C# h, A; E8 {( p! x! y
plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
1 ^ ?0 |9 a( s i! Q# h: D: U, x
for n=[8:2:16]
& {# z$ Y3 ]3 ]* O0 y* W U
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
9 \# _8 b8 C6 a$ Y& m9 \
end
- u# ~3 h" |$ n: s: r0 h% m
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
8 j9 m, m* u2 [% s2 }
~; [: l5 v- e5 k. p1 j3 l6 Z5 ]5 H
### 代码解释
, M* u- |3 |1 _, m: j/ i
2 W% Y. y8 v7 y9 `2 K" k
1. **定义 x 范围**:
) B& ]0 K) ^' ^( {- i P# S. z
```matlab
5 G0 U" A' l" d
x0 = -2*pi:0.01:2*pi;
( \, J8 ^! D" D
```
) l- z) ?7 j1 O& k( d( h4 A
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
' ?" p1 r$ K7 E' R
" i1 \2 F' ~3 n9 V A: x) s6 d
2. **计算 sin(x0)**:
$ Y7 J7 g2 z ~" g1 V7 e
```matlab
2 J1 R2 F: ^) Q" ]
y0 = sin(x0);
: _+ s5 D2 m; K. Z d2 @
```
/ m# D# w1 `" c( v
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
, g5 ] O* w% I
6 d9 q! ]) @9 `9 B9 c( ^
3. **定义符号变量和函数**:
# D% x9 l! i% B" t! \! C
```matlab
# k: i& |* a, l/ W e v
syms x;
& F0 S+ Q; _1 u0 y8 I5 Y
y = sin(x);
3 K4 X& x+ T8 P) H; l0 M
```
: z5 Y4 B3 N# m' z
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
$ m2 q5 @0 b3 D( W* _
, i8 y. l. _3 j: Z6 l$ K5 P& {0 @
4. **绘制 sin(x) 图形**:
I, l- t9 v: B+ Z& v. T: e
```matlab
, r! o7 S: c/ L; P; A
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
: j. ^) q0 z/ o m3 E) B7 u
```
# d7 e- B$ F1 F+ n3 O
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
* J# @% `% `4 |# G
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
3 J$ q9 [) y$ [/ e
- `hold on` 使得后续绘图不会覆盖当前的图形。
1 L9 x0 z% v0 ]
. r0 W' a0 M% Y W4 Y6 J- ~8 D
5. **进行泰勒级数展开和绘图**:
) M/ T) `7 H0 Q9 A4 Y: `7 Z0 a( N
```matlab
) i! W7 T: ]* E& k6 C* l, \
for n = [8:2:16]
" i4 z7 v; `( ^7 S
p = taylor(y, x, n);
9 t$ P, \2 h( W( k+ q
y1 = subs(p, x, x0);
% P$ r7 e8 B) h
line(x0, y1)
3 e* K C1 j7 f. | R( d" g7 h/ y
end
( |7 Q: n$ j. O) g, i5 j. J1 b
```
! s/ _( I8 s+ Y
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
! u1 j( H$ I! u0 [8 H
- 在循环内部:
2 \0 X( v. \/ O- ^ q, T6 [
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
9 S$ q) a3 X% J e: H
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
6 x9 Q4 x) M8 L3 q1 \
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
6 \5 C; O, x' j: l
6 M0 L$ [# X- n
### 效果
/ r+ ]" l8 f4 ?- g0 }' i" l
' V$ B2 s1 b9 z6 \( s
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
& v! j! l( p7 j" _
0 \8 x+ E. R# C4 ~( A9 |
### 知识点总结
; o9 Z0 ?* r8 c
% I: h; d; X0 _9 z5 x7 V, ?2 [* t/ ?
1. **泰勒级数**:
& O! W/ c; I& w6 }
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
! l; r" ]; ^1 J* I) Y2 _" A! P' `+ V- r
: f7 D* C# R6 `; d7 B" C/ R
2. **符号计算**:
9 A" e+ C" a( X+ Z
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
1 r3 q- H i/ k$ L9 t/ E o5 S0 [( e
. i. T/ J% e" _! `0 P
3. **绘图与数据可视化**:
! ]% M W0 g" p( n2 T
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
! R2 b0 y/ E3 ]4 Y' i0 N" \
( A" V# M. K9 G3 s s% M. X
4. **遍历与替换**:
0 Q: P5 s( H% o1 @3 r
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
+ U0 @- M2 U4 Y* d
% s+ U0 f( U2 |7 o
### 结论
5 m% J5 t, P1 L5 v) f( {" q: U
3 q, o- V6 ?- U% N) t4 J/ f
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
0 w% Y) \, n; d+ Q% @, }
! e: c' v! [) X7 ^: t0 `
; z9 y3 |/ X9 V
( q/ c* Q* u# S# v: J
" Z- j0 ~) J2 i9 z
examp3_18.m
2024-8-27 11:05 上传
点击文件名下载附件
下载积分: 体力 -2 点
211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5