数学建模社区-数学中国
标题:
通过泰勒级数展开绘制了正弦函数的逼近
[打印本页]
作者:
2744557306
时间:
2024-8-27 11:05
标题:
通过泰勒级数展开绘制了正弦函数的逼近
x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
& X8 D9 C. n, y5 h: F9 s
plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
' K" |% s1 r2 A- O7 v8 W
for n=[8:2:16]
- F+ y1 T( i l# T$ e
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
$ G, C. K7 [$ U2 E) B5 j
end
% D" q9 `0 u; ?% r
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
, k7 \. v7 U9 g1 A- g8 t- {. @
, ^% H$ m6 l! G# N
### 代码解释
3 h% H& ] T7 c
8 f# V5 V2 _2 d5 V
1. **定义 x 范围**:
% _0 c/ V& t- ^3 D. |
```matlab
4 o; m8 i* T0 U
x0 = -2*pi:0.01:2*pi;
8 m! l: i2 G) }4 {
```
0 C4 l/ G. W. K+ @
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
% E2 S+ V0 ~' ~" E
$ c" s O4 \- {9 i2 h+ ]. x
2. **计算 sin(x0)**:
3 u2 g6 i: P4 G5 D% r- v
```matlab
2 T" C* R* O. o+ N5 S
y0 = sin(x0);
1 f* e! f" H5 ?' O9 X4 A6 [4 R
```
$ m& G. y$ s2 d' Q
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
& Z( F6 y9 }: n9 h7 n6 |; M
; l S% C; [! Z; ?
3. **定义符号变量和函数**:
- k3 |1 W; S8 v- A2 X$ E
```matlab
5 E/ b _5 i5 l* c$ u2 p
syms x;
5 @) z3 g& X* x
y = sin(x);
3 l3 P2 c R) ?
```
; K- l- c. S8 I4 f- X9 k" v) z
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
0 r; E' u7 `2 z, W. t( X
0 Q* Q7 {9 g# S- H% Y5 t/ U; n. x
4. **绘制 sin(x) 图形**:
5 {4 ]( h# f% d$ n9 Z
```matlab
! v8 e' I2 Z K! G; e. i
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
' G0 K6 {6 {; ~
```
. n: s" ?1 Q2 T2 ^# c
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
# Q" }/ i- \9 a) i
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
6 R6 G) ~' ^! _: P( k0 r8 n& s* W
- `hold on` 使得后续绘图不会覆盖当前的图形。
/ U2 R) B# z% x" K
+ U4 k* R& f( r2 J4 Y7 V
5. **进行泰勒级数展开和绘图**:
: ]; I! E/ m. c1 Y# L
```matlab
2 }% B6 N2 W9 W2 ]' N; r9 t
for n = [8:2:16]
% P/ N; V& m+ B( |# p! v8 x
p = taylor(y, x, n);
# {3 K& W* ^1 U+ @
y1 = subs(p, x, x0);
1 e) O; X$ m7 [$ y% b
line(x0, y1)
# G5 R3 \ ]9 J* t
end
X% e6 P7 |. t y* m
```
8 {) B. e: m; O5 l
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
/ x X7 G' s8 C7 V" e8 H
- 在循环内部:
$ f* L* @* R- f- t
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
1 B% T/ w) `# I
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
+ z6 e' @, ^ o
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
' S+ r/ l- C6 \% F
0 n) [& `. @! B7 b! I9 d
### 效果
" p+ d$ T: k1 m7 F/ w8 \7 ^: a# j# I
+ |# K6 T2 O6 `: D' r0 N" \
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
+ I; ?* U9 Q% l- y
1 x* P' z7 T$ t2 `
### 知识点总结
: j8 w) R" s7 j( z
9 Y( `& z8 p7 n" C% @! e
1. **泰勒级数**:
# U- V9 m2 i; ^# D
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
( g" Q$ e1 {& W; L% D
9 Q& q: e0 _. H2 z0 G( y! h; J/ Y9 c+ ~
2. **符号计算**:
6 T) }' z* s" W+ N
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
* l0 ]/ j% m. ^. Y0 M: c% j
7 z+ ]8 d# D- q
3. **绘图与数据可视化**:
- e2 R2 V8 Y* q- Q% T( f8 s
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
+ j+ [9 V+ W& r( g1 Q
t7 i4 k% V5 S6 V: B+ {
4. **遍历与替换**:
! f, F% H, n7 r/ X' H \. j9 i8 K
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
+ |" T8 s" @( G t8 n9 K
4 c2 U, }) V) |0 E
### 结论
4 C4 b! L$ I! d, M7 L2 w( R
0 D e! g7 p- g* o; \% |
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
7 @6 \& T1 [3 ~$ S0 t7 p
% g5 x) e0 L( P4 C) J- e! G
" p4 C) x# a. j
+ O! ]( Y2 d' [# t
- b+ Y: L3 g! u3 ]
examp3_18.m
2024-8-27 11:05 上传
点击文件名下载附件
下载积分: 体力 -2 点
211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5