matalb初学者提问 望各位多多指教如何求一个函数的的极值一种方法是用fminbnd 先画图像 观察好极值点所在的区间后在这个区间内求最小值 或者最大值就是它的极值但是当极值点很多的时候,
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/17 21:39:47
matalb初学者提问 望各位多多指教如何求一个函数的的极值一种方法是用fminbnd 先画图像 观察好极值点所在的区间后在这个区间内求最小值 或者最大值就是它的极值但是当极值点很多的时候,
matalb初学者提问 望各位多多指教
如何求一个函数的的极值
一种方法是用fminbnd 先画图像 观察好极值点所在的区间后在这个区间内求最小值 或者最大值就是它的极值
但是当极值点很多的时候,这种方法就比较麻烦了
我的另一种想法是用 diff求一阶导后再求其=0的点
但是不知道后面一种想法用什么函数能实现
例如
syms x
y='x^2*sin(x^2-x-2)';
如何求其极值
matalb初学者提问 望各位多多指教如何求一个函数的的极值一种方法是用fminbnd 先画图像 观察好极值点所在的区间后在这个区间内求最小值 或者最大值就是它的极值但是当极值点很多的时候,
怎么说呢,实际上转移到了函数求解的问题
>> syms x
y1=diff(x^2*sin(x^2-x-2))
y1 =
2*x*sin(x^2-x-2)+x^2*cos(x^2-x-2)*(2*x-1)
一阶导数很容易求,但怎么求其零点是关键
我搜集了一些方案,:roots()、polyder()、fzero()、solve()
前两个都只能解决多项式问题,对于非多项式的都无能为力
solve针对于线性方程组,可批量解决问题但对于非多项式的仍是无能为力
只有fzero()能求出上述函数的零点,但需要给定一个初值,且只能求出距所给初值最近的一个根
fzero('2*x*sin(x^2-x-2)+x^2*cos(x^2-x-2)*(2*x-1)',2)
ans =
1.5951
且,所取初值离真实根太远则求出错误根
>> fzero('2*x*sin(x^2-x-2)+x^2*cos(x^2-x-2)*(2*x-1)',10)
ans =
10.2436
>> fzero('2*x*sin(x^2-x-2)+x^2*cos(x^2-x-2)*(2*x-1)',100)
ans =
99.5866
可能是本人修行太浅,我得出了这样的结论,毕竟算法有局限性,不能较好的求解函数,造成不能较好的求解极值,只能通过图像人工的弥补
个人意见,姑且一观