声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2099|回复: 7

[编程技巧] 帮我看看这个程序错误在哪

[复制链接]
发表于 2007-6-13 16:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

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([PRECI],[1,NVAR];[20,10,30,10,10,20;40,20,50,30,30,40];rep([1;0;1;1],[1,NVAR])];
>>Chrom=CRTBP(NIND,NVAR*PRECI);
>>v=BS2RV(Chrom,FieldD);
>>gen=1;
>>while gen<MAXGEN,
[NIND,N]=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=[SelCh1;SelCh2];
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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-6-13 16:46 | 显示全部楼层
原帖由 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 ...


请从相反角度去思考你的问题是否表述完整了
 楼主| 发表于 2007-6-13 17:27 | 显示全部楼层
谢谢,我刚刚入门的,你看看我哪里错了,好不好帮我改一下,谢谢
发表于 2007-6-13 17:39 | 显示全部楼层
原帖由 sujian0124 于 2007-6-13 17:27 发表
谢谢,我刚刚入门的,你看看我哪里错了,好不好帮我改一下,谢谢


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

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

请先看看置顶贴:聚宝盆,再重新整理你的问题上来
发表于 2007-6-13 17:41 | 显示全部楼层
再者,你贴的两个部分我根本不知道是什么关系,前者是 m 文件(即函数定义),后者是脚本文件(即函数调用)吗?但是我在后者中找不到调用前者的语句。

最后,你的两个函数定义都用同一个 f 作为函数名,自己想想是否行得通
 楼主| 发表于 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([PRECI],[1,NVAR]);[20,10,30,10,10,20;40,20,50,30,30,40];rep([1;0;1;1],[1,NVAR])];
>>Chrom=CRTBP(NIND,NVAR*PRECI);
>>v=BS2RV(Chrom,FieldD);
>>gen=1;
>>while gen<MAXGEN,
[NIND,N]=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=[SelCh1;SelCh2];
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
发表于 2007-6-14 15:31 | 显示全部楼层
function f1 f2 的定义写法明显有问题,请仔细检查一下。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-12 12:52 , Processed in 0.086284 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表