木虫 (小有名气)
小小鸟 ![]()
|
[求助]
求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function
本人想通过matlab做一个非线性数据拟合,一直实现不了,求大神指导,万分感谢!
拟合公式:R(fx)=3*A*us/(ua+us)/(((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+1)*((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+3*A))
此公式为文献上给出的原始公式,A为一个常数,R反射率,fx空间频率,均为实验数据,ua和us是最终想拟合的参数。
Matlab程序:
clear all;clc;
for i = 1:5
I0 = imread([路径',num2str(i),'.jpg']);
I{i} = I0;
end
n=1.51;fx_0=[0.04:0.01:0.08];
Reff=0.0636*n+0.668+0.710/n-1.440/n^2;
A_value=(1-Reff)/[2*(1+Reff)];
syms A ua us fx;
f = sym('3*A*us/(ua+us)/(((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+1)*((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+3*A))');
f = subs(f,A,A_value);
f_str = char(f);
for i = 1:201
for j = 1:201
st_ = [-0.0146 -0.8187];
ft_ = fittype(f_str,...
'dependent',{'R'},'independent',{'fx'},...
'coefficients',{'ua', 'us'});
for k = 1:5
R(k) = double(I{k}(i,j));
end
[cfun,gof] = fit(fx_0',R',ft_,'Startpoint',st_);
I_result_ua(i,j) = cfun.a;
I_result_us(i,j) = cfun.b;
end
end
subs(f,A,A)
f = sym('(3*A*us/(ua+us)/(((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+1)*((((3*ua*(ua+us))+(2*3.14*fx)^2)^(1/2))/(ua+us)+3*A)))')
拟合后matlab一直显示Complex value computed by model function, fitting cannot continue.
Try using or tightening upper and lower bounds on coefficients.
更改了ua和us的初始变量,也没有效果。
注:程序中的数据为五幅图片,分别是fx在0.04、0.05、0.06、0.07、0.08/mm下的,拟合思路为用5幅图的同一位置(x,y)的数据进行拟合,逐点拟合。所以最后输出的是ua和us201*201的一组数据,可以通过imshow显示图片。
一直实现不了,求大神指导,万分感谢!
![求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function]()
1.jpg
![求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function-1]()
2.jpg
![求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function-2]()
3.jpg
![求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function-3]()
4.jpg
![求指导,MATLAB非线性拟合无法完成,提示-Complex value computed by model function-4]()
5.jpg |
|