24小时热门版块排行榜    

CyRhmU.jpeg
查看: 703  |  回复: 1

想飞就飞1985

捐助贵宾 (初入文坛)

[求助] 求解一个含约束的非线性参数拟合问题,方程为幂函数,请各位大神帮忙,多谢!已有1人参与

y=[184,107,49,15366,575,19120,5504]
x=[5.15,8.21,10.39,1.07,2.37,0.94,1.50]
f(x)为指数函数:f(x)=a*x^b
含约束的非线性参数拟合的最优目标为:
min{[y1-f(x1)]^2+[y2-f(x2)]^2+[y3-f(x3)]^2……[yn-f(xn)]^2}
约束条件为:
0.5yi<f(xi)<2yi
本题的目的是想求使目标函数最优的幂函数的参数a和b。

我初学matlab,看过一些含约束的曲线拟合的例子,都是对方差等参数进行约束,也看过一些参数拟合的例子,但是怎么添加约束没有找到,这个问题困扰我近1个月了,请各位帮帮忙,帮我解决一下这个问题,多谢!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
拟合不太懂,不过这个问题可以用优化算法来算。只是你的数据太奇怪,找不到满足约束的a,b。程序如下,仅作参考。
A=[];
b=[];
Aeq=[];
beq=[];
lb=[0,0];
ub=[1000,1000];
options = gaoptimset('TolFun',1e-8,'TolCon',1e-8);
X0 = ga(@my_obj,2,A,b,Aeq,beq,lb,ub,@my_con,options);
%X0是用遗传算法优化出来的结果,可能不太好,进一步用下面的算法;
X = fmincon(@my_obj,X0,A,b,Aeq,beq,lb,ub,@my_con);
%将遗传算法得出的结果作为初值进行优化可得更精确的结果;
function f=my_obj(x)
% 目标函数
%输入参数x=[a,b];
% Y=[184,107,49,15366,575,19120,5504];
% X=[5.15,8.21,10.39,1.07,2.37,0.94,1.50];
%由于你的数据找不到满足约束的点,所以用下面的来替代,令a=1,b=2;这样可以看出算法是有效的。
X=1:7;
Y=X.^2;
fx=x(1)*(X.^x(2));
f=sum((Y-fx).^2);

function [c,ceq]=my_con(x)
%约束条件
% Y=[184,107,49,15366,575,19120,5504];
% X=[5.15,8.21,10.39,1.07,2.37,0.94,1.50];
X=1:7;
Y=X.^2;
fx=x(1)*(X.^x(2));
c1=0.5*Y'-fx';
c2=fx'-2*Y';
c=[c1;c2];
ceq=[];
2楼2015-09-29 10:01:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 想飞就飞1985 的主题更新
信息提示
请填处理意见