
例如:
已知数据队列 buf=5410
x取值 1:n n是队列长度
函数 f(x)=a+bsin(cx+d)
avg 是队列平均值
a b c d 为参数 a范围 (2/3,1)avg
b范围 (0,1/3)avg
c的范围 (0,24pi)
d (0,2pi)
1、首先定义目标函数
function y=ga_curfit(x)
global ydata n
t=1:n;
y=0;
for i=1:n
y=y+(ydata(i)-(x(:,1)+x(:,2)sin(x(:,3)t(i)+x(:,4))))^2/n;
end
y=sqrt(y);
end
2、把数据btxt放在工作空间目录中
然后再命令窗口中输入
clear
global ydata n
format long g
load btxt
ydata=b';
n=length(ydata);
avg=sum(ydata)/n;
LB=[2/3avg 0 0 0];
UB=[1avg 1/3avg 24pi 2pi];
nvars=4;
options=gaoptimset;
options=gaoptimset(options,'PopulationSize',300);
options=gaoptimset(options,'CrossoverFraction',08);
options=gaoptimset(options,'MigrationFraction',01);
options=gaoptimset(options,'Generations',500);
options = gaoptimset(options,'TolFun',1e-50);
%options = gaoptimset(options,'InitialPopulation',final_pop);
options = gaoptimset(options,'Display','final');
options = gaoptimset(options,'PopInitRange',[LB;UB]);
options = gaoptimset(options,'PlotFcns',@gaplotbestf);
options=gaoptimset(options,'Vectorize','on');%目标函数向量化
[x,fval,exitflag,output,final_pop,scores]=ga(@ga_curfit,nvars,[],[],[],[],LB,UB,[],options);
t=1:n;
plot(t,ydata,'r');
hold on
plot(t,x(1)+x(2)sin(x(3)t+x(4)))
legend('数据','拟合')
用遗传算法求已知函数的最小值点的方法:1、首先建立自定义函数,f(x)ga_fun=@(x)11sin(6x)+7cos(5x);2、其二用ga()函数求解最小值[x,fval,exitflag]=ga(ga_fun,1,[],[],[],[],lb) 3、然后用ezplot()函数或plot()函数,绘出其函数f(x)的图形及最小值点4、运行结果5、执行代码
用遗传算法求最大值问题,可以这样来解决。
1、将最大值问题转换为最小值问题,即 max Z =- min Z;
2、建立其自定义函数,即
z=-(f140^15/1+f230^15/2+f220^15/2+。。。+f12127^15/2+f125^15/4)
其中:f1,f2,f3,。。。f11,f12为0,1变量,可以用sign()符号函数来处理。
3、用遗传算法ga()函数求解,使用方法
objectivef=@ga_func;
nvars=12;
[x, fval] =ga(objectivef,nvars)
4、编程运行后得到
f1=1,f2=1,f3=1,f4=0,f5=1,f6=0,f7=1,f8=1,f9=1,f10=1,f11=1,f12=1
Zmax=273295018
以上就是关于matlab中用遗传算法拟合方程全部的内容,包括:matlab中用遗传算法拟合方程、在matlab中如何用遗传算法求解函数和的最小值、matlab,遗传算法,求大佬帮忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)