首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Matlab上求解多项式方程的转折点?

如何在Matlab上求解多项式方程的转折点?
EN

Stack Overflow用户
提问于 2021-03-01 21:43:28
回答 2查看 176关注 0票数 0

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

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

现在,我知道转折点是x=2,因为我手动计算了f的一阶导数,并使它等于0,但当我尝试用fsolve在matlab上做这件事时,我没有做到。我这样做了:

代码语言:javascript
复制
x=sym('x'); 
f=x^4-8*x^3+24*x^2-32*x;
f1=diff(f,x,1) 

我不知道如何继续(我的方法很可能是错误的,因为我一直从数学的角度来看待这个问题)

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

EN

回答 2

Stack Overflow用户

发布于 2021-03-01 23:30:09

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

代码语言:javascript
复制
syms x
f=x^4-8*x^3+24*x^2-32*x;
f1=matlabFunction(diff(f,x,1))
result = fsolve(f1, 0)
票数 1
EN

Stack Overflow用户

发布于 2021-03-02 00:29:23

您的等式在x=2附近似乎几乎是平坦的。所以fsolve可以完成这项工作,但精度不会很高。

幸运的是,找到了根(所有的根!)是我们可以在数学上做的事情:

代码语言:javascript
复制
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

为什么它会起作用?检查wikipedia article about companion matrix

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66423223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档