作业帮 > 数学 > 作业

关于matlab的问题请大神解答

来源:学生作业帮 编辑:搜搜做题作业网作业帮 分类:数学作业 时间:2024/05/03 18:12:49
关于matlab的问题请大神解答
在这个式子里面,m=4.2827,我需要求出最大极值和最小极值,包括具体的点的坐标,请问怎么求,结果是什么?用matlab解答,
关于matlab的问题请大神解答
代码如下:
clear
clc
%首先定义符号变量
syms x m
y = sym('x/(1+m*x^2)^2');
%求其一阶导数
diff1 = diff(y,1,x);
%解出一阶导为零的点,这里解出的x0为有两个元素的数组,分别是极大值和极小值
%x0(1) = ((4*m)/3)^(1/2)/(2*m)
%x0(2) = -((4*m)/3)^(1/2)/(2*m)
x0 = solve(diff1,x);
%我这里将x0带到一阶导中,验算一下是不是为零,结果正确,这一步可以省略
% subs(diff1,x,x0(1));
% subs(diff1,x,x0(2));
%然后求二阶导,来判断这两个极点,哪个是极大值点哪个是极小值点.
%二阶导小于零为极大值点,二阶导大于零为极小值点
diff2 = diff(diff1,1,x);
%哪个点为极大值,哪个点为极小值和m有关,这里假设m为4
m0 = 4;
%循环判断极值点二阶导<0,为极大值.如果>0,为极小值
for fi = 1:size(x0,1)
    x21 = subs(diff2,x,x0(fi));
    xm1 = subs(x21,m,m0);
    jz1 = eval(xm1);
    x01 = subs(x0(fi),m,m0);
    re1x = eval(x01);
    y01 = subs(y,{x,m},{re1x,m0});
    re1y = eval(y01);
    if jz1 < 0
        fprintf('x在%f取到极大值点为%f\n',re1x,re1y);
    else
        fprintf('x在%f取到极小值点为%f\n',re1x,re1y);
    end
end
%这里你只要输入不同的m,就可以得到不同的极值点结果了
%下面是绘图验证一下
xx = linspace(-3,3,100);
yy = subs(y,{x,m},{xx,m0});
plot(xx,yy)
hold on
plot(0.288675,0.162380,'*','MarkerSize',10)
plot(-0.288675,-0.162380,'*','MarkerSize',10)
结果如下:
x在0.288675取到极大值点为0.162380
x在-0.288675取到极小值点为-0.162380