数学建模社区-数学中国

标题: 通过泰勒级数展开绘制了正弦函数的逼近 [打印本页]

作者: 2744557306    时间: 2024-8-27 11:05
标题: 通过泰勒级数展开绘制了正弦函数的逼近
  1. x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);& X8 D9 C. n, y5 h: F9 s
  2.       plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
    ' K" |% s1 r2 A- O7 v8 W
  3.       for n=[8:2:16]
    - F+ y1 T( i  l# T$ e
  4.          p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
    $ G, C. K7 [$ U2 E) B5 j
  5.       end% D" q9 `0 u; ?% r
  6.       
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
, k7 \. v7 U9 g1 A- g8 t- {. @, ^% H$ m6 l! G# N
### 代码解释
3 h% H& ]  T7 c8 f# V5 V2 _2 d5 V
1. **定义 x 范围**:% _0 c/ V& t- ^3 D. |
   ```matlab4 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+ ]. x2. **计算 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
   ```matlab5 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
   ```matlab2 }% 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 \% F0 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- y1 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- q3. **绘图与数据可视化**:- 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

211 Bytes, 下载次数: 0, 下载积分: 体力 -2 点

售价: 2 点体力  [记录]  [购买]






欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5