如何在Matlab上找到多项式方程的转折点?

如何在Matlab上找到多项式方程的转折点?,matlab,equation-solving,Matlab,Equation Solving,我有一个函数,它是f=x^4-8x^3+24^2-32x 我需要使用内置命令“fsolve”找到转折点(即曲线的最大值或最小值) 现在,我知道转折点是x=2,因为我通过找到f的一阶导数并使其等于零来手动计算,但当我尝试在matlab上使用fsolve进行计算时,我没有做到这一点。我这样做: x=sym('x'); f=x^4-8*x^3+24*x^2-32*x; f1=diff(f,x,1) 我不知道如何继续下去(我的方法很可能是错误的,因为我一直从数学的角度来看待这个问题) 有人知道我怎

我有一个函数,它是f=x^4-8x^3+24^2-32x

我需要使用内置命令“fsolve”找到转折点(即曲线的最大值或最小值)

现在,我知道转折点是x=2,因为我通过找到f的一阶导数并使其等于零来手动计算,但当我尝试在matlab上使用fsolve进行计算时,我没有做到这一点。我这样做:

x=sym('x'); 
f=x^4-8*x^3+24*x^2-32*x;
f1=diff(f,x,1) 
我不知道如何继续下去(我的方法很可能是错误的,因为我一直从数学的角度来看待这个问题)


有人知道我怎么写代码吗?

fsolve
用于数值求解方程。因此,首先需要从符号表达式创建一个matlab函数:

syms x
f=x^4-8*x^3+24*x^2-32*x;
f1=matlabFunction(diff(f,x,1))
result = fsolve(f1, 0)

fsolve
用于数值求解方程。因此,首先需要从符号表达式创建一个matlab函数:

syms x
f=x^4-8*x^3+24*x^2-32*x;
f1=matlabFunction(diff(f,x,1))
result = fsolve(f1, 0)

x=2
附近,您的方程似乎几乎是平的。因此,
fsolve
可以完成这项工作,但精度不会太高

幸运的是,我们可以通过数学方法找到多项式的根(所有根!):

sym x
% Get the coefficient of the polynome
c      = sym2poly(diff(x^4-8*x^3+24*x^2-32*x))
% Create the Frobenius companion matrix
l        = length(c);
A        = diag(ones(l-2,1),-1)
A(:,end) = -c(l:-1:2)./c(1)
% Get the roots
roots  = eig(A)

% roots =
% 
%    2.0000 + 0.0000i
%    2.0000 - 0.0000i
%    2.0000 +      0i

它为什么有效?检查

您的方程式在
x=2附近几乎是平的。因此,
fsolve
可以完成这项工作,但精度不会太高

幸运的是,我们可以通过数学方法找到多项式的根(所有根!):

sym x
% Get the coefficient of the polynome
c      = sym2poly(diff(x^4-8*x^3+24*x^2-32*x))
% Create the Frobenius companion matrix
l        = length(c);
A        = diag(ones(l-2,1),-1)
A(:,end) = -c(l:-1:2)./c(1)
% Get the roots
roots  = eig(A)

% roots =
% 
%    2.0000 + 0.0000i
%    2.0000 - 0.0000i
%    2.0000 +      0i

它为什么有效?检查

非常感谢,我会尝试这个方法非常感谢,我会尝试这个方法,这是fsolve的替代方法?如果你有符号数学工具箱,我想…对于多项式根的数值解,只需使用MATLAB roots()函数,它在后台使用eig()技术。无需手动创建伴随矩阵并调用eig(),因为root()已经为您完成了这项工作。@JamesTursa,ho!你说得对!我忘了这个函数已经存在了,谢谢。所以,这是fsolve的替代方案?如果你有符号数学工具箱,我想…对于多项式根的数值解,只需使用MATLAB roots()函数,它在后台使用eig()技术。无需手动创建伴随矩阵并调用eig(),因为root()已经为您完成了这项工作。@JamesTursa,ho!你说得对!我忘了这个功能已经存在了,谢谢。