sujian0124 发表于 2007-6-13 16:43

帮我看看这个程序错误在哪

我的这个是遗传算法的程序,大家帮我看看错误在哪里啊?谢谢~!

function f1=f(x);
a=58262.4./(x(:,4).*x(:,3).*x(:,1).*(0.08+0.79.*x(:,2)));
b=1+1.33.*a./1000;
c=(1.59/100000000).*x(:,2)./(x(:,2)+0.1).*x(:,3).^2.*x(:,1).^2;
d=(5.62/1000000000000.*x(3)^3.*x(:,1).^2.*x(:,4))./b;
e=0.55/100000000.*x(:,1).^2.*x(:,3).^3.*(1./(x(:,2)+0.1));
p=(2.79/100000000).*(x(:,2)./(x(:,2)+0.1)).*(x(:,3).^3.*x(:,1).^2./x(:,6));
g=7.69/1000000000000.*x(:,3).^3.*x(:,1).^2.*x(:,4)./b;
h=0.25/100000000.*((x(:,3).^3.*x(:,1).^2)./x(:,2)+0.1);
i=9.25.*(141.92+a)./(x(:,3).*x(:,1));
j=c+d+e;
k=p+g+h;
l=j+k;
m=(1+i.*j).*l.*1.1261^2.*(1+((1+i.*j).*l.*1.1261).^2);
n=(m+i).^2;
f1=-1/sqrt(1.2161^2+n);
function f2=f(x)
a1=58262.4./(x(:,4).*x(:,3).*x(:,1).*(0.08+0.79.*x(:,2)))
b1=1+1.33.*a1./1000
c1=(1.59/100000000).*(x(:,2)./(x(:,2)+0.1)).*x(:,3).^2.*x(:,1).^2
d1=(5.62/1000000000000.*x(3).^3.*x(:,1).^2.*x(:,4))./b1
e1=0.55/100000000.*x(:,1).^2.*x(:,3).^3.*(1./(x(:,2)+0.1))
p1=(2.79/100000000).*(x(:,2)./(x(:,2)+0.1)).*(x(:,3).^3.*x(:,1).^2./x(:,6))
g1=7.69/1000000000000.*x(:,3).^3.*x(:,1).^2.*x(:,4)./b1
h1=0.25/100000000.*((x(:,3).^3.*x(:,1).^2)./x(:,2)+0.1)
i1=9.25.*(141.92+a1)./(x(:,3).*x(:,1))
j1=c1+d1+e1
k1=p1+g1+h1
l1=j1+k1
m1=(1+i1*j1).*l1.*1.1261^2.*(1+((1+i1.*j1).*l1.*1.1261).^2)
n1=(m1+i1).^2
p1=sqrt(1.2161^2+n1)
f2=(p1.^2.*x(:,3).*x(:,1))/(16.67.*2.*x(:,4));






>>NIND=100;
>>MAXGEN=50;
>>NVAR=6;
>>PRECI=20;
>>GGAP=0.9;
>>trace1=[];trace2=[];trace3=[];
>>FieldD=,;;rep(,)];
>>Chrom=CRTBP(NIND,NVAR*PRECI);
>>v=BS2RV(Chrom,FieldD);
>>gen=1;
>>while gen<MAXGEN,
=size(Chrom);
M=fix(NIND/2);
objV1=f1(v(1:M,:));
FitnV1=ranking(objV1);
SelCh1=select('sus',Chrom(1:M,:),FitnV1,GGAP);
ObjV2=f2(v(M+1:NIND,:));
FitnV2=ranking(ObjV2);
SelCh2=select('sus',Chrom((M+1):NIND,:),FitnV2,GGAP);
SelCh=;
SelCh=recombin('xovsp',SelCh,0.7);
Chrom=mut(SelCh);
v=BS2RV(Chrom,FieldD);
trace1(gen,1)=min(f1(v));
trace1(gen,2)=sum(f1(v))/length(f1(v));
trace2(gen,1)=min(f2(v));
trace2(gen,2)=sum(f2(v))/length(f2(v));
trace3(gen,1)=min(f1(v)+f2(v));
trace3(gen,2)=sum(f1(v))/length(f1(v))+sum(f2(v))/length(f2(v));
gen=gen+1;
end

[ 本帖最后由 eight 于 2007-6-13 16:45 编辑 ]

eight 发表于 2007-6-13 16:46

原帖由 sujian0124 于 2007-6-13 16:43 发表 http://www.chinavib.com/forum/images/common/back.gif
我的这个是遗传算法的程序,大家帮我看看错误在哪里啊?谢谢~!

