日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

fitype拟合多参数函数和遗传算法拟合多参数函数

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 fitype拟合多参数函数和遗传算法拟合多参数函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

多參數擬合函數最重要的是初始點。初始點的選擇可以靠直覺和經驗,也可以通過遺傳算法從大范圍逐步的逼近。

基本語法如下:

這是函數:z=a*(x^b)*(y^c)的函數的擬合。x,y是自變量,z是應變量,a,b,c是擬合的參數。

fit的語法是:fit(自變量,應變量,fittype的返回值,'Startpoint',參數的初始值),它的返回值是三個參數的值。

ft = fittype( @(a, b, c, x, y) a*(x.^b).*(y.^c), 'independent', {'x', 'y'},...'dependent', 'z' );fit([x(:),y(:)],z(:),ft,'Startpoint',[0.1,0.1,0.1])


以下是范例:

增加生產、發展經濟所依靠的主要因素有增加投資、增加勞動力以及技術革新等,在研究國民經濟產值與這些因素的數量關系時,由于技術水平不像資金、勞動力那樣容易定量化,作為初步的模型,可認為技術水平不變,只討論產值和資金、勞動力之間的關系。在科學技術發展不快時,如資本主義經濟發展的前期,這種模型是有意義的。

用Q,K,L分別表示產值、資金、勞動力,要尋求的數量關系Q(K,L)。經過簡化假設與分析,在經濟學中,推導出一個著名的Cobb-Douglas生產函數:

Q(K,L) = aKαLβ,? 0<α,β<1?????????? (*)

式中α,β,a要由經濟統計數據確定。現有美國馬薩諸塞州1900—1926年上述三個經濟指數的統計數據,如下表,試用數據擬合的方法,求出式(*)中的參數α,β,a。

?

表1

??t?????? Q???????? K???????? L

?? t?????? Q???????? K???????? L

1900??? 1.05??? ???1.04????? 1.05

1901??? 1.18?????? 1.06????? 1.08

1902??? 1.29?????? 1.16????? 1.18

1903??? 1.30?????? 1.22????? 1.22

1904??? 1.30?????? 1.27????? 1.17

1905??? 1.42?????? 1.37????? 1.30

1906??? 1.50?????? 1.44????? 1.39

1907??? 1.52?????? 1.53????? 1.47

1908??? 1.46?????? 1.57????? 1.31

1909??? 1.60?????? 2.05????? 1.43

1910??? 1.69?????? 2.51????? 1.58

1911??? 1.81?????? 2.63????? 1.59

1912??? 1.93?????? 2.74????? 1.66

1913??? 1.95?????? 2.82????? 1.68

?

?

?1914??? 2.01????? 3.24????? 1.65

?1915??? 2.00????? 3.24????? 1.62

?1916??? 2.09????? 3.61????? 1.86

?1917??? 1.96????? 4.10????? 1.93

?1918??? 2.20????? 4.36????? 1.96

?1919??? 2.12????? 4.77????? 1.95

?1920??? 2.16????? 4.75????? 1.90

?1921??? 2.08????? 4.54????? 1.58

?1922??? 2.24???? ?4.54????? 1.67

?1923??? 2.56????? 4.58????? 1.82

?1924??? 2.34????? 4.58????? 1.60

?1925??? 2.45????? 4.58????? 1.61

?1926??? 2.58????? 4.54????? 1.64

擬合代碼如下:

%lab2由4列數據組成,年份,K,L和Q4列,對應上訴表格數據。

x=lab2(:,2)';

y=lab2(:,3)';

z=lab2(:,4)';

ft = fittype( @(a, b, c, x, y) a*(x.^b).*(y.^c), 'independent', {'x', 'y'},...

???? 'dependent', 'z' );

fit([x(:),y(:)],z(:),ft,'Startpoint',[0.1,0.1,0.1])

?

二、遺傳算法擬合

