数学建模社区-数学中国
标题:
通过泰勒级数展开绘制了正弦函数的逼近
[打印本页]
作者:
2744557306
时间:
2024-8-27 11:05
标题:
通过泰勒级数展开绘制了正弦函数的逼近
x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
- U7 k, K9 M6 F6 @
plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
- {6 p; A* [0 p
for n=[8:2:16]
# O; }0 g I7 ~' |9 C. i" {
p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
7 `/ E6 J# f/ g" w9 I( u
end
- S$ Y; \% G% s
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
6 T f. S6 a* I8 W: | a* \
~. P/ c: ^* W5 H8 K
### 代码解释
, d& g" z: K& W) G9 j
5 F t# [9 D' H0 y
1. **定义 x 范围**:
# F( f4 ^7 d& n0 V4 U
```matlab
0 V6 ~# k' U8 |9 C: I8 t
x0 = -2*pi:0.01:2*pi;
; c9 d" V, V, m9 x( g {
```
' [" g# D. _* F
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
2 Q# y8 W: `# O" h# C$ w/ D
- q1 S+ E. S- M2 J$ L1 r
2. **计算 sin(x0)**:
" J3 \7 [. u# h. C( r
```matlab
5 w: P3 \6 P: X
y0 = sin(x0);
9 G7 q. b. s, k% b' [0 m
```
7 }- e5 p) |* i0 \; J
- 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
' z, n/ u4 w3 p: g2 B- |9 P
' R) z; P' V6 _5 j
3. **定义符号变量和函数**:
# T/ Q: }0 {" X1 D6 U
```matlab
H, }* Q# c- `2 t! N. h( D. E
syms x;
7 i1 w9 |: n- C) G
y = sin(x);
/ b( h& G) C* f& b+ O
```
* ?6 U% a9 I* {# F- X4 I3 {( m2 c& W$ h( \
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
% y' V( ~$ S7 o7 t6 m( A( p
$ \+ R% I) ?$ M/ o: F; @/ T8 e% ~
4. **绘制 sin(x) 图形**:
. @. A9 G- g! _. f, C2 V- ?
```matlab
% M$ G% ]" u9 R# }9 M3 T
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
6 r( F3 F8 U2 j# x. ~4 l
```
+ V' Y2 x# W) B: v( ^4 ?, p9 p
- 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
( G/ C# n, `* m* J, @" l7 H
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
5 Z0 C" G! [0 Z' s5 R
- `hold on` 使得后续绘图不会覆盖当前的图形。
. i& f" ~8 ^4 ]. {
% E+ c* z) a6 V5 w% c
5. **进行泰勒级数展开和绘图**:
9 x4 D' V6 q+ Q- K) t y
```matlab
6 _8 ~: J7 H# w4 \4 k- A
for n = [8:2:16]
3 p; w0 F$ D* A0 a5 `
p = taylor(y, x, n);
" j) S+ l+ ~/ k) m8 x! y
y1 = subs(p, x, x0);
9 P& `0 f# H! d$ @& V+ g3 a( c/ B1 b
line(x0, y1)
0 x u' j I( d& j7 V- v5 ], i
end
3 \4 A* o E( R
```
2 o4 p4 F' E1 N8 u* g
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
: Y, _( L! b; d& A7 N
- 在循环内部:
- G. @" @! T% m- u5 A2 f3 T
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
$ k0 I! E5 k* l
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
. G& H4 l% M6 i% j0 D7 t* J% Q
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
( S5 ]& T: Y6 V/ e5 n
7 b& g# y# H/ ^) M( j) k# H' v
### 效果
$ b7 v5 g" ^$ k. Q
% d1 U4 C; ^/ j! o4 Z( {
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
. K) L- ^$ Z8 F6 d7 s; C
- s ^! B! s6 A5 d3 p1 W
### 知识点总结
0 b# y. N2 B) U! Z
: d: v; Y6 ~7 {3 H: A) o
1. **泰勒级数**:
7 @9 x( z% `& p( b: u3 L' U
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
9 M( W" V- \) A6 k6 r
1 V3 o, k; C" G7 }$ e
2. **符号计算**:
, ]; ]8 B, I6 l) k* K3 F
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
" u, p$ O" B, r( f, g e, q$ M
/ V9 `: q J5 Q2 m9 S8 t+ q
3. **绘图与数据可视化**:
( W3 o6 X. T6 i# j! o& P
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。
6 H- Y F: b$ G% O5 e/ |, T
! Q# I8 W: U, J
4. **遍历与替换**:
0 t; d4 _* M5 V
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
; W3 q4 o: y: Q
" m ]7 d a" o7 c
### 结论
S! k5 Z' T+ V) w$ ~# {. c
+ r3 B+ e/ w* \6 ~
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
7 G. g8 f" s9 P E
2 n' ~; u6 |, r) {
8 L3 S# o" W1 ^
6 z' {9 G4 n& F, U- ]" |
# m; r5 _, z. m
examp3_18.m
2024-8-27 11:05 上传
点击文件名下载附件
下载积分: 体力 -2 点
211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5