24小时热门版块排行榜    

查看: 895  |  回复: 0

飞鸿印雪jay

银虫 (小有名气)

[求助] 遗传算法和最小二乘法结合 拟合非线性方程组遇到问题 求大神帮忙看看 时间紧急了

function GA_LS2
clear all;close all;clc
data=[
0        0.590890215        0.431553748        0.111114174        0.164307696
5        0.477300105        0.495979271        0.139568658        0.181064681
10        0.396894324        0.536060613        0.167735717        0.247594176
15        0.335733264        0.543725871        0.182513065        0.235030697
20        0.268980912        0.543446351        0.199082168        0.263018724
25        0.218558133        0.543414959        0.218928771        0.301457754
30        0.16267805        0.540071789        0.249769619        0.363496193
35        0.128636265        0.523054713        0.264234746        0.415444552
40        0.097241151        0.483990339        0.266649889        0.440978169
45        0.073957065        0.449848122        0.270023805        0.468755311
50        0.062685596        0.431687277        0.278595408        0.504694097
60        0.040334681        0.386251269        0.292986268        0.596506937
70        0.022374728        0.320132412        0.28173439        0.638552746
80        0.015131643        0.27930472        0.279228981        0.695497244
90        0.008490777        0.227685253        0.266323912        0.768221053
100        0.003855323        0.182959369        0.254308566        0.820826006
110        0.002596683        0.147439246        0.234401738        0.875385242
120        0.000949164        0.121096727        0.224282059        0.931174132
];
p=data(:,1);      %pi   X轴
Lexp=data(:,2:5); %Li   Y轴

%-------------遗传算法-----------------------------------------------------

options = gaoptimset('Generations',1000,'StallGenLimit',300,...
    'StallTimeLimit',50,'TolFun',1e-12,'TolCon',1e-12);
[k1,fva,reason,output,final_pop]=ga(@objfun,4,options);
options = gaoptimset('InitialPopulation',final_pop,'Generations',1000,'StallGenLimit',300,...
    'StallTimeLimit',50,'TolFun',1e-12,'TolCon',1e-12);
[k2,fva,reason,output,final_pop2]=ga(@objfun,4,options);
fprintf('\n\n遗传算法的初始估计数值:\n');
fprintf('\n\t参数 A0 = %.9f',k2(1));
fprintf('\n\t参数 B0 = %.9f',k2(2));
fprintf('\n\t参数 C0 = %.9f',k2(3));
fprintf('\n\t参数 D0 = %.9f',k2(4));
fprintf('\n\t参数 E0 = %.9f',k2(5));
fprintf('\n\t参数 F0 = %.9f',k2(6));

%------------------------------最小二乘法 ----------------------------------
k0=k2;
lb=[0 0 0 0 0 0];
ub=[1 1 1 1 1 1]*1e6;
OPTIONS=optimset('MaxFunEvals',1000,'TolFun',1e-12,'Algorithm','trust-region-reflective','Display','Off');
[k3,resnorm,residual,exitflag,output,lambda,jacobian] = ...
    lsqnonlin(@ObjFunc,k0,lb,ub,OPTIONS,p,Lexp);
%-----------------------------------------------------------------

%------------------结果输出与图形化----------------------------------------------
k=k3;
y=Lorentz(p,k,C);
fprintf('\n\n最终拟合结果:\n')
fprintf(' \t残差平方和= %.6e\n\n',resnorm);
fprintf('\n\t参数 a = %.9f',k(1))
fprintf('\n\t参数 b = %.9f',k(2))
fprintf('\n\t参数 c = %.9f',k(3))
fprintf('\n\t参数 d = %.9f',k(4))
fprintf('\n\t参数 c = %.9f',k(5))
fprintf('\n\t参数 d = %.9f',k(6))
n=length(p);
R2A=1-sum((Lexp(:,1)-y).^2)./sum((Lexp(:,1)-mean(Lexp(:,1))).^2);
R2B=1-sum((Lexp(:,2)-y).^2)./sum((Lexp(:,2)-mean(Lexp(:,2))).^2);
R2C=1-sum((Lexp(:,3)-y).^2)./sum((Lexp(:,3)-mean(Lexp(:,3))).^2);
R2D=1-sum((Lexp(:,4)-y).^2)./sum((Lexp(:,4)-mean(Lexp(:,4))).^2);

MSEA=1/n*sum((Lexp(:,1)-y).^2);
MSEB=1/n*sum((Lexp(:,2)-y).^2);
MSEC=1/n*sum((Lexp(:,3)-y).^2);
MSED=1/n*sum((Lexp(:,4)-y).^2);

% MAE=1/n*sum(abs(Lexp-y));
%
%
%
%
% MAS=max(abs(Lexp-y));






fprintf('\n\t决定系数 R-Square = %.9f',R2A);
fprintf('\n\t决定系数 R-Square = %.9f',R2B);
fprintf('\n\t决定系数 R-Square = %.9f',R2C);
fprintf('\n\t决定系数 R-Square = %.9f',R2D);

fprintf('\n\t均方误差 MSE = %.6f',MSEA);
fprintf('\n\t均方误差 MSE = %.6f',MSEB);
fprintf('\n\t均方误差 MSE = %.6f',MSEC);
fprintf('\n\t均方误差 MSE = %.6f',MSED);

% fprintf('\n\t平均绝对误差 MAE = %.6f',MAE);
%
%
%
%
% fprintf('\n\t最大绝对误差 MAS = %.6f',MAS);





