如何在Matlab上找到多项式方程的转折点?
我有一个函数,它是f=x^4-8x^3+24^2-32x 我需要使用内置命令“fsolve”找到转折点(即曲线的最大值或最小值) 现在,我知道转折点是x=2,因为我通过找到f的一阶导数并使其等于零来手动计算,但当我尝试在matlab上使用fsolve进行计算时,我没有做到这一点。我这样做:如何在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) 我不知道如何继续下去(我的方法很可能是错误的,因为我一直从数学的角度来看待这个问题) 有人知道我怎
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!你说得对!我忘了这个功能已经存在了,谢谢。