首先你的思路有一些问题。
你求周期的方法大概是:1、把函数减去最小值(函数图像抬上去);2、找到这个时候的零点;3、这个时候的零点就是一个最小值点;4、用这个最小值点减去之前用fmin函数求得的最小值点,就是周期。
这样的思路不好。
因为不能确定两次最小值点会不会求到一起去了,因为你不知道fzero和fminbnd函数封装在里面的东西是什么,机理是什么。
我使用了一种数值形式的求解,供参考。
clear;clc;clf
x=-10:0.001:10;%控制数值计算精度
% syms x
f=cos(x).exp(2sin(x))-sin(x).exp(2cos(x));
plot(x,f)
grid on
% figure
% plot(x,-f);grid on
f0=@(x)cos(x).exp(2sin(x))-sin(x).exp(2cos(x));
[xmin,ymin]=fminbnd(f0,-10,10);
e=0.000001;%精度控制因子
a=find(f<=ymin+e);%控制最小值精度
zhouqi1=abs(x(a(2))-x(a(1)));
zhouqi2=abs(x(a(3))-x(a(2)));
zhouqi=(zhouqi1+zhouqi2)/2
基本沿用了你的代码。首先控制x的精确度,来计算f,这里大概取了0.001的精确度。然后计算出20001个对应的f值。
主要增加了一句“a=find(f<=ymin+0.000001);%控制最小值精度”,这里是使用find函数来寻找刚才保存的f值。
意思为:在f矩阵中寻找刚才用fminbnd函数求得的最小值。因为数值计算不可能完美的找到fminbnd函数给出的最小值(精度不够),所以加入了一个精度控制因子e,他的意思为:控制fminbnd给出的最小值ymin,让他能在我刚才求出来的f矩阵中找到相应的值。
这个e是需要手动调控。这里e=0.000001的时候,a矩阵中刚好得到三个值。
5918 12201 18484
分别是3个最小值点
这三个最小值点最近的两个之间的距离,就是该函数的周期
所以计算了点12之间的距离和13之间的距离。取平均值就是比较精确的周期值。(当然了高中学过,这里点2其实是没发挥功能的,但是没办法,如果有4个最小值点,那么点2和点4可以打配合)
这里能看出来,周期已经超出了matlab的精度。所以都是一样的。
回述回去,可以看出来,明显是fminbnd函数的精度不够,拉低了咱们周期计算精度。
好了以上就是我的思路,觉得有用的话麻烦点歌有用咯~学习加油