数学建模社区-数学中国
标题:
通过泰勒级数展开绘制了正弦函数的逼近
[打印本页]
作者:
2744557306
时间:
2024-8-27 11:05
标题:
通过泰勒级数展开绘制了正弦函数的逼近
x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
7 \3 W1 A" o0 z. J7 A
plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
/ m8 S, P3 o3 L) J3 k
for n=[8:2:16]
" a9 i! U+ L5 x# b* J
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
8 C, q) P' K! V) i- n a
end
6 T: @# r- c; S7 N9 u
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
" n! Y* ^5 `. q w" M
# w. z4 H* {1 d, l4 P, N( `9 I" ]
### 代码解释
# J8 s9 d& U' t& Z8 x2 X! D/ N
( H7 H" t( E; V& I* U7 `
1. **定义 x 范围**:
( n& [4 N9 d+ H; |; s% C5 \2 E
```matlab
3 _; ]; C% W4 Z1 F" h, i
x0 = -2*pi:0.01:2*pi;
% ^5 R; `( s z7 L. o. y) [
```
: h& s8 M$ @' h2 B% P
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
1 _; a4 m+ ?6 l' `6 Z( t
8 K& W6 r; W7 E% o b% w, e! v
2. **计算 sin(x0)**:
" ~- h& s$ K% f' \# S2 \" P4 L1 C" }
```matlab
& m% G9 g$ O6 |- o- g
y0 = sin(x0);
9 w8 \5 g# N2 e+ C
```
. q8 `0 N9 T! g, W+ D" f
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
$ z' X! I6 z' H, x( i1 }
" Q! B0 O) { o; U; U. i
3. **定义符号变量和函数**:
, ]( B, j% { K5 _/ ]6 U$ r
```matlab
; @7 l0 I# ^1 i/ H4 K
syms x;
# p4 B9 a8 R0 E9 z! H ^0 a @/ H
y = sin(x);
% ^8 e( [6 p$ f) L! W
```
1 e) V& _5 R0 @4 I
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
# H2 K# K- D6 I, X% e) v
9 G1 b! ?8 j& o
4. **绘制 sin(x) 图形**:
e& E! P1 L1 l2 w- X+ M) `+ V6 |$ H
```matlab
2 X W; ]6 A" p" u; }( F
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
# V! P% p; R6 j! B9 A; j
```
8 z$ [1 a6 T2 H
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
0 }4 ~/ }* |' A' o5 J
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
" n! d0 C9 ^% e* g( q- E
- `hold on` 使得后续绘图不会覆盖当前的图形。
/ k# d/ r+ m8 O0 a
- `" y/ N) w6 A
5. **进行泰勒级数展开和绘图**:
8 b. O: {% E$ h8 t& {9 l3 O+ c( g
```matlab
$ m4 ~- H7 [* ~) \
for n = [8:2:16]
9 u' F) n5 ^9 L b& i& J
p = taylor(y, x, n);
v- H3 Y; V% |7 [
y1 = subs(p, x, x0);
* y" n1 H1 V+ C2 V/ v& q
line(x0, y1)
7 L' U( M% f- g; g
end
" z9 z; q" \' c) K2 ]
```
8 o8 t; x. A$ \* {# x( U: l
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
' c& ~+ i: K0 I, i
- 在循环内部:
- }& }: Z3 i' b" c, i; T
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
H; U5 c7 O4 I0 z8 f. G
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
/ @# ~; L4 {' n& Y1 r. y
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
2 h: {. @& z* B
8 D T, p2 L4 X) o
### 效果
; M2 a2 m$ t" L2 U; e
9 d( L1 I. d1 U! U% a* F
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
4 R5 G0 F7 y% I! o' ~9 F
: o) |; x6 E4 ?7 f
### 知识点总结
4 P! O a! I$ Q* j: c/ R
: B y+ S5 n) }+ [+ ?: W
1. **泰勒级数**:
% J. _$ l+ v/ E# L4 S
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
1 @! U6 T" l$ U
8 I4 Y2 `- e" ^ _ [1 m
2. **符号计算**:
# L0 |+ Y7 H) e0 F
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
6 s+ J& U0 F3 y) p4 ]' p/ r
: D0 ]5 v# S8 U! b* [7 o7 ?7 b5 Q
3. **绘图与数据可视化**:
$ ^/ X U5 c4 i* [1 V
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
+ L) Z+ I5 i" }: x: I3 n
: g& L1 a' y# ~
4. **遍历与替换**:
# j* Z9 X, O2 ^3 I+ }, b1 Z+ d7 Z
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
8 D- I, N& y3 E+ J
5 x# t; L( Z; L9 s% G2 o/ i3 X
### 结论
4 j- A1 o1 S3 Y" R C" h
6 X2 P! T. l& z4 R6 @; J
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
4 L% x# R+ b8 k5 c; T+ a$ e" T
# k/ A. Z2 t8 t$ _- }0 ^/ Z
6 C; |' m$ G) R0 X# k- W" M
! \' t4 p y1 d& J* L$ Q& r% G
& D& l5 Y: T4 C5 D" }4 d3 S) w
examp3_18.m
2024-8-27 11:05 上传
点击文件名下载附件
下载积分: 体力 -2 点
211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5