数学建模社区-数学中国

标题: matlab求最值与求导 [打印本页]

作者: 2744557306    时间: 2023-12-22 18:08
标题: matlab求最值与求导
  1. clear all3 a6 x* w2 J7 Q- C$ A6 ?
  2. syms x;
      m( u/ U) |8 p0 Q
  3. y=(x^2-1)^3+1;
    / W4 J( Z$ A! a  t( H6 e  R
  4. y1=diff(y,x);                       %y对x求一阶导8 P! P# k  W2 o: P; a* y0 d
  5. y2=diff(y,x,2);                     %y对x求二阶导
    , i1 S" i$ ^" h4 m
  6. subplot(3,1,1);                     %把图形窗口分成3×1部分,并激活第1部分
    1 N! I$ p1 g; H2 U
  7. ezplot(y,[-1.5,1.5]);               %对符号函数在[-1.5,1.5]上绘图
    6 i. [8 u& T" Y; s+ ^2 g8 S
  8. subplot(3,1,2);' Y" N3 Q& j! `1 x! u, R
  9. ezplot(y1,[-1.5,1.5]);
    8 ~& ]$ p7 h9 v/ D' O
  10. subplot(3,1,3);
    5 j, @" [# q% S: G3 D
  11. ezplot(y2,[-1.5,1.5]);+ b: n9 Y1 \) x7 j
  12. %通过导数为0的点求最值
    ! R( Y: K' O/ d+ w
  13. x0=solve('6*(x^2-1)^2*x=0','x');    %求解一阶导数(从workspace中得到)为0的点" B& X5 |) t8 g) o9 C7 e
  14. y0=subs(y,x,x0);                    %把x0带入y中的x
    0 n( L+ t( L5 f' Z" c( p$ Q
  15. [ymin1,n]=min(eval(y0));            %求y0的最小值
    7 r. R  |# Z" l
  16. xmin1=x0(n);
    : y$ }. k0 S' K" a) \
  17. %通过fminbnd求函数最值- e3 N, z- j2 l, U1 ^6 ]; I8 X
  18. f=inline('(x^2-1)^3+1','x');8 z% Z7 N% Y% X; R9 I  l6 C$ i
  19. xmin2=fminbnd(f,-1.5,1.5);          %在[-1.5,1.5]上求f函数的最小值点   
    - s- F; e9 I- \5 D
  20. ymin2=f(xmin2);
复制代码
这段Matlab代码主要执行以下任务:8 y! c$ [, K) _) |2 y
$ _( W* ?  p+ o  _6 F" j
1.clear all: 清除当前工作区的所有变量。
( k! C& J8 L! N0 `8 ]0 ~9 s2.syms x;: 声明符号变量 x。
8 L+ U- f* F9 r0 ]0 H3.y=(x^2-1)^3+1;: 定义符号表达式 y,这个表达式是一个函数 (x^2-1)^3 + 1。
* S3 m* E4 K1 S! U  W4.y1=diff(y,x);: 对 y 关于 x 求一阶导数,结果存储在 y1 中。( n# K8 s- p& @& w
5.y2=diff(y,x,2);: 对 y 关于 x 求二阶导数,结果存储在 y2 中。
- F) S7 g, g7 s5 i* \6.subplot(3,1,1);: 将图形窗口分成 3 行 1 列,并激活第 1 部分。- Q; H+ f! `1 [8 p! C2 V! M6 ]) b
7.ezplot(y,[-1.5,1.5]);: 绘制符号函数 y 在 x 范围 [-1.5, 1.5] 上的图像,显示在第一个子图中。- G; s% c/ z$ A! [$ l% y4 @
8.subplot(3,1,2);: 激活第 2 部分。
* P% b3 K' u4 p- W- ^7 O2 C9.ezplot(y1,[-1.5,1.5]);: 绘制一阶导数 y1 在 x 范围 [-1.5, 1.5] 上的图像,显示在第二个子图中。* V. F5 e4 T4 u. B* O, f
10.subplot(3,1,3);: 激活第 3 部分。$ J: H! c% l8 `# ^' P! T1 a- U6 |
11.ezplot(y2,[-1.5,1.5]);: 绘制二阶导数 y2 在 x 范围 [-1.5, 1.5] 上的图像,显示在第三个子图中。; K+ K" u/ {6 n0 q8 g; X; o( M
12.通过导数为 0 的点求最值:; h* O" ?$ h1 k& j: r3 h
$ I. G* I# ~! v9 }& C$ k
13.x0=solve('6*(x^2-1)^2*x=0','x');: 解一阶导数为 0 的方程,得到导数为 0 的点的 x 值。
1 B6 K* n: ^" [' }2 N8 F. F' y14.y0=subs(y,x,x0);: 将这些 x 值代入原函数 y 中,得到对应的 y 值。3 W0 e( A4 ?# V
15.[ymin1,n]=min(eval(y0));: 找到 y0 中的最小值及其索引。" v1 N0 }3 ^8 {% y: U$ N/ T
16.xmin1=x0(n);: 得到对应的 x 值。
' l! e% m- Y6 w# ~4 Y* E: Z2 n0 K3 f5 F17.通过 fminbnd 求函数最值:
8 m- Y+ Z5 L! k9 s7 R! T% o  B5 G( J3 r$ \* R+ O
18.f=inline('(x^2-1)^3+1','x');: 定义一个匿名函数 f,表示原函数。/ X* i& h8 t& y/ n* z* k: p2 {1 H
19.xmin2=fminbnd(f,-1.5,1.5);: 在指定范围 [-1.5, 1.5] 上使用 fminbnd 函数求函数 f 的最小值点。
& |5 b2 Z. D- k1 K; z20.ymin2=f(xmin2);: 得到对应的最小值。
0 g. I! p- g& l2 l4 m
" A& z$ R7 y; j( y6 w6 o这段代码的目的是分别绘制原函数、一阶导数、和二阶导数的图像,并通过求导数为 0 的点和 fminbnd 函数分别找到函数的最小值及其对应的 x 值。
2 `. B" j& K6 b8 Q2 V! e. J9 r8 m' M3 T6 d) N% F5 c! Y6 b

% y3 D$ d3 H& {, G. x, R) y0 S' q

qiudao.m

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

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






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