秋雪668 2023-09-04 22:37 采纳率: 66.7%
浏览 12
已结题

关于#matlab#的问题:为什么按照数学建模与算法这本书敲的程序得出的结果和书上不一样呢


clc
clear
syms x y
f = x^3 -y^3 + 3*x^2 +3*y^2 -9*x;
df = jacobian(f);%求一阶偏导
d2f = jacobian(df);%求Hessian阵
[xx,yy] = solve(df)
xx = double(xx);
yy = double(yy);
for i = 1:length(xx)
    a = subs(d2f,{x,y},{xx(i),yy(i)}); 
    b = eig(a);
    f = subs(f,{x,y},{xx(i),yy(i)});
    f = double(f);
   %求矩阵特征值
    if all(b>0)
    fprintf('(%f,%f)是极小值点,对应的极小值为%f\n',xx(i),yy(i),f);
    elseif all(b<0)
    fprintf('(%f,%f)是极大值点,对应的极大值为%f\n',xx(i),yy(i),f);
    elseif any(b>0)&&any(b<0)
    fprintf('(%f,%f)不是极值点\n',xx(i),yy(i));
    else
    fprintf('无法判断(%f,%f)是否是极值点\n',xx(i),yy(i));
    end
end

为什么按照数学建模与算法这本书敲的程序得出的结果和书上不一样呢

img

img

img

  • 写回答

2条回答 默认 最新

  • 配电网和matlab 2023-09-05 12:51
    关注

    可能是版本不同,函数用法有变化,你这样修改一下就可以了:

     
    clc
    clear
    syms x y
    f = x^3 -y^3 + 3*x^2 +3*y^2 -9*x;
    df = jacobian(f);%求一阶偏导
    d2f = jacobian(df);%求Hessian阵
    [xx,yy] = solve(df);
    xx = double(xx);
    yy = double(yy);
    for i = 1:length(xx)
        a = subs(d2f,{x,y},{xx(i),yy(i)}); 
        b = eig(a);
        f = subs(f,{x,y},{xx(i),yy(i)});
        f1 = xx(i)^3 -yy(i)^3 + 3*xx(i)^2 +3*yy(i)^2 -9*xx(i);
       %求矩阵特征值
        if all(b>0)
        fprintf('(%f,%f)是极小值点,对应的极小值为%f\n',xx(i),yy(i),f1);
        elseif all(b<0)
        fprintf('(%f,%f)是极大值点,对应的极大值为%f\n',xx(i),yy(i),f1);
        elseif any(b>0)&&any(b<0)
        fprintf('(%f,%f)不是极值点\n',xx(i),yy(i));
        else
        fprintf('无法判断(%f,%f)是否是极值点\n',xx(i),yy(i));
        end
    end
    
    

    运行结果:

    img


    有用希望可以采纳一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 已采纳回答 9月5日
  • 创建了问题 9月4日