登录论坛

查看完整版本 : [MATLAB毕业设计] 关于优化函数程序错误的问题


阿童木
2009-04-20, 17:06
大家好,我正在做一个关于优化函数的问题,下面是我的程序,其中k,c,omega是变量,整个函数就是要在不同的k,c,omega取值时使IGv达到最小,兄弟姐妹们看看我的程序有没有什么问题啊,我都调试两天了,还是不得行,各们帮帮忙噢!(本人还是新手,边做毕业设计边学的MATLAB,各位不要见笑哈)
%%IGvmin is global minimum
IGvmin=1000000000000000;
%%exmperimantal values
M=1000000;
for c=0:1:100000;
for omiga=0:1:100;
for k=100000:100:100000000;
%%igvlmax is local maximum;
IGvlmax=0;
%%IGv’s calculational equation
IGv=sqrt(16*c.^4*omiga.^4+16*k.^4+4*M.^2*k.^2*omiga.^4+32*c.^2*omiga.^2*k.^2-16*M*k.^3*omiga.^2+4*M.^2*c.^2*omiga.^6)/((-M*omiga.^2+2*k).^2+4*c.^2*omiga.^2);
if IGvmin>=IGvlmax;
IGvlmax=IGvmin;
end;
end
if IGvlmax<=IGvmin;
IGvmin=IGvlmax;
Kmin=k; cmin=c;
end
end

if IGvlmin>=IGvmax
k=kmin
c=Cmin
for omiga=0:1:100;
IGv(i)=sqrt(16*c.^4*omiga.^4+16*k.^4+4*M.^2*k.^2*omiga.^4+32*c.^2*omiga.^2*k.^2-16*M*k.^3*omiga.^2+4*M.^2*c.^2*omiga.^6)/((-M*omiga.^2+2*k).^2+4*c.^2*omiga.^2);
End;
for i=0:1:100;
plot(i,IGv(i))

laosam280
2009-04-21, 16:20
这样就可以了,其实程序没有什么大问题,就是少了几个end和多了几处分号

%%IGvmin is global minimum
IGvmin=1000000000000000;
%%exmperimantal values
M=1000000;
for c=0:1:100000
for omiga=0:1:100
for k=100000:100:100000000
%%igvlmax is local maximum;
IGvlmax=0;
%%IGv’s calculational equation
IGv=sqrt(16*c.^4*omiga.^4+16*k.^4+4*M.^2*k.^2*omiga.^4+32*c.^2*omiga.^2*k.^2-16*M*k.^3*omiga.^2+4*M.^2*c.^2*omiga.^6)/((-M*omiga.^2+2*k).^2+4*c.^2*omiga.^2);
if IGvmin>=IGvlmax
IGvlmax=IGvmin;
end
end
if IGvlmax<=IGvmin
IGvmin=IGvlmax;
Kmin=k; cmin=c;
end
end
end

if IGvlmin>=IGvmax
k=kmin
c=Cmin
end
for omiga=0:1:100
IGv(i)=sqrt(16*c.^4*omiga.^4+16*k.^4+4*M.^2*k.^2*omiga.^4+32*c.^2*omiga.^2*k.^2-16*M*k.^3*omiga.^2+4*M.^2*c.^2*omiga.^6)/((-M*omiga.^2+2*k).^2+4*c.^2*omiga.^2);
end
for i=0:1:100
plot(i,IGv(i))
hold on;
end

阿童木
2009-04-21, 20:14
楼上的好人哪```万分感谢!```GOD BLESS YOU!

阿童木
2009-04-22, 09:55
昨晚我运行了一下程序,IGv表达式的那一行出现divide by zero的警告,这是什么意思啊?