matlab - 如何在Matlab上找到多项式方程的转折点?
问题描述
我有一个函数是 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=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
为什么它有效?查看关于伴随矩阵的维基百科文章
推荐阅读
- django - 社区网站上应该有身份验证吗?
- javascript - react scrollTo 不是一个函数
- nginx - phpmyadmin 未加载 png(图像) nginx
- android - Firebase 嵌套子项的 Recycleview 无法显示
- javascript - 在加载视图或显示页面时使用进度条
- apache-kafka - Spring Cloud Stream Kafka Binder autoCommitOnError=false 得到意外行为
- php - 访问代码中的应用程序 url 时 Laravel 5 配置缓存问题
- c# - 如何在c#中的编译期间循环遍历泛型类型
- jasmine - 我们可以将哪些茉莉花预期条件用于测试用例?
- datatables - 基于列的 DataTables row.add()