百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

MATLAB实例讲解—求二元函数的极值

moboyou 2025-04-26 18:33 14 浏览

实例

程序

clc;
clear all;
close all;
%计算二元函数的极值点 并进行判断
syms x y  %定义二元变量 x y
z = (6*x-x^2)*(4*y-y^2);%定义二元变量函数
f1 = simplify(diff(z,x));%求z对x的一阶偏导
f2 = simplify(diff(z,y));%求z对y的一阶偏导
%求f1 = 0 f2 = 0
% [x1,y1] = solve(y*(2*x - 6)*(y - 4)==0,x*(2*y - 4)*(x - 6)==0,x,y); %求二元函数的驻点(x1,y1)
[x1,y1] = solve(f1==0,f2==0,x,y); %求二元函数的驻点(x1,y1)
x1 = double(x1); %将sym个数转化为double数值格式
y1 = double(y1);%将sym个数转化为double数值格式
n = length(x1);%求长度
%输出驻点个数
fprintf('二元函数z=f(x,y)的驻点个数为n =%d\r\n',n);
%输出驻点坐标
for i = 1:n
    fprintf('二元函数z=f(x,y)的第%d个驻点为(x,y)=(%f,%f)\r\n',i,x1(i),y1(i));
end
%幅值A,B,C为空矩阵
A = [];
B = [];
C = [];
for i = 1:n
    %sub函数用来替换求解函数的具体某点的值和double函数将sym个数转化为double数值格式
    temp = double(subs(diff(z,x,2),[x y],[x1(i) y1(i)])); %计算A
    temp1 = double(subs(diff(f1,y,1),[x y],[x1(i) y1(i)]));%计算B
    temp2 = double(subs(diff(z,y,2),[x y],[x1(i) y1(i)]));%计算C
    A = [A;temp];%存储A的计算结果
    B = [B;temp1];%存储B的计算结果
    C = [C;temp2];%存储C的计算结果
end
%根据AC-B^2结果判断 若(x,y)计算值大于0,则存在极值点,反之不存在若A>0,则为极小值点,A<0,则为极大值点
R = A.*C-B.^2;
%判断
for i = 1:n
    if R(i)>0
        if A(i)>0
            %用subs函数计算极值点处的函数值,然后用double函数将sym格式化成数值格式
            ymax = double(subs(z,[x y],[x1(i) y1(i)]));
            fprintf('二元函数z=f(x,y)的第%d个驻点(x,y)=(%f,%f)为极小值点,极小值为:%f\r\n',i,x1(i),y1(i),ymax);
        else
            ymin = double(subs(z,[x y],[x1(i) y1(i)]));
            fprintf('二元函数z=f(x,y)的第%d个驻点(x,y)=(%f,%f)为极大值点,极大值为:%f\r\n',i,x1(i),y1(i),ymin);
        end
    else
        fprintf('二元函数z=f(x,y)的第%d个驻点(x,y)=(%f,%f)不是极值点\r\n',i,x1(i),y1(i));
    end
end

结果

二元函数z=f(x,y)的驻点个数为n =5
二元函数z=f(x,y)的第1个驻点为(x,y)=(0.000000,0.000000)
二元函数z=f(x,y)的第2个驻点为(x,y)=(0.000000,4.000000)
二元函数z=f(x,y)的第3个驻点为(x,y)=(6.000000,0.000000)
二元函数z=f(x,y)的第4个驻点为(x,y)=(3.000000,2.000000)
二元函数z=f(x,y)的第5个驻点为(x,y)=(6.000000,4.000000)
二元函数z=f(x,y)的第1个驻点(x,y)=(0.000000,0.000000)不是极值点
二元函数z=f(x,y)的第2个驻点(x,y)=(0.000000,4.000000)不是极值点
二元函数z=f(x,y)的第3个驻点(x,y)=(6.000000,0.000000)不是极值点
二元函数z=f(x,y)的第4个驻点(x,y)=(3.000000,2.000000)为极大值点,极大值为:36.000000
二元函数z=f(x,y)的第5个驻点(x,y)=(6.000000,4.000000)不是极值点

1、diff函数

差分和近似导数

语法
Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)
说明
示例
Y = diff(X) 计算沿大小不等于 1 的第一个数组维度的 X 相邻元素之间的差分:
如果 X 是长度为 m 的向量,则 Y = diff(X) 返回长度为 m-1 的向量。Y 的元素是 X 相邻元素之间的差分。
Y = [X(2)-X(1) X(3)-X(2) ... X(m)-X(m-1)]
如果 X 是不为空的非向量 p×m 矩阵,则 Y = diff(X) 返回大小为 (p-1)×m 的矩阵,其元素是 X 的行之间的差分。
Y = [X(2,:)-X(1,:); X(3,:)-X(2,:); ... X(p,:)-X(p-1,:)]

如果 X 是 0×0 的空矩阵,则 Y = diff(X) 返回 0×0 的空矩阵。

X = [1 1 2 3 5 8 13 21];
Y = diff(X)
Y = 1×7

     0     1     1     2     3     5     8

请注意,Y 的元素比 X 少一个。

使用 diff 函数和语法 Y = diff(f)/h 求偏导数近似值,其中 f 是函数值在某些域 X 上计算的向量,h是一个相应的步长大小。

例如,sin(x) 相对于 x 的第一个导数为 cos(x),相对于 x 的第二个导数值为 -sin(x)。可以使用 diff 求这些导数的近似值。

