数学建模社区-数学中国
标题:
通过泰勒级数展开绘制了正弦函数的逼近
[打印本页]
作者:
2744557306
时间:
2024-8-27 11:05
标题:
通过泰勒级数展开绘制了正弦函数的逼近
x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
, E4 N' b# B2 E1 j/ T# V) q1 K
plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
* Y) Z( b X. d0 `4 I% b
for n=[8:2:16]
& l+ `7 g( Q/ x. o
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
9 c5 E+ g( X$ Y% @
end
( v- ]7 L6 u; S% u+ u' k2 l! G- X
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
! S! l0 x. x5 _1 C
% V/ [( l- H/ i$ I8 z) P
### 代码解释
& n9 O0 q7 j: _
+ z7 R% N9 w" ^5 _8 T
1. **定义 x 范围**:
0 T) a# q6 F7 c) g3 _. o
```matlab
3 o. _4 m( m; u( L" R1 L( |
x0 = -2*pi:0.01:2*pi;
6 s3 l5 q' v% c0 y% J: ?" m
```
2 E# q" }2 \9 c1 b$ k/ W; y3 U: w. H0 C
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
) _6 R1 H4 H' o% r: L/ P# b- h
* p" X9 D6 O; P2 |
2. **计算 sin(x0)**:
% W2 I' o; [' w0 _+ c
```matlab
* b7 D5 A! E, N" z& F
y0 = sin(x0);
3 j; P- U+ ?. C1 Q4 n; `
```
4 n; ~, a$ p1 q1 p8 _3 p
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
. C) C) u& a( d/ b3 }; s
; G: O5 j. V, D+ B5 L
3. **定义符号变量和函数**:
, @5 v0 h/ P; h
```matlab
/ ~2 r; m* f* W9 ~
syms x;
# k) j# ?2 o5 r ^1 t8 Z. f1 L/ X
y = sin(x);
2 U& Q3 n# Y0 W2 z4 l4 b: i8 J9 v
```
2 H0 Q( g1 T; v$ V/ o
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
# w' |' {+ r0 o& H+ u% G$ O0 k
: C! |7 Q. m4 z! e
4. **绘制 sin(x) 图形**:
+ K0 K( k1 L1 i1 A0 N/ J( b
```matlab
7 [5 _' `3 C: t% W# T
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
! }8 Z: M2 {: L6 b; S
```
{9 b+ ~9 ?" N3 H
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
; P# k% B+ P/ n) Q
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
5 R" Q; ?( s: U9 Y# S) W
- `hold on` 使得后续绘图不会覆盖当前的图形。
- _/ j& |! G5 v! f4 }5 |! D1 Q7 P
8 C) }7 s# P) t( `
5. **进行泰勒级数展开和绘图**:
- {, K7 q1 \) S9 ~3 d
```matlab
$ x) x+ z, K2 F+ H- G7 Q; {
for n = [8:2:16]
# f9 K4 l. @8 J& f+ J5 ~5 T9 |6 h
p = taylor(y, x, n);
/ `9 X) k% S! Y4 o
y1 = subs(p, x, x0);
* H% w( a! T5 x Z8 m! K- j% ]& Z% x
line(x0, y1)
' m; d _5 h6 J5 s/ n% [$ l
end
- g1 v+ r- }5 c1 M, ~6 |6 o
```
5 G) R% d S6 `
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
& o* ] H0 g; W4 \; c( u) C
- 在循环内部:
1 o, F- P( \% u! D) Q0 q
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
% E/ l, \) X! b0 `# x! a
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
/ m2 L4 f6 I- n& J; v2 n& c
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
. P) r2 I, h# e
- T/ c u8 ?9 ?, T& y/ Y$ N( M% J
### 效果
( I: [' t4 K: G" x1 v: `. R& u7 T0 R
+ i( a* |% c6 j, ~
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
% v+ N, L& c6 K; ^
3 Z' m0 C. v7 ~' o5 X
### 知识点总结
" ~# R" `' @1 |
) W: ~* v. Z) ~( w! ~* C6 E
1. **泰勒级数**:
1 v; [! q8 v5 }* X
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
9 |+ e* t9 \7 S( j8 W9 e
3 e0 i5 F* q1 G4 d9 O. o7 C
2. **符号计算**:
0 U# m% P1 q+ J
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
) M6 |# Q3 ^; J, C0 D+ [) T
, T/ j" z/ n2 c: \3 l
3. **绘图与数据可视化**:
* ?3 v* c1 l! N; G3 W- x- ] D, L
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
" }- x/ ~& B2 x: b" a m
0 x" k# \; F! G
4. **遍历与替换**:
) z' u! D9 i+ D7 B/ a
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
! h; @- A" b% o4 Y! x
# {. u* ^$ o1 I: k6 Q+ h
### 结论
% r! R& `1 }3 y5 p: Q* J
( p4 D8 E0 x% H' `3 z9 v. q Q
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
$ z2 o- V0 A, i }/ z& E
; M _$ K3 o0 ]6 `7 x1 J
, \. V5 L7 Y) U
# d! \6 O/ r+ I O
; B8 Q0 }6 y8 k T2 H) Y
examp3_18.m
2024-8-27 11:05 上传
点击文件名下载附件
下载积分: 体力 -2 点
211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5