在matlab中使用遗传算法工具箱时,向ga函数的fun句柄传入除了拟合参数外的其他参数的方法

在matlab中使用遗传算法工具箱时,可以使用

fun=@(para)function_0(para,t_b,c_b);

向误差函数传入除了拟合参数外的其他参数。

 

测试脚本solution.m:

clear;
clc;

tic;        % 计时函数开始
%% 参数范围
% ca100属于[0,1000];k属于[0,1];
k1=[600 0];
k2=[1000 2];

% 拟合数据
t_b=[100,200,300,400,500,600,700,800,900,1000];
c_b=[454,499,535,565,590,610,626,639,650,659];

%% 遗传算法求解
Value=1e-3;         % 设定函数误差的阈值

% 遗传函数ga的调用
options=optimoptions('ga','TolFun',1e-8,'populationsize',300,'generations',2000,...
    'stallgenlimit',50,'stalltimelimit',30,'ConstraintTolerance',1e-6,...
    'fitnesslimit',Value,'crossoverfraction',0.85,'migrationfraction',0.2);   % 设置option参数

fun=@(para)function_0(para,t_b,c_b);           % 为优化函数传递独立变量

[para,FVAL,exitFlag,output,population,scores] = ga(fun,2,[],[],[],[],k1,k2,[],[],options);

%% 按照拟合参数值来计算函数值,进而比较误差
ca100=para(1,1);          % 赋初始值以及后续的更新值
k=para(1,2);              % 赋初始值以及后续的更新值

result=zeros(1,size(t_b,2));
for i=1:size(t_b,2)
    cal_0=(ca100+454)/2;
    cal_1=(454-ca100)/2*exp(k*(100-t_b(i))/50);
    result(1,i)=cal_0+cal_1;      % 计算拟合值
end

%% 比较作图
figure;
plot(t_b,c_b,'or',t_b,result,'.b');
title('原始数据(红“o”)与拟合数据(蓝“.”)');
xlabel('时间点');
ylabel('B侧渗透液浓度');

toc;            % 计时函数结束

误差函数function_0.m:

function result=function_0(para,t_b,c_b)
%% 目标函数
ca100=para(1);          % 赋初始值以及后续的更新值
k=para(2);              % 赋初始值以及后续的更新值

size_0=size(t_b,2);     % 数据长度

temp=zeros(1,size_0);
result=zeros(1,size_0);
for i=1:size(t_b,2)
    cal_0=(ca100+454)/2;
    cal_1=(454-ca100)/2*exp(k*(100-t_b(i))/50);
    temp(i)=cal_0+cal_1;
    result(1,i)=abs(temp(i)-c_b(i));      % % 拟合值和已知值的绝对误差
end
result=sqrt(mean(result.*result));         % 误差平方和的均方根
end

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值