%主函數%M = 20; %種群個數 C = 20000; %迭代次數 m = 2; %適應值歸一淘汰加速指數 Pmutation = 0.4; %變異概率 Pc = 0.4; %交叉概率 pop=round(rand(30,45)); %種群%%%%初始化種群及其適應函數%%%%[dePop]=decode(pop,lab3,lab2); fitness=fit(dePop); maxfitness=min(fitness); rr=find(fitness==maxfitness); R=pop(rr(1,1),:); fprintf('當前種群最優個體:%.12f\n',fitness(rr));while C>=0fprintf('迭代第%d次\n',C);%%%%選擇操作%%%%[px,py]=size(pop);ms=sort(rand(px));fitin=1;nn=1;while nn<=pxif (ms(nn))<fitness(fitin)pop_sel(nn,:)=pop(fitin,:);nn=nn+1;fitin=fitin+1;if fitin>pxfitin=floor(rand*(px-1))+1;endelsefitin=fitin+1;if fitin>pxfitin=floor(rand*(px-1))+1;endendend%%%%交叉操作%%%%nnper=randperm(M);A=pop_sel(nnper(1),:);B=pop_sel(nnper(2),:);for i=1:M*Pc[A,B]=cross(A,B);pop_sel(nnper(1),:)=A;pop_sel(nnper(2),:)=B;end%%%%變異操作%%%%for i=1:Mpick=rand;while pick==0pick=rand;endif pick<=Pmutationpop_sel(i,:)=Mutation(pop_sel(i,:),0.4);endend%%%%保留最優個體%%%%maxfitness=min(fitness);rr=find(fitness==maxfitness);pop_sel(1,:)=pop(rr(1),:);%%%%求適應度函數%%%%pop=pop_sel;[dePop]=decode(pop,lab3,lab2);fitness=fit(dePop);maxfitness=min(fitness);rr=find(fitness==maxfitness);R=-fitness(rr(1));fprintf('當前最小值=%.14f ',fitness(rr(1)));C=C-1; end plot(lab2(:,1),lab2(:,4),'b'); hold on; result=dePop(1,2)*(lab2(:,2).^dePop(1,3)).*(lab2(:,3).^dePop(1,4)); plot(lab2(:,1),result,'k');%這是fittype的擬合圖像 a1= 1.195;b1=-0.1044;c1=0.3273; plot(lab2(:,1),lab2(:,4),'b'); hold on; result=a1*(lab2(:,2).^b1).*(lab2(:,3).^c1); dePop=0; for j=1:length(lab3(:,1))dePop=dePop+(lab3(j,4)-log(a1)-b1*lab3(j,2)-c1*lab3(j,3))^2; end fprintf('fittype的擬合結果:%.14f',dePop); plot(lab2(:,1),result,'y');%解碼函數% %遺傳算法解碼 %dePop返回值包含最小二乘法的結果,以及參數α,β,a function [dePop]=decode(pop,lab3,lab2) [lengthx,~]=size(pop); dePop=zeros(lengthx,4); for i=1:lengthxa=pop(i,1:15);b=pop(i,16:30);c=pop(i,31:45);%a1是第一個參數的值,b1是第二個參數的值,c1是第三個參數的值for j=1:15if j==1a1=1^a(1);elsea1=a1+2^(2-j)*a(j);endendfor j=1:15if j==1b1=(-1)^b(1);elseb1=b1+2^(2-j)*b(j);endendfor j=1:15if j==1c1=(-1)^c(1);elsec1=c1+2^(2-j)*c(j);endend%求最小二乘法的目標的值,同時返回結果%lab3是lab2求對數的值for j=1:length(lab3(:,1))dePop(i)=dePop(i)+(lab3(j,4)-log(a1)-b1*lab3(j,2)-c1*lab3(j,3))^2;enddePop(i,2)=a1;dePop(i,3)=b1;dePop(i,4)=c1; end%適應度函數% function fitness=fit(dePop)fitness=dePop(:,1); end%交叉函數% %交叉操作 function [A,B]=cross(A,B)L=length(A);if L<10W=L;elseif((L/10)-floor(L/10))>=rand&&L>10W=ceil(L/10)+8;elseW=floor(L/10)+8;endp=unidrnd(L-W+1);for i=1:W[A(1,p+i-1),B(1,p+i-1)]=exchange(A(1,p+i-1),B(1,p+i-1));end end%染色體的局部交換函數% function [x,y]=exchange(x,y) temp=x; x=y; y=temp; end%變異函數 function a=Mutation(A,fitness)nnper=randperm(size(A,2));if (A(1,nnper(1)))==1A(1,nnper(1))=0;elseif(A(1,nnper(1))==0)&(rand>fitness)A(1,nnper(1))=1;Enda=A; end

在我的遺傳算法里面選擇操作是欠妥的。

?

?

三、結果分析

?

四、評價與分析:

?

?

?

?

?

?

?

?

總結

以上是生活随笔為你收集整理的fitype拟合多参数函数和遗传算法拟合多参数函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。