matlab数据拟合c=u*(1-erf(x/(2*(beta(1)*t.^(1-beta(2))/(1-beta(2))))))已知u为定值,可以自己给c,x,t为三个变化的值,想拟合beta1和beta2两个值.取值可以是u=100;x=[5,10,15,5,10,15];t=[8,8,8,16,16,16];c=[50,20,10,57,24,12];

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/06 05:19:54

matlab数据拟合c=u*(1-erf(x/(2*(beta(1)*t.^(1-beta(2))/(1-beta(2))))))已知u为定值,可以自己给c,x,t为三个变化的值,想拟合beta1和beta2两个值.取值可以是u=100;x=[5,10,15,5,10,15];t=[8,8,8,16,16,16];c=[50,20,10,57,24,12];
matlab数据拟合
c=u*(1-erf(x/(2*(beta(1)*t.^(1-beta(2))/(1-beta(2))))))
已知u为定值,可以自己给c,x,t为三个变化的值,想拟合beta1和beta2两个值.
取值可以是
u=100;
x=[5,10,15,5,10,15];
t=[8,8,8,16,16,16];
c=[50,20,10,57,24,12];

matlab数据拟合c=u*(1-erf(x/(2*(beta(1)*t.^(1-beta(2))/(1-beta(2))))))已知u为定值,可以自己给c,x,t为三个变化的值,想拟合beta1和beta2两个值.取值可以是u=100;x=[5,10,15,5,10,15];t=[8,8,8,16,16,16];c=[50,20,10,57,24,12];

在另一个提问贴答案,被告知可能违反了知道规范,不能正常显示,所以只好再贴一次了.

 

简单说明几点:

1、拟合问题与初值关系很大,不是随便指定什么初值都行的通的.你原来的初值beta1太小,导致F计算出来全是0,根本无法继续;

2、代码中的下面这行

beta=nlinfit(X,c,@oneFick,[1 0.5])

也可以换成

beta=lsqcurvefit(@oneFick,[1 0.5],X,c)

拟合的结果相同.前者是统计工具箱的函数,而后者是优化工具箱的.

 

代码如下:

function zd
x=[5,10,15,5,10,15];
t=[8,8,8,16,16,16];
c=[50,20,10,57,24,12];
X=[x; t];
beta=nlinfit(X,c,@oneFick,[1 0.5])
n = length(c);
figure(gcf)
plot(1:n,c,'.-',1:n,oneFick(beta,X),'r:x')
legend('原始数据','拟合数据')

function F = oneFick(beta,X)
u=100;
x=X(1,:); 
t=X(2,:); 
F=u*(1-erf(x./(2*(beta(1)*t.^(1-beta(2))/(1-beta(2))))));

拟合结果:

beta =
          0.67331336811287         0.825416048371623