遗传算法求解超越方程,matlab程序,tanx=1x, x∈[0,60],需要程序代码

遗传算法求解超越方程,matlab程序,tanx=1x, x∈[0,60],需要程序代码,第1张

程序代码如下。主文件其它代码及调用的其它函数详见私信压缩包。

for n=0:19;

x=linspace(0,60);

y1=tan(x);

y2=1/x;

figure(1);

plot(x,y1,'r',x,y2,'b')

title('函数曲线图')

xlabel('x')

ylabel('y')

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%主程序%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

global BitLength %全局变量,计算如果满足求解精度至少需要编码的长度

global boundsbegin %全局变量,自变量的起始点

global boundsend %全局变量,自变量的终止点

bounds=[pi/22n pi/2(2n+1)]; %一维自变量的取值范围

precision=00001; %运算精度

boundsbegin=bounds(:,1);

boundsend=bounds(:,2); %计算如果满足求解精度至少需要多长的染色体

BitLength=ceil(log2((boundsend-boundsbegin)' / precision));

popsize=60; %初始种群大小

Generationnmax=50; %最大代数

pcrossover=09999; %交配概率

pmutation=00001; %变异概率

population=round(rand(popsize,BitLength)); %初始种群,行代表一个个体,列代表不同个体

%计算适应度

[Fitvalue,cumsump]=fitnessfun(population); %输入群体population,返回适应度Fitvalue和累积概率cumsump

Generation=1;

while Generation<(Generationnmax+1)

for j=1:2:popsize %1对1对的群体进行如下 *** 作(交叉,变异)

%选择

seln=selection(population,cumsump);

%交叉

scro=crossover(population,seln,pcrossover);

scnew(j,:)=scro(1,:);

scnew(j+1,:)=scro(2,:);

%变异

smnew(j,:)=mutation(scnew(j,:),pmutation);

smnew(j+1,:)=mutation(scnew(j+1,:),pmutation);

end

%产生了新的种群

population=smnew;

%计算新种群的适应度

[Fitvalue,cumsump]=fitnessfun(population); %记录当前代最好的适应度和平均适应度

[fmax,nmax]=max(Fitvalue); %最好的适应度为fmax(即函数值最大),其对应的个体为nmax

fmean=mean(Fitvalue); %平均适应度为fmean

ymax(Generation)=fmax; %每代中最好的适应度

ymean(Generation)=fmean; %每代中的平均适应度

%记录当前代的最佳染色体个体

x=transform2to10(population(nmax,:));%population(nmax,:)为最佳染色体个体

xx=boundsbegin+x(boundsend-boundsbegin)/(power(2,BitLength)-1);

xmax(Generation)=xx;

Generation=Generation+1;

end

Generation=Generation-1;%Generation加1、减1的 *** 作是为了能记录各代中的最佳函数值xmax(Generation)

targetfunvalue=targetfun(xmax);

[Besttargetfunvalue,nmax]=max(targetfunvalue);

Bestpopulation=xmax(nmax)

%绘制经过遗传运算后的适应度曲线

figure(2);

hand1=plot(1:Generation,ymax);

set(hand1,'linestyle','-','linewidth',1,'marker','','markersize',8)

hold on;

hand2=plot(1:Generation,ymean);

set(hand2,'color','k','linestyle','-','linewidth',1, 'marker','h','markersize',8)

xlabel('进化代数');

ylabel('最大和平均适应度');

xlim([1 Generationnmax]);

legend('最大适应度','平均适应度');

box off;

hold off;

end

%%%%%%%%%%%计算适应度函数%%%%%%%%%%%%%%%%%%%%%%%%

[Fitvalue,cumsump]=fitnessfun(population);

global BitLength

global boundsbegin

global boundsend

popsize=size(population,1); %计算个体个数

for i=1:popsize

x=transform2to10(population(i,:)); %将二进制转换为十进制

%转化为[-2,2]区间的实数

xx=boundsbegin+x(boundsend-boundsbegin)/(power(2,BitLength)-1);

Fitvalue(i)=targetfun(xx); %计算函数值,即适应度

end

%给适应度函数加上一个大小合理的数以便保证种群适应值为正数

Fitvalue=Fitvalue'+230; %该处还有一个作用就是决定适应度是有利于选取几个有利个体(加强竞争),海深减弱竞争

%计算选择概率

fsum=sum(Fitvalue) ;

Pperpopulation=Fitvalue/fsum ; %适应度归一化,及被复制的概率

%计算累积概率

cumsump(1)=Pperpopulation(1) ;

for i=2:popsize

cumsump(i)=cumsump(i-1)+Pperpopulation(i); %求累计概率

end

cumsump=cumsump' ; %累计概率

刚开始写可能你觉得子程序没什么用

一个程序运行肯定是先运行主程序

我们当然可以把所有程序都写在主程序里面,但是你会发现主程序过于庞大,有些程序反复使用,那么我们就写一个子程序,当要用这段程序的时候我们就通过调用来解决

比如我一个主程序,里面一直要用到查找,我们就先写个子程序把它定义为findtext(int str1,int str2)str1为查找内同 str2为查找目标

然后我们写主程序,就可以直接用这个子程序

其实在C里面你可能觉得没什么,如果你学过单片机,我们写程序不用到子程序不行,应为单片机容量有限,如果重复代码出现就会下不下,所以我们会尽量把所有重复出现的代码写成子程序,减少代码体积

1系统设置

2程序路径设置

3打开数据库,菜单,初始登陆界面

4非常重要的一句代码read events, 否则程序一闪二过

5例子:_screen这个是vfp主程序这个窗口,如果你用自己的表单,那么把它隐藏,否则直接用

SET TALK OFF

SET DELETED ON

SET ESCAPE OFF

SET EXCLUSIVE OFF

SET CONSOLE ON

SET DATE ANSI

SET CENTURY ON

SET SAFETY OFF

SET STATUS BAR off

SET SYSMENU OFF

SET SYSMENU TO

SET NOTIFY OFF

SET DEFAULT TO sys(5)+sys(2003)

CLEAR

CLEAR ALL

public auth,alert,nrecord

alert=0

nrecord=0

auth=0

do menus\main2mpr

_SCREENCAPTION="单证处理系统"

_SCREENCLOSABLE=F

_SCREENCONTROLBOX=F

_SCREENPICTURE="PIC\CJPG"

_SCREENLEFT=-1500

_SCREENTOP=0

_SCREENVISIBLE=F

OPEN DATABASE 单证

DO FORM forms\欢迎界面

READ EVENTS

设置运行环境

Set Talk Off &&关闭命令显示

Set Escape Off &&禁止运行的程序在按 Esc 键后被中断

Set Exclusive Off &&数据库表以共享方式打开

Set Deleted On &&过滤掉已带删除标记的记录

Set Safety Off &&指定在改写已有的文件时不显示对话框

Set Date Ansi &&设定日期的年份为 4 位数

Set Century On &&指定日期表达式的显示格式为YYMMDD

SET MARK TO [-] &&指定日期的分隔符为"-"

SET SECONDS ON &&日期时间表达式的显示秒钟部分

SET HOURS TO 12 &&指定日期时间表达式的显示为12小时格式

Set Optimize ON &&启用或废止 Rushmore 优化。

Set ENGINEBEHAVIOR 70

Set DECIMALS TO 8 &&指定小数点位数,默认为2位

Clear &&清除主窗口

Clear All &&清除变量

开始进行程序的事务处理 *** 作

Public pcSys

pcSys=Sys(5)+Sys(2003)

Set Default To pcSys

Set Path To Class,Form,Poto,Menu,Prg,Report

DO form frmbegin &&运行启动画面表单frmBegin,名称自己改,

READ events

DO form frmlogin &&运行主界面表单frmlogin,名称自己改,

READ events

保存,名称自己安,然后设置为主文件

以上就是关于遗传算法求解超越方程,matlab程序,tanx=1/x, x∈[0,60],需要程序代码全部的内容,包括:遗传算法求解超越方程,matlab程序,tanx=1/x, x∈[0,60],需要程序代码、c++中主程序和子程序分别是什么 举例说明、VFP,主程序里写了以下代码,为什么系统提示关闭不了VFP等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9749627.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存