h = 0.001;       % step size
X = -pi:h:pi;    % domain
f = sin(X);      % range
Y = diff(f)/h;   % first derivative
Z = diff(Y)/h;   % second derivative
plot(X(:,1:length(Y)),Y,'r',X,f,'b', X(:,1:length(Z)),Z,'k')

在此绘图中,蓝色线条对应原始函数 sin。红色线条对应计算出的第一个导数 cos,黑色线条对应计算出的第二个导数 -sin。

syms x; 
diff(sin(x^2)) 
ans =
2*x*cos(x^2)
syms x t; 
diff(sin(x*t^2), t) 
ans =
2*t*x*cos(t^2*x)

给定函数f(x)=cosx/(x 3+7x+2)的一阶导数,并将每个点上的值与原函数的值通过matlab函数绘制出来.

一阶导数 syms x; 
f=cos(x)/(x^3+7*x+2); 
f1d=diff(f,x) 
pretty(f1d)

2、solve函数

简单来说,solve函数可以进行以下情况的求解:
(1)等式:单/多变量+线性/非线性 ;(2)不等式
语法
S = solve(eqn,var)example
S = solve(eqn,var,Name,Value)example
Y = solve(eqns,vars)
Y = solve(eqns,vars,Name,Value)example
[y1,...,yN] = solve(eqns,vars)example
[y1,...,yN] = solve(eqns,vars,Name,Value)
[y1,...,yN,parameters,conditions] = solve(eqns,vars,'ReturnConditions',true)example
Description
一些函数
vpa 设置数值的精度(有效数字位数、保留的小数点位数)
subs 符号替换(用数字来替换符号变量)
ezplot 简单地画出函数的图形/曲线(显函数fun(x)、隐函数fun2(x,y)=0)
isAlways 一个判断函数(返回logical 1,表示true)
pretty 漂亮地打印符号表达式(看起来是有分子分母的格式)
举例
1.%% 求解单变量方程
%-----例子1------
syms x
eqn=sin(x)==1;
solve(eqn,x)
%-----例子2------
syms x
eqn=sin(x)==1;
[solx,params,conds]=solve(eqn,x,'ReturnConditions',true)
%-----例子3---------------
%如果返回empty,则表明解不存在。如果返回empty+warning,则解可能存在,但是solve找不到
syms x
solve(3*x+2,3*x+1,x)
2.%% 求解多变量方程
%---例1-----------------
%为了避免求解方程时对符号参数产生混乱,需要指明一个等式中需要求解的变量。
%如果不指明的话,solve函数就会通过symvar选择一个变量(认为该变量是要求解的变量)
clc,clear
syms a b c x
sola=solve(a*x^2+b*x+c==0,a) %待求解的变量是a
sol=solve(a*x^2+b*x+c==0) %待求解的变量是x

3、subs函数

matlab中subs()是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,常用调用方式为:
subs(S,OLD,NEW) 表示将符号表达式S中的符号变量OLD替换为新的值NEW。
下面具体演示4种不同形式的OLD和NEW的调用效果:
首先在matlab命令窗口输入如下代码,定义三个符号变量和一个符号表达式S
1、将变量x替换为数值1:subs(S,x,1)
2、将变量x替换为变量z:subs(S,x,z)
3、同时将变量x和y分别替换为1和z:subs(S,{x,y},{1,z})
4、将单变量替换为数组:subs(S,x,[1 2;3 4])
首先是调用格式:
R = subs(S)
R = subs(S, new)
R = subs(S, old, new)
其中S为符号表达式,默认的是变量x!

下面看几个例子,相信大家就是使用了!

例1:

>> syms x;
>> f=x^2;
>> subs(f,2)
ans =

4

例2:将表达式x^2+y^2中x取值为2

>> syms x y;
>> f=x^2+y^2;
>> subs(f,x,2)
ans =

y^2 + 4

例3:

>> syms x y;
>> f=x^2+y^2;
>> subs(f,findsym(f),2)
ans =

y^2 + 4

其中findsym(f)为查找f中所有的符号变量

例4:同时对两个或多个变量取值求解

>> syms a b;
subs(cos(a) + sin(b), {a, b}, {sym('alpha'), 2})
ans =
sin(2) + cos(alpha)

例5:带入数据的值也可以是数组形式

>> syms t a;
>> subs(exp(a*t), 'a', -magic(2))
ans =

[ 1/exp(t), 1/exp(3*t)]
[ 1/exp(4*t), 1/exp(2*t)]

4、符号表达式化简函数

语法:命令(符号表达式)
1. pretty(f)将符号表达式f化简成语高等代数课本上显示符号表示类似;
2. collect(f)合并符号表达式的同类项;
3. hornet(f)将一般的符号表达式转换成嵌套形式的符号表达式;
4. factor(f)对符号表达式进行因式分解;
5. expand(f)对表达式进行展开;
6. simplify(f)对符号表达式进行化简,利用各种类型的恒等式,包括求和,求积分,三角函数以及Bessel函数等简化符号表达式.
7. simple(f)对符号表达式尝试各种不同的算法进行化简,以显示长度最短的符号表达式简化形式;
8. [r,how]=simple(f)返回的r为符号表达式进行化简后的形式,how为采用的简化方法

本文内容来源于网络,仅供参考学习,如内容、图片有任何版权问题,请联系处理,24小时内删除。


作 者 | 郭志龙

编 辑 | 郭志龙
校 对 | 郭志龙

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...