24小时热门版块排行榜    

查看: 2344  |  回复: 1

天微凉61

铁虫 (初入文坛)

[求助] matlab求函数所有极小值点

function prl()             %考虑第二种情况widely spaced islands
a=sort(80*rand(1,5));    %生成一组随机数然后从小到大排序
v(1)=a(1)+0.5*(a(2)-a(1)); %由Voronoi polygon算第一个island的体积
for i=2:4,
v(i)=(a(i+1)-a(i-1))*0.5;  %由Voronoi polygon算2到n-1个位置体积
end
v(5)=80-a(5)+0.5*(a(5)-a(4)); %最后一个island的体积
y=[zeros(1,length(a));v];
subplot(2,1,1);
plot([a;a],y,'k');
axis([0,80,0,100]);
title('layer 1');
syms x
f=((x^2+1)^(-3/2))*(1-3/(x^2+1));
for i=1:5,
   f=f+(((x-a(i))^2+1)^(-3/2))*(1-3/((x-a(i))^2+1)); %由张力公式叠加算第二层的岛的位置
end
h=diff(f,x,1);  %对总张力公式求一阶导
g=diff(f,x,2);  %求二阶导
h=inline(vectorize(f),'x');
options=optimset('Display','off');
k=1
q=zeros(1,80);
for j=0:300   
    q(k)=fzero(h,j,options); %找出一阶导数的零点
k=k+1;
end
p=zeros(1,80);
p(1)=q(1);
n=1;
for m=1:k
   % if q(m)~=p(n)
        if g(q(m))>0    %判断二阶导数是否大于零
             n=n+1;
             p(n)=q(m); %得到极值点
        end
    %end
end
v=zeros(1,80);                    %求第二层体积
v(1)=p(1)+0.5*(p(2)-p(1));
for i=2:m-1,
    v(i)=(p(i+1)-p(i-1))*0.5;
end
v(length(p))=80-p(length(p))+0.5*(p(length(p))-p(length(p)-1));
subplot(2,1,2)
plot([p;p],[zeros(1,length(p));v],'k')
axis([0,80,0,100])
title('layer 2');
            请问哪错了,求二至n层核的位置及体积,核的位置为f极小值点,f为张力公式,根据核的位置叠加求极小值,极小值就是下一层核位置,最后根据泰森边形球体积,求大神指导,小弟感激不尽[ Last edited by 天微凉61 on 2013-4-29 at 10:47 ]
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   关注TA 给TA发消息 送TA红花 TA的回帖

天微凉61

铁虫 (初入文坛)

不用了
2楼2013-05-19 12:35:13
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 天微凉61 的主题更新
信息提示
请填处理意见