数学建模社区-数学中国
标题:
matlab求最值与求导
[打印本页]
作者:
2744557306
时间:
2023-12-22 18:08
标题:
matlab求最值与求导
clear all
5 u# o' o) V/ i/ V) | p
syms x;
4 Z8 h6 Z# z; r/ v* g
y=(x^2-1)^3+1;
( A1 `( ?; [/ A% ~
y1=diff(y,x); %y对x求一阶导
% H8 i; h3 p( X" O+ ]- m
y2=diff(y,x,2); %y对x求二阶导
; \) z$ c! n3 Y( K
subplot(3,1,1); %把图形窗口分成3×1部分,并激活第1部分
: [) a6 E' ^, Z E9 \5 Y" T
ezplot(y,[-1.5,1.5]); %对符号函数在[-1.5,1.5]上绘图
0 R3 k4 R- a- V$ m4 W, u) q
subplot(3,1,2);
; E# o! ?* O( w8 o9 w- C9 o
ezplot(y1,[-1.5,1.5]);
: e$ L! z: f0 I' q9 ^, H1 W
subplot(3,1,3);
# d9 J- G4 j9 t( v1 L- |9 a
ezplot(y2,[-1.5,1.5]);
4 _8 W: |- z1 P% r, ?4 Y. ~
%通过导数为0的点求最值
( h% x" j( G- p1 v0 \6 U" e9 ~
x0=solve('6*(x^2-1)^2*x=0','x'); %求解一阶导数(从workspace中得到)为0的点
! q0 ?' v9 d5 P; x) W& p1 \1 c% s
y0=subs(y,x,x0); %把x0带入y中的x
s4 {0 O& u- U# y5 R: \3 G
[ymin1,n]=min(eval(y0)); %求y0的最小值
8 K) N# R) j- M0 M6 C3 H6 x
xmin1=x0(n);
9 o+ r; u3 f0 G7 k' }/ t
%通过fminbnd求函数最值
3 j% s; C) D$ n1 d
f=inline('(x^2-1)^3+1','x');
$ A$ O, P! l2 {* W9 E8 R
xmin2=fminbnd(f,-1.5,1.5); %在[-1.5,1.5]上求f函数的最小值点
( z$ a6 e5 |7 Q" M. v4 a; n
ymin2=f(xmin2);
复制代码
这段Matlab代码主要执行以下任务:
: l, ~* X: z6 m+ j1 n* W( g! x$ V) P
9 B4 W+ K$ ~ q o1 u( C
1.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' G
4.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% X
7.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) \) S
10.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 h
13.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/ \- f
16.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 Z
18.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
2023-12-22 18:08 上传
点击文件名下载附件
下载积分: 体力 -2 点
725 Bytes, 下载次数: 0, 下载积分: 体力 -2 点
售价:
2 点体力
[
记录
] [
购买
]
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5