用matlab求解参数D

问题描述:

用matlab求解参数D
t=3 18 33 48 63 78 93 108 123 138 153 168 183 198 213 228 243 273 303 333 363
C=0 0 0 0 95 324 233 141 107 73 71 54 38 27 22 12 11 1 0 0 0
用公式f=(84000*0.5/(1.5368*2*(pi*D*t)^(1/2)))*exp(-((135-1.625*t)^2)/(4*D*t))拟合
D0=[0];
for i=1:50
D=lsqcurvefit('wyfun',D0,t,C);
D0=D;
end
结果一推小红字.本人不太会matlab,完全是为了了算这个的.
1个回答 分类:数学 2014-10-10

问题解答:

我来补答
D=8.3911
C是指的函数值吗?
再问: 是的。。。C是相当于y值的存在,没有代入数值的公式是这样的 F={m/(2*a*(pi*D*t)^(1/2))}*exp(-((x-v*t)^2)/(4*D*t)) 请问公式是怎么编辑的哇。。。我自己写的总是很多错
再答: 这样 C=m/w/2/sqrt(pi*D*t)*exp(-(x-v*t)^2/4/D/t) 几乎所有的编程语言里,只有括号,不会有花括号{},程序不认得。 还有Matlab里有‘数组运算’这个概念,若写成: C=(m/w/2)./sqrt(pi*D*t).*exp(-(x-v*t).^2/4/D./t) 可以直接把向量或者矩阵t带入,得到相同尺寸的C向量或矩阵。
再问: 谢谢你,但是好像还是有错误,帮我看看吧。。谢谢 公式是:function f=Dfun(C,t) f=m/w/2/sqrt(pi*D*t)*exp(-(x-v*t)^2/4/D/t)
再答: 用 lsqcurvefit函数的 方法: 函数文件:Dfun.m function f=Dfun(D,t) m=31.12; w=1.5386; x=135; v=1.625; f=(m/w/2)./sqrt(pi*D*t).*exp(-(x-v*t).^2/4/D./t); end 主函数文件: clear t=[3 18 33 48 63 78 93 108 123 138 153 168 183 198 213 228 243 273 303 333 363]; C=[0 0 0 0 95 324 233 141 107 73 71 54 38 27 22 12 11 1 0 0 0]; D0=2; D=lsqcurvefit(@Dfun,D0,t,C); disp(D); 注:其实我也没用过这个函数,不太熟悉,结果也报错了。 我换个方法。 问题可转化为求 sum(|ci-fi|^2) 的极小值问题,求极小值的函数是 fminbnd 函数文件:Dfun1.m function dis=Dfun1(D) t=[3 18 33 48 63 78 93 108 123 138 153 168 183 198 213 228 243 273 303 333 363]; C=[0 0 0 0 95 324 233 141 107 73 71 54 38 27 22 12 11 1 0 0 0]; m=31.12; w=1.5386; x=135; v=1.625; f=(m/w/2)./sqrt(pi*D*t).*exp(-(x-v*t).^2/4/D./t); dis=sqrt(sum((f-C).^2)); %数学上叫范数 end 主文件: clear [D,f]=fminbnd(@Dfun1,0,12); %求区间[0,12]上的极小值 disp(['D=',num2str(D),' ,dis=',num2str(f)]) % 显示结果的,初学可以不用管。 结果:D=0.69073 ,dis=464.0478
 
 
展开全文阅读
剩余:2000