function f1=f(x);
a=58262.4./(x(:,4).*x(:,3).*x(:,1).*(0.08+0.79.*x(:,2)));
b=1+1.33.*a./1000;
c=(1.59/100000000).*x(:,2)./(x(:,2 ...

请从相反角度去思考你的问题是否表述完整了

sujian0124 发表于 2007-6-13 17:27

谢谢,我刚刚入门的,你看看我哪里错了,好不好帮我改一下,谢谢

eight 发表于 2007-6-13 17:39

原帖由 sujian0124 于 2007-6-13 17:27 发表 http://www.chinavib.com/forum/images/common/back.gif
谢谢,我刚刚入门的,你看看我哪里错了,好不好帮我改一下,谢谢

是否入门与表述是否清楚一点关系也没有。

你的错误是指程序可以运行,但是得不到结果,还是程序有语法错误,不能运行呢?如果是后者,请附上出错信息,而不是要别人猜,或者 copy 你的代码来运行。要知道,别人的时间也很有限。此外,由于你的函数带输入参数,你又不提供测试数据,别人如何帮你?

请先看看置顶贴:聚宝盆,再重新整理你的问题上来

eight 发表于 2007-6-13 17:41

再者,你贴的两个部分我根本不知道是什么关系,前者是 m 文件(即函数定义),后者是脚本文件(即函数调用)吗?但是我在后者中找不到调用前者的语句。

最后,你的两个函数定义都用同一个 f 作为函数名,自己想想是否行得通

sujian0124 发表于 2007-6-14 09:58

明天就要交了

前半部分是M文件   后面是函数调用文件

我的这个程序是遗传优化电机结构的。我也是照葫芦画瓢,从别的书上改的,帮我改一下

谢谢eight:handshake ,明天就要交了。

function f1=f(x);
a=58262.4./(x(:,4).*x(:,3).*x(:,1).*(0.08+0.79.*x(:,2)));
b=1+1.33.*a./1000;
c=(1.59/100000000).*x(:,2)./(x(:,2)+0.1).*x(:,3).^2.*x(:,1).^2;
d=(5.62/1000000000000.*x(3)^3.*x(:,1).^2.*x(:,4))./b;
e=0.55/100000000.*x(:,1).^2.*x(:,3).^3.*(1./(x(:,2)+0.1));
p=(2.79/100000000).*(x(:,2)./(x(:,2)+0.1)).*(x(:,3).^3.*x(:,1).^2./x(:,6));
g=7.69/1000000000000.*x(:,3).^3.*x(:,1).^2.*x(:,4)./b;
h=0.25/100000000.*((x(:,3).^3.*x(:,1).^2)./x(:,2)+0.1);
i=9.25.*(141.92+a)./(x(:,3).*x(:,1));
j=c+d+e;
k=p+g+h;
l=j+k;
m=(1+i.*j).*l.*1.1261^2.*(1+((1+i.*j).*l.*1.1261).^2);
n=(m+i).^2;
f1=-1/sqrt(1.2161^2+n);
function f2=f(x);
a1=58262.4./(x(:,4).*x(:,3).*x(:,1).*(0.08+0.79.*x(:,2)));
b1=1+1.33.*a1./1000;
c1=(1.59/100000000).*(x(:,2)./(x(:,2)+0.1)).*x(:,3).^2.*x(:,1).^2;
d1=(5.62/1000000000000.*x(3).^3.*x(:,1).^2.*x(:,4))./b1;
e1=0.55/100000000.*x(:,1).^2.*x(:,3).^3.*(1./(x(:,2)+0.1));
p1=(2.79/100000000).*(x(:,2)./(x(:,2)+0.1)).*(x(:,3).^3.*x(:,1).^2./x(:,6));
g1=7.69/1000000000000.*x(:,3).^3.*x(:,1).^2.*x(:,4)./b1;
h1=0.25/100000000.*((x(:,3).^3.*x(:,1).^2)./x(:,2)+0.1);
i1=9.25.*(141.92+a1)./(x(:,3).*x(:,1));
j1=c1+d1+e1;
k1=p1+g1+h1;
l1=j1+k1;
m1=(1+i1*j1).*l1.*1.1261^2.*(1+((1+i1.*j1).*l1.*1.1261).^2);
n1=(m1+i1).^2;
p1=sqrt(1.2161^2+n1);
f2=(p1.^2.*x(:,3).*x(:,1))/(16.67.*2.*x(:,4));






>>NIND=100;
>>MAXGEN=50;
>>NVAR=6;
>>PRECI=20;
>>GGAP=0.9;
>>trace1=[];trace2=[];trace3=[];
>>FieldD=,);;rep(,)];
>>Chrom=CRTBP(NIND,NVAR*PRECI);
>>v=BS2RV(Chrom,FieldD);
>>gen=1;
>>while gen<MAXGEN,
=size(Chrom);
M=fix(NIND/2);
objV1=f1(v(1:M,:));
FitnV1=RANKING(objV1);
SelCh1=SELECT('sus',Chrom(1:M,:),FitnV1,GGAP);
ObjV2=f2(v(M+1:NIND,:));
FitnV2=RANKING(ObjV2);
SelCh2=SELECT('sus',Chrom((M+1):NIND,:),FitnV2,GGAP);
SelCh=;
SelCh=RECOMBIN('xovsp',SelCh,0.7);
Chrom=MUT(SelCh);
v=BS2RV(Chrom,FieldD);
trace1(gen,1)=min(f1(v));
trace1(gen,2)=sum(f1(v))/length(f1(v));
trace2(gen,1)=min(f2(v));
trace2(gen,2)=sum(f2(v))/length(f2(v));
trace3(gen,1)=min(f1(v)+f2(v));
trace3(gen,2)=sum(f1(v))/length(f1(v))+sum(f2(v))/length(f2(v));
gen=gen+1;
end

??? Error using ==> SELECT
Chrom and FitnV disagree

[ 本帖最后由 eight 于 2007-6-14 10:28 编辑 ]

花如月 发表于 2007-6-14 10:00

路过,帮你顶下,指明找8兄:@D

xjzuo 发表于 2007-6-14 15:31

function f1 f2 的定义写法明显有问题,请仔细检查一下。
页: [1]
查看完整版本: 帮我看看这个程序错误在哪