- 在线时间
- 478 小时
- 最后登录
- 2026-4-9
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7788 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2922
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1171
- 主题
- 1186
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);
& s; I! X4 R7 N; z - plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
; q* _& e0 T\" Y9 o: F7 U - for n=[8:2:16] d* D. {3 U/ ]* r) s
- p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
8 B6 _% S1 X' M' [5 P. F. X - end
; V1 V7 ~& q! } h* Y; T1 b -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
# l/ V7 }3 L7 q$ Z1 h2 G
/ U/ W L8 @2 b) ^( i) u### 代码解释
4 _) w' [ ^( r6 P
9 C$ m D* Y9 y( S6 }1. **定义 x 范围**: _6 m, z% y; X& B! e
```matlab
/ |9 R# A# C7 B# p9 j x0 = -2*pi:0.01:2*pi;
% b7 L7 c! x7 @+ P0 M ```1 b7 F7 b! c0 L; }+ u
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
6 ]5 {! J* V+ F8 Y8 v; A' p% [' `) V! b" @+ {
2. **计算 sin(x0)**:; d7 E5 X- _" A4 J. Z, h* v0 m6 p' C
```matlab. m9 k6 ]' K2 j& f" A
y0 = sin(x0);
5 f# T5 Y5 n: a ```
% S- }4 j! X' L6 s0 ?* N - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
4 K6 Z% {) s8 X u& I2 b( w1 Z4 b/ `% e6 W) w7 p& L1 q
3. **定义符号变量和函数**:
3 K1 n' C2 j% p7 i7 X4 T5 s! L ```matlab
# q# M% G I% D2 S7 Y! F" W syms x;- C f, D1 E8 B6 v' Z5 t' E
y = sin(x);
5 O- y6 B$ X- c4 I0 a8 h: T ```8 y, ^3 r+ B( Y9 s7 J
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。7 j5 i& N8 Z' z" s+ D3 ~
$ `! v8 V6 z7 c+ s7 h- H4. **绘制 sin(x) 图形**:1 X9 y% D( R3 q+ p7 S
```matlab
/ w f2 ^5 ?2 v! ^ z9 ^ plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on- h8 {+ y7 v& ^
```
* _# t2 Z) H7 {- I% J - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。
( L) [- e T2 ]" _& N1 L - `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。" O# c3 J/ `1 J# G3 p9 g2 ~
- `hold on` 使得后续绘图不会覆盖当前的图形。. _. J: [1 R( e0 `/ q
) J7 P, q, g; s: s
5. **进行泰勒级数展开和绘图**:+ b/ t' S) ]+ {
```matlab
1 w% i. Q! m7 K9 R# _ for n = [8:2:16]% p% f6 V. G2 R" |+ ^
p = taylor(y, x, n);
, \6 ^# Q b& N& `3 r3 n, q# {+ x y1 = subs(p, x, x0);4 j& E+ f0 e0 M# l% V, s& [, l
line(x0, y1)5 S% s$ d0 i! u) o
end
' A) _' s9 V% A: K: h0 o" ` ```; y9 I. X, A# b k4 _4 r6 Y. U, S
- 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。
6 u: m. {" W! Q3 V' o9 b4 p6 Z - 在循环内部:; @( D6 R8 Y( T, M" u4 ~
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。
( I$ T- A! G# p ? - `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。% w. I0 U/ u/ X/ W3 E
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。1 v6 Q; T. @, Z+ q e
0 u1 v9 }9 V: J! _- _
### 效果' @+ `% u. U7 u% W2 U- g4 z
( g' s8 n: A, m L; F& k" [
- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。3 y- C3 t* A; ^$ G4 i
8 o; @# {* w" A0 p3 w
### 知识点总结 ~% o9 K" r; @/ j5 Z
8 _* ?+ ^3 ?1 u1. **泰勒级数**:' c; H% y( m9 L$ C4 @
- 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
7 K; U' ~# u1 D9 C5 ^9 g; ?) x' f2 h: {5 M
2. **符号计算**:# _9 b4 A- R# Z5 Z. Q/ K- q
- 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。
$ z, G1 Z5 n. G* s0 d7 B, I- K+ ^. a9 x F; i
3. **绘图与数据可视化**:
% J& t; q% f8 F - `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。, B4 o& N2 D5 n2 K! K8 Q! q% |
# E2 w( X6 X$ I% `! [& x
4. **遍历与替换**:" C: y% W# U+ y" Z8 I8 D) y5 L$ G
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。9 B% h, b7 F7 Q
' Y, D6 X! q( [/ N6 J
### 结论) J1 j2 N, `: W
1 i/ C; A0 C- O3 h% Z( X* J这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。
, r- o, r, `9 T/ A
; l; G5 j! f# q/ R2 w5 n! F$ H4 ~! f6 j% D3 A1 N
5 _! @, B* J3 b( a! v$ m- \0 F4 {9 L8 k
|
zan
|