- 在线时间
- 480 小时
- 最后登录
- 2026-6-1
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7823 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2934
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1174
- 主题
- 1189
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
- x0=-2*pi:0.01:2*pi; y0=sin(x0); syms x; y=sin(x);/ R$ [7 v9 X. V& m+ }/ c& w
- plot(x0,y0), axis([-2*pi,2*pi,-1.5,1.5]); hold on
0 U7 l, P\" }1 f& x. Y - for n=[8:2:16]
' k/ P/ Y O5 o! b; D+ f - p=taylor(y,x,n), y1=subs(p,x,x0); line(x0,y1)
: x) J) c0 z( {2 u1 Q) N - end
# d- ~7 W3 y* Z% A -
复制代码 这段 MATLAB 代码通过泰勒级数展开绘制了正弦函数的逼近。下面是代码的逐步解释:
$ V; H( w5 j% |% e) H2 y
8 b4 }# C- W% U. a2 h$ ?### 代码解释
3 L. A# q5 H7 l- a- U5 e. |' `* A5 g8 W m4 ^* a
1. **定义 x 范围**:3 @/ H, U2 Y2 U0 e$ M1 H8 y
```matlab
) L' S8 c d! |1 m: }. L x0 = -2*pi:0.01:2*pi;
8 A7 S: f( ~& W! }! B, n ```( @! n9 i; \9 a0 o
- 这行代码创建了一个从 \(-2\pi\) 到 \(2\pi\) 的向量 `x0`,步长为 0.01。这个向量将用于计算和绘图。
' F( @, i: b( k N: N: S+ |( M; x) o$ @8 B- \; w
2. **计算 sin(x0)**:
. g) y z. F* b' B' a ```matlab
& {4 S1 F5 ~7 [- C8 r y0 = sin(x0);/ }; y* e g8 \. F: e
```
N) g t2 T$ V$ B - 计算 `x0` 中每个值的正弦,并将结果存储在 `y0` 中。`y0` 将是 `sin` 函数的实际值,用于绘图。
+ E+ {9 {! `2 x* [- Z' [1 k
& z1 H E" `$ v" t% D0 D6 g$ r1 |3. **定义符号变量和函数**:
; L P/ u( Q8 J9 Q7 I ```matlab
% j3 `9 C3 z2 p* S+ { syms x;
! @ |9 h, F' ]! \6 N y = sin(x);
/ q5 G; }/ c* k9 `. L% o ```0 U/ S7 ] A p/ Q5 g6 M7 D
- 使用 `syms` 创建符号变量 `x`,然后定义符号函数 \( y = \sin(x) \)。这个函数用于后续的泰勒级数展开。
% }' k' X: O( P( M9 h1 j/ g0 `' Y0 R. [/ W$ J E# p/ W0 Z2 d
4. **绘制 sin(x) 图形**:
& `9 S$ J/ K! [ ```matlab" R0 F( K% |5 @* h( }
plot(x0, y0), axis([-2*pi, 2*pi, -1.5, 1.5]); hold on
O5 m8 G* ~# C- Z: N2 q# Q$ e ```
* [6 k. j0 t# A6 H - 使用 `plot` 函数绘制 `y0` 关于 `x0` 的图形,即实际的正弦波。" p) V; q% j! l* C$ p6 j
- `axis` 函数设置坐标轴的范围为 \([-2\pi, 2\pi]\) 和 \([-1.5, 1.5]\)。
3 A+ B# I& Y3 r5 S- Y) @; r- l - `hold on` 使得后续绘图不会覆盖当前的图形。
; ^0 W J9 p' ^# s& Y' C+ i6 I
- k; i5 `. h" l, B5. **进行泰勒级数展开和绘图**:! }: B6 O, J0 ]; P
```matlab2 l7 R5 _2 y* x4 I$ t: I
for n = [8:2:16]
! n, `0 E% }& u( u p = taylor(y, x, n);8 _9 w* e2 n1 _
y1 = subs(p, x, x0);" L2 S, p1 ?0 q
line(x0, y1)- J% P% ]$ D9 A; n
end
; A. T! k& z& D) y2 v' C/ F3 U* | ```
# d- R7 A! o0 C& L - 使用 `for` 循环遍历 `n` 的值,从 8 到 16,步长为 2(即分别为 8、10、12、14 和 16)。7 k4 i! X T. N- j" v6 O
- 在循环内部:) u6 O5 h4 Y' i" h
- `p = taylor(y, x, n)` 计算在点 0 附近的 \( n \) 次泰勒级数展开,得到多项式 \( p \)。0 D! A$ j0 u) T2 D/ a
- `y1 = subs(p, x, x0)` 将泰勒展开多项式 \( p \) 替换中 `x` 的值为 `x0`,以计算对应的 `y1`(即泰勒多项式的值)。1 \/ u: H' i, G( @: ^9 d
- `line(x0, y1)` 在当前图中绘制泰勒级数的结果。( x: x# U ]. R2 ^, y
5 a) j' x3 o( J' n
### 效果0 L) h0 |$ v; g' j, M5 r& e. [. K
9 G4 s% G1 a) I( v5 o- 代码运行后,会得到一幅包含原始正弦函数图像和不同阶次的泰勒多项式的图形。每个泰勒多项式的图形与正弦函数重合得越近,表示这一级数的逼近效果越好。
3 x/ A3 _" W+ j# o$ y
0 X* V- ^/ j6 }! m3 D: q4 v+ @### 知识点总结( C$ R5 T7 u1 L' A! H6 u# Z$ O [
% @7 l8 @7 i' N1 \( q% E
1. **泰勒级数**:
, G" @; C7 ^3 H Z h2 y9 P - 泰勒级数是表示函数的一种多项式近似,适用于在某一点附近的函数描述。
) y3 S6 B8 l' b5 A- H5 O0 P% n) z$ L) m! c1 v# s$ }8 p
2. **符号计算**:
9 b9 n5 \+ m, ]* o' G& ] - 使用 MATLAB 的符号工具箱,能够对符号函数进行解析计算并获取多项式形式。$ ]$ G( [) r: V6 U+ X
. n9 }9 y k& {5 ?7 C3 l; w' b3. **绘图与数据可视化**:; c7 n: @" ]7 G: N2 I8 c7 C0 ?" G& i, i
- `plot` 和 `line` 函数用于展示函数图像,`hold on` 功能允许在同一图中叠加多个图形。/ q" v4 P! q |6 R) Z" h
/ Q0 @- B Z& E* n1 v1 x4 m* P( E! S: r4. **遍历与替换**:6 U: Z5 u4 Q4 d {- Q2 d
- 通过循环和 `subs` 函数,可以对多次定义和计算的函数值进行有效处理。
& |: ^* {# s! o, ]
8 b6 P& J! z$ D### 结论
" T# q) y; r% K4 q- B! A( N/ b; d; e& D7 E+ `2 X& P
这段代码展示了如何利用 MATLAB 对正弦函数进行泰勒级数展开,并通过可视化的方式展示其近似效果。可以通过这个示例了解泰勒级数的适用性和效率,同时为函数逼近与数值计算提供了直观的理解。, g4 M( @- C# e5 ?% \
6 S* x( T, v9 U6 n7 q' W; J
$ n7 e7 f; I# D% ]6 t: b1 l7 w5 q9 x8 o
7 _! n$ S0 d. P3 M6 [
|
zan
|