多参数拟合函数最重要的是初始点。初始点的选择可以靠直觉和经验,也可以通过遗传算法从大范围逐步的逼近。

基本语法如下:

这是函数: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拟合多参数函数和遗传算法拟合多参数函数相关推荐

  1. R语言survival包的survfit函数拟合生存曲线数据、survminer包的ggsurvplot函数可视化生存曲线、size参数指定曲线粗细、palette参数自定义生存曲线的颜色

    R语言survival包的survfit函数拟合生存曲线数据.survminer包的ggsurvplot函数可视化生存曲线.size参数指定曲线粗细.palette参数自定义生存曲线的颜色 目录

  2. MATLAB有关lsqcurvefit函数对多个未知参数函数拟合的相关问题

    在MATLAB中关于函数拟合的函数主要分为两类.一类是线性拟合,另一类则是非线性拟合.非线性拟合相对来说,难度会比线性拟合更大一些.本篇文章主要是关于如何使用lsqcurvefit函数进行非线性拟合的 ...

  3. 数据拟合---使用自定义函数进行非线性拟合 -在Origin。matlab拟合工具箱cftool

    在Origin中使用自定义函数进行非线性拟合 http://blog.163.com/wuhen211@126/blog/static/7474635020105233269949/ matlab拟合 ...

  4. 多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合

    matlab的应用-多项式函数及多项式拟合 Matlab 的应用- 多项式函数及多项式拟合 本节将向大家简要介绍 matlab 在多项式处理方面的应用. 多项式函数主要有: roots 求多项式的根 ...

  5. 神经网络拟合函数表达式,神经网络拟合效果不好

    神经网络,什么过拟合?,什么是欠拟合? 欠拟合是指模型不能在训练集上获得足够低的误差.而过拟合是指训练误差和测试误差之间的差距太大.考虑过多,超出自变量的一般含义维度,过多考虑噪声,会造成过拟合. 可 ...

  6. matlab 拟合函数,MATLAB的拟合函数和工具

    一元函数拟合可用cftool工具箱, 对于一元多项式拟合也可用polyfit() 多元线性函数y=ax的拟合函数regress() 语法是: [a, aint]=regress(y,x,alpha) ...

  7. 列表函数的最小二乘拟合(matlab)

    最小二乘法拟合概述 算法原理 设是定义在点集上的列表函数,构造广义多项式 使得最小,其中为待定参数, 是已知的一组基函数,通过求解正规方程组来确定c的方法称为最小二乘拟合. 伪代码 1)给定待拟合量x ...

  8. python拟合函数_python之拟合的实现

    一.多项式拟合 多项式拟合的话,用的的是numpy这个库的polyfit这个函数.那么多项式拟合,最简单的当然是,一次多项式拟合了,就是线性回归.直接看代码吧 import numpy as np d ...

  9. 最速下降法极小化rosenbrock函数 代码_RL An Introduction-Chapter 9 函数拟合时的同步预测...

    本章起我们开始讨论用函数来拟合估计值函数,我们用参数 来将值函数参数化,记作 .这类方法泛化性强,非常强大且易于理解.同时,这种方法也适用于部分可见的问题. 1.值函数逼近 本书中所有值函数的更新都是 ...

最新文章

  1. JZOJ 5197. 【NOIP2017提高组模拟7.3】C
  2. Cloud for Customer UI里点了超链接后的跳转处理
  3. bytevalue_Java Number byteValue()方法与示例
  4. java for新循环_Java 8 新语法习惯 (for 循环的函数替代方案)
  5. 华为nova5iotg功能使用_原来华为EMUI10输入法这么强大!使用这个功能,一分钟能打300字...
  6. linux安装snmp显示乱码_Linux安装X Window服务——远程显示GUI
  7. 一字之差——手机中的“拼”音输入法和“注”音输入法
  8. Vue项目安装axios报错
  9. 知了课堂Day1——微信小程序基础01-template、事件
  10. opencv半透明填充不规则区域
  11. java获取本机的外网IP地址(亲测有效)
  12. linux-----基本操作指令(2)
  13. 【CRC笔记】CRC-16 KERMIT C语言实现
  14. python面向对象的编程_python面向对象的编程
  15. Flash Builder 找不到所需的 Adobe Flash Player 调试器版本
  16. 苹果cmsV10MXone Pro自适应模板 站长亲测 全网首发
  17. The Foundry NUKE 12 mac版(电影特效合成制作软件)
  18. matlab 串口实时接收数据 绘图
  19. dhrystone测试结果_Dhrystone Benchmark
  20. ajax同时调用两个jsonp,使用JSONP进行跨域Ajax 调用

热门文章

  1. 正确解读free -m
  2. 【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(二)
  3. [Microsoft][ODBC SQL Server Driver]TDS 缓冲区长度过大
  4. S3C6410设备时钟源选择、启动方式选择和内存映射
  5. WINCE下实现基于USB的camera
  6. ubuntu18安装nginx没有生成各类目录文件问题解决
  7. python编程规范
  8. C#对Excel的一些操作【一】
  9. Jackson注解学习参考
  10. phpstorm xdebug remote配置