matlab遗传算法拟合完全二次函数,使用MATLAB遗传算法进行数据拟合,运行结果不正常...

大神,我用你的程序改了一下总是报错,能给指点一下么,谢谢!下面是我附的程序及目标曲线

function  fit=fitness(x)

load bb.txt%将b.txt放在工作空间目录中

p2=bb;

pi=3.14;

lamda = 0.022;

k = 2*pi/lamda;

d = 0.02486;

p2m=size(p2,1);

[xm,xn]=size(x);

fit=zeros(xm,1);

for i=1:xm

theta=-90:1:90;

for m=1:length(theta)

pp=x(i,1)*exp(j*x(i,2)*pi/360)*exp(j*1*k*d*sin(theta(m)*pi/180))+...

x(i,3)*exp(j*x(i,4)*pi/360)*exp(j*2*k*d*sin(theta(m)*pi/180))+...

x(i,5)*exp(j*x(i,6)*pi/360)*exp(j*3*k*d*sin(theta(m)*pi/180))+...

x(i,7)*exp(j*x(i,8)*pi/360)*exp(j*4*k*d*sin(theta(m)*pi/180))+...

x(i,9)*exp(j*x(i,10)*pi/360)*exp(j*5*k*d*sin(theta(m)*pi/180))+...

x(i,11)*exp(j*x(i,12)*pi/360)*exp(j*6*k*d*sin(theta(m)*pi/180))+...

x(i,13)*exp(j*x(i,14)*pi/360)*exp(j*7*k*d*sin(theta(m)*pi/180))+...

x(i,15)*exp(j*x(i,16)*pi/360)*exp(j*8*k*d*sin(theta(m)*pi/180))+...

x(i,17)*exp(j*x(i,18)*pi/360)*exp(j*9*k*d*sin(theta(m)*pi/180))+...

x(i,19)*exp(j*x(i,20)*pi/360)*exp(j*10*k*d*sin(theta(m)*pi/180))+...

x(i,21)*exp(j*x(i,22)*pi/360)*exp(j*11*k*d*sin(theta(m)*pi/180))+...

x(i,23)*exp(j*x(i,24)*pi/360)*exp(j*12*k*d*sin(theta(m)*pi/180));

%  ff=sum(pp);

end

end

fff=abs(pp);

fit(i)=sqrt(sum((fff-p2).^2));%目标函数,最小二乘法定义的目标函数,方差最小

%% 绘图

if xm==1

i=1;

theta=-90:1:90;

for m=1:length(theta)

pp=x(i,1)*exp(j*x(i,2)*pi/360)*exp(j*1*k*d*sin(theta(m)*pi/180))+...

x(i,3)*exp(j*x(i,4)*pi/360)*exp(j*2*k*d*sin(theta(m)*pi/180))+...

x(i,5)*exp(j*x(i,6)*pi/360)*exp(j*3*k*d*sin(theta(m)*pi/180))+...

x(i,7)*exp(j*x(i,8)*pi/360)*exp(j*4*k*d*sin(theta(m)*pi/180))+...

x(i,9)*exp(j*x(i,10)*pi/360)*exp(j*5*k*d*sin(theta(m)*pi/180))+...

x(i,11)*exp(j*x(i,12)*pi/360)*exp(j*6*k*d*sin(theta(m)*pi/180))+...

x(i,13)*exp(j*x(i,14)*pi/360)*exp(j*7*k*d*sin(theta(m)*pi/180))+...

x(i,15)*exp(j*x(i,16)*pi/360)*exp(j*8*k*d*sin(theta(m)*pi/180))+...

x(i,17)*exp(j*x(i,18)*pi/360)*exp(j*9*k*d*sin(theta(m)*pi/180))+...

x(i,19)*exp(j*x(i,20)*pi/360)*exp(j*10*k*d*sin(theta(m)*pi/180))+...

x(i,21)*exp(j*x(i,22)*pi/360)*exp(j*11*k*d*sin(theta(m)*pi/180))+...

x(i,23)*exp(j*x(i,24)*pi/360)*exp(j*12*k*d*sin(theta(m)*pi/180));

end

fff=abs(pp);

figure()

scatter(1:p2m,fff)

hold on

plot(dBy,'r')

scatter(1:p2m,p2,'full')

plot(p2,'b')

legend('','拟合数据','','原始数据')

figure()

plot(x,'r')

end

end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%b.txt(目标曲线)

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.537001

0.540828

0.545030

0.549617

0.554601

0.559996

0.565816

0.572078

0.578799

0.585999

0.593697

0.601917

0.610683

0.620023

0.629965

0.640542

0.651788

0.663741

0.676441

0.689933

0.704266

0.719494

0.735674

0.752870

0.771150

0.790593

0.811280

0.833305

0.856768

0.881780

0.908466

0.936960

0.967416

1.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

0.000000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值