QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 4099|回复: 0
打印 上一主题 下一主题

通过泰勒级数展开绘制了正弦函数的逼近

[复制链接]
字体大小: 正常 放大

1198

主题

4

听众

2977

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2024-8-27 11:05 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
  1. x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
    8 b7 X+ f6 \6 ]8 A: B: {8 P
  2.       plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on6 m) @8 r  ~8 g# N\" t9 _
  3.       for n=[8:2:16]' R. I& V7 B: Y
  4.          p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)9 O  E8 H% o\" T8 G2 w
  5.       end# M, S9 n2 \2 E; I
  6.       
复制代码
这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:% p8 u, O* c5 F

8 O9 J* f" k- O  N% }; z### 代码解释
' `5 ]- t) P% L# [4 }+ _$ ?. M  K! ]6 e& ^% a- h
1. **定义 x 范围**:
6 @/ @9 P: X6 r2 |$ n1 ^   ```matlab
7 J! d. c. `3 K   x0 = -2*pi:0.01:2*pi;1 E3 p) E! y+ O) [% T
   ```
8 O5 @% u9 ]3 d4 ]1 e- m' A   - 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
0 k: r* _$ a8 k0 d' G" M% R$ t( V. _  s
2. **计算 sin(x0)**:
7 Y- |8 B- Q# P0 R+ j+ F   ```matlab
' \3 [. ]8 F5 h6 K- ~! I' ^/ G   y0 = sin(x0);
3 M; E% U% p3 F   ```" \6 [2 t  M  ^1 j( C  j
   - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
4 S4 n0 c8 @0 T
5 _( o! ?- ]% q, t3 W5 A) w3. **定义符号变量和函数**:2 T( ]3 O, m# q6 t  d* L7 @2 Y  g; _
   ```matlab
! M/ y! d% j( O, N2 m; j) q   syms x;$ s. b9 A; v* G- K5 j2 Y9 L- I. I
   y = sin(x);. L/ p; B- a5 n' a9 Z
   ```* J: z9 C- \2 d+ K, P
   - 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。8 e8 E! }" J$ F6 ?! q' J

0 c! b" m+ g% {. \9 \8 P4. **绘制 sin(x) 图形**:
3 c: @/ M1 w# C8 M6 v$ n3 Y- `# U   ```matlab% f6 @9 H' X. U' o$ C
   plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on/ `+ z& i+ ?3 u# j* S! I1 @
   ```* i3 Y$ b. E7 B! e
   - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。, Z" B" e) ^; w; x
   - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
7 |& O7 i3 z  @+ y0 h% U   - `hold on` 使得后续绘图不会覆盖当前的图形。
. z, _  V# l8 B7 Z/ c8 p% B4 M8 D& L
5. **进行泰勒级数展开和绘图**:$ f6 k6 U7 I; D: p; k; G, n
   ```matlab
0 c6 @, ^9 r: F3 Q7 i   for n = [8:2:16]; Z, T2 u  G+ B! C
       p = taylor(y, x, n);4 `$ S' [. E( P4 |8 a
       y1 = subs(p, x, x0);2 L: O" |4 v3 R; \2 X
       line(x0, y1)0 w  @' s. I3 J& w5 Q$ R
   end
& Z$ T1 ?  ^0 p- |7 ]# e( G   ```
- {0 {1 \- \( o5 r   - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
* m% O% G: }' E# f' o, }   - 在循环内部:: Z/ ]+ ?0 a6 {  a/ h5 r9 _) A
     - `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。+ h' q. E( w" c" A/ D' Z
     - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。
2 \* U! j( k% c+ N     - `line(x0, y1)` 在当前图中绘制泰勒级数的结果。
! C) }3 _8 t+ e/ W) [% F: o; a9 R
1 l+ ]) B3 U9 B+ n2 o: A3 D. v### 效果
# p$ [1 q, \# E" {
3 r9 E. c! E3 t  k- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。( `( U" G5 Z" O- V, H$ m

: b- s( j- a6 f1 }; x$ E### 知识点总结, K6 r' T$ i: v/ W

% v2 k, p$ l$ D  m0 }5 b1. **泰勒级数**:
, ~; M% d0 n3 |3 v   - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
/ b9 H+ b8 R8 g
; I3 p3 ?7 e3 I# u1 D" m2. **符号计算**:
. _5 g6 h2 [" k9 T, w   - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。6 Y5 e! e1 l/ ]; Q8 [. L7 [9 m

0 |' B2 n5 Z; l3. **绘图与数据可视化**:
8 v" Y. ^' y' L   - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。8 T9 i1 c: K1 T! L
# o% d$ n4 f" E8 b5 o, M$ _
4. **遍历与替换**:
' u: x" F5 i' E' r   - 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
% _# m3 `) c- u5 n! b/ I$ c+ {
# O; s8 d/ u+ v### 结论4 R" u! Z1 t* |! y1 I+ q

+ s% t' c: M7 Z( w5 T) e这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。' p9 y) B! M! P% G

5 E3 S% A1 t, c) M, E6 l
* k! P- v  Y' {" S* ~3 K
' _. o# F: j+ _$ B1 Q1 P8 _0 o- A0 v1 j

examp3_18.m

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

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

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-9-24 22:20 , Processed in 0.292143 second(s), 54 queries .

回顶部