数学建模社区-数学中国

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

作者: 2744557306    时间: 2024-8-27 11:05
标题: 通过泰勒级数展开绘制了正弦函数的逼近
  1. x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
    - U7 k, K9 M6 F6 @
  2.       plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
    - {6 p; A* [0 p
  3.       for n=[8:2:16]
    # O; }0 g  I7 ~' |9 C. i" {
  4.          p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)7 `/ E6 J# f/ g" w9 I( u
  5.       end
    - S$ Y; \% G% s
  6.       
复制代码
这段 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 y1. **定义 x 范围**:
# F( f4 ^7 d& n0 V4 U   ```matlab0 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 r2. **计算 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
   end3 \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 }$ e2. **符号计算**:
, ]; ]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, J4. **遍历与替换**:
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

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

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






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