数学建模社区-数学中国

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

作者: 2744557306    时间: 2023-12-22 18:08
标题: matlab求最值与求导
  1. clear all5 u# o' o) V/ i/ V) |  p
  2. syms x;4 Z8 h6 Z# z; r/ v* g
  3. y=(x^2-1)^3+1;
    ( A1 `( ?; [/ A% ~
  4. y1=diff(y,x);                       %y对x求一阶导
    % H8 i; h3 p( X" O+ ]- m
  5. y2=diff(y,x,2);                     %y对x求二阶导
    ; \) z$ c! n3 Y( K
  6. subplot(3,1,1);                     %把图形窗口分成3×1部分,并激活第1部分: [) a6 E' ^, Z  E9 \5 Y" T
  7. ezplot(y,[-1.5,1.5]);               %对符号函数在[-1.5,1.5]上绘图0 R3 k4 R- a- V$ m4 W, u) q
  8. subplot(3,1,2);
    ; E# o! ?* O( w8 o9 w- C9 o
  9. ezplot(y1,[-1.5,1.5]);
    : e$ L! z: f0 I' q9 ^, H1 W
  10. subplot(3,1,3);
    # d9 J- G4 j9 t( v1 L- |9 a
  11. ezplot(y2,[-1.5,1.5]);
    4 _8 W: |- z1 P% r, ?4 Y. ~
  12. %通过导数为0的点求最值
    ( h% x" j( G- p1 v0 \6 U" e9 ~
  13. x0=solve('6*(x^2-1)^2*x=0','x');    %求解一阶导数(从workspace中得到)为0的点! q0 ?' v9 d5 P; x) W& p1 \1 c% s
  14. y0=subs(y,x,x0);                    %把x0带入y中的x  s4 {0 O& u- U# y5 R: \3 G
  15. [ymin1,n]=min(eval(y0));            %求y0的最小值
    8 K) N# R) j- M0 M6 C3 H6 x
  16. xmin1=x0(n);
    9 o+ r; u3 f0 G7 k' }/ t
  17. %通过fminbnd求函数最值
    3 j% s; C) D$ n1 d
  18. f=inline('(x^2-1)^3+1','x');
    $ A$ O, P! l2 {* W9 E8 R
  19. xmin2=fminbnd(f,-1.5,1.5);          %在[-1.5,1.5]上求f函数的最小值点    ( z$ a6 e5 |7 Q" M. v4 a; n
  20. ymin2=f(xmin2);
复制代码
这段Matlab代码主要执行以下任务:: l, ~* X: z6 m+ j1 n* W( g! x$ V) P

9 B4 W+ K$ ~  q  o1 u( C1.clear all: 清除当前工作区的所有变量。. i& M, _+ n7 \$ Y8 T
2.syms x;: 声明符号变量 x。' l9 P, i* [% c9 ~& _
3.y=(x^2-1)^3+1;: 定义符号表达式 y,这个表达式是一个函数 (x^2-1)^3 + 1。
! g4 E3 j" t3 r3 f' G4.y1=diff(y,x);: 对 y 关于 x 求一阶导数,结果存储在 y1 中。5 R. t" Y% G9 j
5.y2=diff(y,x,2);: 对 y 关于 x 求二阶导数,结果存储在 y2 中。% E/ z3 Q' N3 u+ g6 i9 Z
6.subplot(3,1,1);: 将图形窗口分成 3 行 1 列,并激活第 1 部分。
% f- D9 }3 k! B: P: t  Y7 b. D% X7.ezplot(y,[-1.5,1.5]);: 绘制符号函数 y 在 x 范围 [-1.5, 1.5] 上的图像,显示在第一个子图中。& t) c0 d1 F" |4 \$ }, I0 o6 o7 r
8.subplot(3,1,2);: 激活第 2 部分。/ ]5 M9 t5 s4 _, Q" a  B
9.ezplot(y1,[-1.5,1.5]);: 绘制一阶导数 y1 在 x 范围 [-1.5, 1.5] 上的图像,显示在第二个子图中。
3 y6 t* q0 m8 W) \) S10.subplot(3,1,3);: 激活第 3 部分。
- ~, E3 i9 s) D+ a) J, e( G7 ]11.ezplot(y2,[-1.5,1.5]);: 绘制二阶导数 y2 在 x 范围 [-1.5, 1.5] 上的图像,显示在第三个子图中。; J) h/ s0 q  R) L8 P4 [, b
12.通过导数为 0 的点求最值:' {- h% T1 W  w- U/ E3 e+ q

3 G4 _# M0 q/ X' u2 H+ I3 h13.x0=solve('6*(x^2-1)^2*x=0','x');: 解一阶导数为 0 的方程,得到导数为 0 的点的 x 值。- U+ Z( S: Q* A! p1 L4 e
14.y0=subs(y,x,x0);: 将这些 x 值代入原函数 y 中,得到对应的 y 值。' X) p( \8 J0 o
15.[ymin1,n]=min(eval(y0));: 找到 y0 中的最小值及其索引。
3 j' l  E) q" @1 x2 w" w/ \- f16.xmin1=x0(n);: 得到对应的 x 值。/ @/ E; V% z9 s2 K& c6 A
17.通过 fminbnd 求函数最值:
6 {3 l9 O0 F) [% w& |7 z6 n
  e, W/ L+ Q$ B8 {: r. v3 u9 N3 Z18.f=inline('(x^2-1)^3+1','x');: 定义一个匿名函数 f,表示原函数。7 g9 _0 |, n4 E2 x' e9 o
19.xmin2=fminbnd(f,-1.5,1.5);: 在指定范围 [-1.5, 1.5] 上使用 fminbnd 函数求函数 f 的最小值点。7 t8 _* e+ D( Q% S
20.ymin2=f(xmin2);: 得到对应的最小值。
* f* Z7 G5 U! C- B( }! p* a. ?) v
, C; S1 ]% @0 I. C$ i* w$ S  q这段代码的目的是分别绘制原函数、一阶导数、和二阶导数的图像,并通过求导数为 0 的点和 fminbnd 函数分别找到函数的最小值及其对应的 x 值。
  ~6 e, K; d! y! g7 V
3 `$ ]! A7 L5 G4 d" M& ^3 _( O, R  ~* D

qiudao.m

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

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






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