figure
plot(p,y,'b',p,Lexp,'or'),axis([0 1.05 -0.05 1.05]),...
    text(0.05,0.95,['决定系数 R-Square =' num2str(R2)]),...
    text(0.05,0.85,['均方误差 MSE =' num2str(MSE)]),...
%     text(0.05,0.75,['平均绝对误差 MAE =' num2str(MAE)]),...
%     text(0.05,0.65,['最大绝对误差 MAS =' num2str(MAS)]),...
    xlabel('p'),ylabel('L'),
legend('拟合结果','原始数据','Location','Best')
%-------------------------------------------------------------------------

function f = ObjFunc(k,t,x0,Lexp)                            % 目标函数
[t, Xsim] = ode45(@Lorentz,t,x0,[],k); %四阶,五级Runge-Kutta单步算法
Xsim1=Xsim(:,1);
Xsim2=Xsim(:,2);
Xsim3=Xsim(:,3);
Xsim4=Xsim(:,4);
Xsim5=Xsim(:,5);
Xsim6=Xsim(:,6);
Xsim7=Xsim(:,7);
Xsim8=Xsim(:,8);

ysim(:,1) = Xsim1(2:end);
ysim(:,2) = Xsim2(2:end);
ysim(:,3) = Xsim3(2:end);
ysim(:,4) = Xsim4(2:end);
ysim(:,5) = Xsim5(2:end);
ysim(:,6) = Xsim6(2:end);
ysim(:,7) = Xsim7(2:end);
ysim(:,8) = Xsim8(2:end);

f=Lorentz(p,k,C)-Lexp(i);


%----------------构造拟合目标函数-------------------------------------------
function fun=objfun(k)
data=[
0        0.590890215        0.431553748        0.111114174        0.164307696
5        0.477300105        0.495979271        0.139568658        0.181064681
10        0.396894324        0.536060613        0.167735717        0.247594176
15        0.335733264        0.543725871        0.182513065        0.235030697
20        0.268980912        0.543446351        0.199082168        0.263018724
25        0.218558133        0.543414959        0.218928771        0.301457754
30        0.16267805        0.540071789        0.249769619        0.363496193
35        0.128636265        0.523054713        0.264234746        0.415444552
40        0.097241151        0.483990339        0.266649889        0.440978169
45        0.073957065        0.449848122        0.270023805        0.468755311
50        0.062685596        0.431687277        0.278595408        0.504694097
60        0.040334681        0.386251269        0.292986268        0.596506937
70        0.022374728        0.320132412        0.28173439        0.638552746
80        0.015131643        0.27930472        0.279228981        0.695497244
90        0.008490777        0.227685253        0.266323912        0.768221053
100        0.003855323        0.182959369        0.254308566        0.820826006
110        0.002596683        0.147439246        0.234401738        0.875385242
120        0.000949164        0.121096727        0.224282059        0.931174132];
p=data(:,1);     %pi
C=data(:,2:5);   %Li
n=length(t);
g1=k(1)+k(2)+k(3)+k(4);
if (k(1)<0||k(2)<0||k(3)<0||k(4)<0||g1<1)
    fun=inf;
else
for i=1:n
    FF(i)=(Lexp(i)-Lorentz(p(i),k(i),C(i)))^2;
end
fun=sum(FF);
end
%------------------------------构造待拟合函数------------------------------
function f = Lorentz(p,k,C)
dCAdt =-(k(1)+k(2)+k(3))*C(1);                           
dCBdt =k(1)*C(1)-(k(4)+k(5))*C(2);
dCCdt =k(2)*C(1)+k(4)*C(2)-k(6)*C(3);
dCDdt =k(3)*C(1)+k(5)*C(2)+k(6)*C(3);
f = [dCAdt;dCBdt;dCCdt;dCDdt];
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 飞鸿印雪jay 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[找工作] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 Vi50GxzrFcSG 2026-08-07 4/200 2026-08-08 10:39 by 3OOjAIS77qg2
[基金申请] fileCode有新解读? +8 Tide man 2026-08-08 16/800 2026-08-08 09:59 by Tide man
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HEQlVqMTIA7d 2026-08-07 5/250 2026-08-08 08:59 by 6vVgjDL4CnGu
[教师之家] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +3 HEQlVqMTIA7d 2026-08-07 4/200 2026-08-08 08:27 by 6vVgjDL4CnGu
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 化学口download_prp&amp;fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode与中标关系的预测 +3 布布和一二 2026-08-07 3/150 2026-08-07 15:09 by gltch
[基金申请] 大家散了吧,后缀研究没有意义,别浪费时间了,过好目前的每一天,不要焦虑 +5 Tide man 2026-08-06 7/350 2026-08-07 13:11 by 医学老男孩
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 求各位大神看下 100+6 hpkpkpkp 2026-08-05 33/1650 2026-08-06 14:49 by zhiyanjiang
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 8月时间戳变的,举个手。玩一下,释放压力 +9 archvillain 2026-08-04 11/550 2026-08-05 20:06 by wlwhappy
[基金申请] 好消息?这个有何含义??? +8 Tide man 2026-08-05 10/500 2026-08-05 16:14 by xmuxiaoyu
[考博] 【2027博士申请】纳米药物递送方向 20+3 13586093586 2026-08-03 4/200 2026-08-05 09:59 by lfy8008
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见