qq437544897
2011-04-24, 17:20
各位高手s,请问谁有曲线参数拟合对初值不那么敏感的自编MATLBA程序代码啊? 传一份救救急吧! 叩谢! 叩谢! 要疯啦 ……
附件有我问题的相关文件,一个自编的没办法稳定实现系数拟合的程序,一份原始数据,一个目标公式。
[email protected]这个问题难度较大,内含积分形式不太好处理,若能将积分部分以原函数的形式表示,问题可相对简单一些。另外,数据文件中哪些是xdata, 哪些为ydata? 函数的似乎形式也有问题,第二个等于号难于让人看得懂。
qq437544897
2011-04-25, 13:22
这个问题难度较大,内含积分形式不太好处理,若能将积分部分以原函数的形式表示,问题可相对简单一些。另外,数据文件中哪些是xdata, 哪些为ydata? 函数的似乎形式也有问题,第二个等于号难于让人看得懂。
xdata是data的第一列,ydata是data的第二列。不好意思,没有表述清楚。
至于第二个等号,这是分数倒数模型,不管要不要系数x(4),最后一项都是一个闭合的类椭圆型。这个看着比较复杂的式子实际上是一种分数倒数的定义,当然也有离散形式。对于第四项,我上传的附件里的程序里已经体现出来了,请您过目。nihe.m是主程序。
谢谢!
qq437544897
2011-04-25, 13:27
用优化算法可以 它们对初始不要求
优化方法有不少啊 …… 我试过模拟退火法,不知道是不是我编得不对,误差竟然以1e-6的数量级一点一点减小!!! 实在太慢了 ……
您能帮我看看错哪儿了吗? 多谢了!
function [x0,f0]=Opt_Simu(f,x0,l,u,kmax,q,TolFun)
%%%%%%%% 第一步,根据输入变量数,将默写量设为默认值。
if nargin<7
TolFun=1e-8;
end
if nargin<6
q=1;
end
if nargin<5
kmax=100;
end
%%%%%%%%%%%% 第二步,求解一些基本变量
N=length(x0);
x=x0;
fx=feval(f,x);
x0=x;
f0=fx;
%%%%%%%%%%%% 第三步,进行迭代计算,找出近似全局最小点。
for k=0:kmax
Ti=(k/kmax)^q;
mu=10^(Ti*100);
dx=Mu_Inv(2*rand(size(x))-1,mu).*(u-l);
x1=x+dx;
x1=(x1 < l).*l+(l <= x1).*(x1 <= u).*x1+(u < x1).*u;
fx1=feval(f,x1);
df=fx1-fx;
if df < 0 | rand < exp(-Ti*df/(abs(fx) +eps)/TolFun)
x=x1;
fx=fx1;
end
if fx<f0
x0=x;
f0=fx1;
end
end
其中,
function x=Mu_Inv(y,mu)
x=(((1+mu).^abs(y)-1)/mu).*sign(y);
另外,退火法里面的f我定义的是f=@fun422
function F=fun422(X)
data(:,1)=importdata('xdata.txt');
data(:,2)=importdata('ydata.txt');
nt=100;
data_nt=data(1:nt,1:2);
tt=importdata('tt.txt');
for i=1:nt
d=tt(i+1)-tt(i);
for j=0:i-1
sc1_data_nt(j+1)=data_nt(i-j,1)*gamma(j-X(5))/gamma(j+1);
end
sc2_data_nt=cumsum(sc1_data_nt);
fun4202_D_data_nt(i)=d^(-X(5))*sc2_data_nt(i)/gamma(-X(5));
end
fun4202_D_data_nt=fun4202_D_data_nt';
sum=0;
for i=1:nt
f(i)=(X(1)*data_nt(i,1)+X(2)*data_nt(i,1).^2+X(3)*data_nt(i,1).^3+X(4)*fun4202_D_data_nt(i)-data_nt(i,2))^2;
sum=sum+f(i);
end
F=sum;
请不吝指教,谢谢!!
vBulletin® v3.8.3,版权所有 ©2000-2025,Jelsoft Enterprises Ltd.