www.mh456.com防采集。
求函数极值,可以用copyfminsearch()极小值函2113数来解决。求函数极大值5261就求函数极4102小值的1653反函数。
syms x v=int(pi*x^2*sin(x)^2,0,pi);double(v) ans = 13.7674 另一种算法: x=linspace(0,pi,50);v=trapz(x,pi*x.^2.*sin(x).^2) v = 13.7674
1、函数极小值的求法
能解释一下为什么要用模拟退火法吗? 这个函数的最小值直接观察就能看出来在x=y=0处,或者用fminunc也可以求解: x=fminunc(@(x)sin(x(1)*x(2))+x(1)^2+x(2)^2,[0 0]) 当然,用模拟退火算法也很简单,换一下函数即可: x=simulannealbnd(@(x)sin
>> func=@(x)(sin(x)/x^2+x*cos(x));
这是当然的。。因为这个函数本来在0点就没有定义,不妨写个if语句 if x=0 f(x)=1; end 这样的话整个函数就要用m文件储存了 function z=f(x) if x=0 z=1; else z=sin(x)/x; end
>> [x,f]=fminsearch(func,4)
f = @(x)(sin(1.006*x).^2);format long;m = [100,200,1000];for i=1:3 %区间分n段等长子区间 n = m(i); xn = (0:n-1)/n*pi; %xn(i)为第i段区间左端点值 d = pi/n; %子区间宽度 xnm = xn+d/2; %区间中点 ynm = f(xnm); %区间中点的函数值 S(i) =
x =
3.4427 %极小值点
syms x >> limit(sin(x)/x,x,0) %x趋于0时的极限
f =
-3.3128 %极小值
2、函数极大值的求法
>> func=@(x)-(sin(x)/x^2+x*cos(x));
>> [x,f,h]=fminsearch(func,4)
x =
6.4407 %极大值点
f =
-6.3647 %极大值
求连续复函数的极值和拐点制,必要条件就是2113f'(x)=0和f''(x)=0。由于f'(x)=0和f''(x)=0在指定区间5261都有多个根,难点就4102在1653于怎样求出所有的根。我找到一个利用切比雪夫多项式逼近来求解任意函数指定区间内的所有实根的程序,用于求解本问题比较有效(n需要取比较大),请参见附件。 求解的代码如下:syms xf=x*sin(x*cos(x));df=diff(f);figure(1)clfx0=FindRealRoots(eval(['@(x)' char(df)]),0,4*pi,100);ezplot(f,[0 4*pi])hold onplot(x0,subs(f,x0),'ro')d2f=diff(f,2);figure(2)clfsubplot 211x0=FindRealRoots(eval(['@(x)' char(d2f)]),0,4*pi,100);ezplot(f,[0 4*pi])hold onplot(x0,subs(f,x0),'g>')subplot 212ezplot(df,[0 4*pi])hold onplot(x0,subs(df,x0),'ro')axis tight,用fminsearch(fun,x0)求解,该函数适应求函数的最小值。对于求函数的最大值问题,只要把函数写成最小值问题,即-fun。运算结果,当x=1.09063时,有最大值g=0.5265内容来自www.mh456.com请勿采集。