2014-09-10 75 views
1

我想拟合一个任意函数((k_plus-k_t *(1-exp(-k_plus /(a * k_t + b * k_d))) 。-k_d *(EXP(-k_plus /(A * K_T + b * K_D))来设置我的数据。因此,我在MATLAB中使用lsqcurvefit 的代码是如下:在用lsq曲线拟合的曲线中选择x0(x的初始点)

clc; 
clear all; 
close all; 
%% assign the anon function to a handle 
k_plus =[0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
K_minus_d = [0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
K_minus_t =[ 0.1 0.2 0.4 0.7 1 1.1 1.2 1.5 1.7 2 2.5 3 3.5 4 5]; 
f1= sprintf('table%02d.txt',1); 
data=tblread(f1); 
x1=data(:,1); 
x1=x1'; 
[email protected](c,xdata)(xdata-K_minus_t*(1-exp(-xdata/(c(1)*K_minus_t+c(2)* K_minus_d)))- K_minus_d*(exp(-xdata/(c(1)*K_minus_t+c(2)* K_minus_d))) 
x0 = [0.1 0.1]; 
[c,resnorm,~,exitflag,output] = lsqcurvefit(F,x0,k_plus,x1) 
figure; 
hold on 
plot(k_plus,x1,'r-', 'LineWidth', 1) 
plot(k_plus,F(c,k_plus),'-b*','LineWidth', 1,'MarkerSize', 1) 
hold off 
grid on; 

我不知道怎么能我选择x0(x的初始点),因为当我改变它时,我得到了不同的C值

回答

1

如果我正确理解你,你会得到c的不同值,这取决于你对初始x0的选择,并且你想要关于如何选择一个好的初始值的建议 如果没有足够的关于你正在尝试适合的功能的知识,这是很难回答的。它是描述实验数据吗?如果是这样,你应该对x应该大致是什么有一些期望。 但是很可能的情况是,您的方程没有独特的解决方案,或者求解器陷入局部最小值。