主题:[讨论]求解一个曲线拟合的问题(难)
leoliuf
[专家分:0] 发布于 2008-01-14 03:56:00
小弟在做课题时遇到一难题,关于拟合的。
Y=a*X1⊙exp(b*X2) (注:X1,X2,Y为已知数据,⊙为卷积)
拟合求解系数a和b
苦等大虾给与解答,非常感谢。
[em1][em1][em1][em1]
回复列表 (共9个回复)
沙发
gslyd [专家分:1300] 发布于 2008-01-14 09:22:00
若将数据置上,可代为拟合。方程的形式比较简单,参数很少,应该不难。
板凳
leoliuf [专家分:0] 发布于 2008-01-14 15:45:00
十分感谢楼上,数据如下:
73 35 80
74.3 36.8 82.8
74 36 83
74.3 36.5 82.2
74 36 81.5
75.7 36.2 82.3
85 37 81.5
89.9 37.5 85.6
137.8 37.9 82.1
190.9 38 83
199.2 39.9 84.5
193.7 49.2 89
218.2 78.5 101.6
220.3 97.7 106.4
218.3 112.5 118
215.9 130.6 128.1
213.3 145 128
222.1 151.9 144.3
210 152.9 150.3
209.7 155 156.2
206.3 161.4 160.2
205 159.1 163.3
204.2 159.8 166.1
206.6 158 167
207.5 159 168.6
206 160.4 172.1
204.7 158.1 172.8
203 159.4 173
202 160.6 174
201.8 155.7 173.3
200 155 173
198.6 156.2 172.4
199 161.1 173.7
196.9 157.1 171.3
197.9 156 171.7
198 155.1 169.9
197.2 155 169
195 155.5 168.7
194 151.3 167.5
193.6 151 165.5
194.3 151.2 168.1
186.8 151 165
186 153.3 165.6
186.2 149.6 165.1
186 151.2 164.6
180.3 152 163.7
205.9 147.4 163.4
193.4 148 162
203.5 149.6 163
197.3 151.5 164.1
186.4 144.8 161.9
199.5 146.9 162
183.8 145 161
190.7 144.1 160.9
198 146.1 160.6
194.6 144.2 159.4
191.6 143 159
192.5 142.7 159.2
197.6 143.5 158.1
187 149.5 159.9
还有几组数据没有做出来,能不能把代码发给我,我的邮箱是leoliuf@hotmail.com QQ:304584537 非常感谢!!!:):)
3 楼
gslyd [专家分:1300] 发布于 2008-01-15 15:22:00
SSy = 6.9389e+004
[a b] =[.4630522386, .3716504396e-2]
RSS =26937.10671
MSe = 464.4329
R^2 =.611795
4 楼
leoliuf [专家分:0] 发布于 2008-01-15 17:42:00
十分感谢gslyd,能不能把代码帖上来,或发到我邮箱(leoliuf@hotmail.com)里,我还有几组数据没有得出来,需要算。谢谢!
:-):-):-):-):-)
5 楼
gslyd [专家分:1300] 发布于 2008-01-15 22:34:00
可用lsqcurvefit or nlinfit 进行拟合。以我给出的结果作为初值即可。
但!这样的数据并不与所给方程有很好的关系,这种拟合的效果并不好。
6 楼
leoliuf [专家分:0] 发布于 2008-01-16 10:27:00
我用nlinfit写了程序,还是不行,能不能贴一下程序,谢谢!
7 楼
gslyd [专家分:1300] 发布于 2008-01-16 16:15:00
x=data(:,1:2);y=data(:,3);
b0=[.4630522386, .3716504396e-2];
b=nlinfit(x,y,'myfun',b0)
其中的myfun:
function fy=myfun(b,x)
fy=b(1)*x(:,1).*exp(b(2)*x(:,2));
8 楼
leoliuf [专家分:0] 发布于 2008-01-16 17:38:00
谢谢gslyd,不过 Y=a*X1⊙exp(b*X2)中⊙是卷积关系,不是乘积,我也写了个程序,你看看对不对,
主程序:------------------------------------------------------------〉
X=data(:,2:3);
y=data(:,1);
beta0=[0.0001,0.0001];
X=[smooth(X(:,1),'rloess'),smooth(X(:,2),'rloess')];
y=smooth(y,'rloess');
[beta,r,J,SIGMA,mse]=nlinfit(X,y,@Perfusion,beta0);
Perfusion函数:------------------------------------------------------〉
function yhat = Perfusion(beta,X)
yhat=beta(1)*nconv(beta(2),X);
nconv函数:----------------------------------------------------------〉
function Y=nconv(beta,X)
Y0=conv(X(:,1),exp(-beta*X(:,2)));
Y=Y0(1:60,1);
不过运行时老是有错:-(
9 楼
gslyd [专家分:1300] 发布于 2008-01-21 14:55:00
data=' '
X=data(:,2:3);y=data(:,1);
b=[.4991699060e15, .4370819265]
for l=1:100
b=nlinfit(X,y,'Perfusion',b);
b0=b
b=lsqcurvefit('Perfusion',b0,X,y);
end
%-----------------
%function yhat = Perfusion(beta,X)
%yhat=beta(1)*nconv(beta(2),X);
%--------------------
%function Y=nconv(be,x)
%Y0=conv(x(:,1),exp(-be*x(:,2)));
%Y=Y0(1:60,1);
我来回复