Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 工程数学软件 > MATLAB论坛
MATLAB论坛 一切MATLAB相关问题在此讨论。
回复
 
主题工具 显示模式
旧 2010-01-28, 01:35   #1
mh007
初级会员
 
注册日期: 2010-01-28
帖子: 3
声望力: 0
mh007 正向着好的方向发展
默认 非线性最小2乘法 拟合 问题求助

大家好,我是 matlab 初学者,我想用 lsqnonlin 拟合几组数据,最后得到拟合多项式的5个参数。

有五组实验数据: t f e s c
其中 大致关系为 lnt=f(f,e,s,c)

现在想 用MATLAB 拟合 lnt=x(1)+x(2)*f+x(3)*s+x(4)*c+x(5)*e
要得到结果 x(1) x(2) x(3) x(4) x(5)

我写的代码如下

但是运行 结果提示:

Optimization terminated: directional derivative along
search direction less than TolFun and infinity-norm of
gradient less than 10*(TolFun+TolX).

不知道怎么回事?


望大伙帮忙,十分感谢!





%function 函数如下:
function y=ct(x)
t=[2.55 4.88 5.35 3.7 1.33 2.52 1.85 5.33 5.4 0.78 48 3.4 23.48 5.1 1.47 100 0.95 0.483 0.4 0.2 0.283 0.217 0.033 0.117 100 4.75 0.73 0.65 100 5.38 3.25 1.5];
f=[105.4 98.5 96.4 98.8 100.3 98.1 94.2 97.6 95.5 96.3 82.9 95 92.9 87.9 97.9 91.8 91.8 91.8 91.8 91.8 91.8 91.8 91.8 91.8 81.4 81.4 81.4 81.4 75.4 75.4 75.4 75.4];
e=[0.635 0.537 0.547 0.653 0.7 0.7 0.64 0.7 0.67 0.67 0.55 0.583 0.56 0.67 0.58 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.537 0.537 0.537 0.537 0.383 0.383 0.383 0.383];
s=[1429.6 1267.3 1301.2 1362.3 1602.7 1500.71 1359.9 1373.6 1487 1552 1347 1412 1372 1396 1438 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1216.8 1216.8 1216.8 1216.8 1081.8 1081.8 1081.8 1081.8];
c=[log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(5.82) log(7.54) log(10) log(11.55) log(13.5) log(17.27) log(20) log(27.61) log(1.1) log(5) log(10) log(20) log(1.1) log(5) log(10) log(20)];
y=log(t)-(x(1)+x(2)*f+x(3)*s+x(4)*c+x(5)*e)


%拟合程序如下:
t=[2.55 4.88 5.35 3.7 1.33 2.52 1.85 5.33 5.4 0.78 48 3.4 23.48 5.1 1.47 100 0.95 0.483 0.4 0.2 0.283 0.217 0.033 0.117 100 4.75 0.73 0.65 100 5.38 3.25 1.5];
f=[105.4 98.5 96.4 98.8 100.3 98.1 94.2 97.6 95.5 96.3 82.9 95 92.9 87.9 97.9 91.8 91.8 91.8 91.8 91.8 91.8 91.8 91.8 91.8 81.4 81.4 81.4 81.4 75.4 75.4 75.4 75.4];
e=[0.635 0.537 0.547 0.653 0.7 0.7 0.64 0.7 0.67 0.67 0.55 0.583 0.56 0.67 0.58 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.64 0.537 0.537 0.537 0.537 0.383 0.383 0.383 0.383];
s=[1429.6 1267.3 1301.2 1362.3 1602.7 1500.71 1359.9 1373.6 1487 1552 1347 1412 1372 1396 1438 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1356.8 1216.8 1216.8 1216.8 1216.8 1081.8 1081.8 1081.8 1081.8];
c=[log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(1.1) log(5.82) log(7.54) log(10) log(11.55) log(13.5) log(17.27) log(20) log(27.61) log(1.1) log(5) log(10) log(20) log(1.1) log(5) log(10) log(20)];
x0=[1 1 1 1 1];
lb=[];
ub=[];
options=optimset('Largescale','off','MaxFunEvals',10000);
x=lsqnonlin('ct',x0,lb,ub,options)
y1=log(t);
m=length(y1);
q=[1:m];
for i=2:m
o=i;
p=i;
for j=1:(i-1)
if y1(o)<y1(p-j)
a=y1(o);
y1(o)=y1(p-j);
y1(p-j)=a;
b=q(o);
q(o)=q(p-j);
q(p-j)=b;
o=o-1;
end
end
end
%for 循环用于吧实际数据 y1 从小到大排列
for r=1:m
y2(r)=x(1)+x(2)*f(q(r))+x(3)*s(q(r))+x(4)*c(q(r))+x(5)*e(q(r));
end
%这个for 循环用于,把拟合结果以对应 y1 的次序排列
subplot(1,2,1)
plot(y1,'ro')
grid on
hold on
subplot(1,2,1)
plot(y2,'bx')
y3=(y1-y2)./y1*100;
%y3为绝对误差
a2='lnt=(';
b2=')+(';
d2=')*f+(';
g2=')*\sigma+(';
h2=')*c+(';
i2=')*\epsilon';
j2=strcat(a2,num2str(x(1)),b2,num2str(x(2)),d2,num2str(x(3)),g2,num2str(x(4)),h2,num2str(x(5)),i2);
title(num2str(j2))
%这边啰啰嗦嗦一大堆,只是想在标题中显示得到拟合的函数,让它自己把拟合得到的参数填进去
xlabel('Sample')
ylabel('ln(t)')
legend('real','fit')
subplot(1,2,2)
plot(y3,'gd-')
grid on
title('Error analysis')
xlabel('Sample')
ylabel('Absolute error [%]')

此帖于 2010-01-28 01:38 被 mh007 编辑。
mh007 当前离线   回复时引用此帖
旧 2010-01-30, 00:52   #2
mh007
初级会员
 
注册日期: 2010-01-28
帖子: 3
声望力: 0
mh007 正向着好的方向发展
默认 回复: 非线性最小2乘法 拟合 问题求助

大侠们 跪求帮助。。。

谢谢!!!
mh007 当前离线   回复时引用此帖
旧 2010-02-01, 04:49   #3
mh007
初级会员
 
注册日期: 2010-01-28
帖子: 3
声望力: 0
mh007 正向着好的方向发展
默认 回复: 非线性最小2乘法 拟合 问题求助

("^")
mh007 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码



所有时间均为北京时间。现在的时间是 01:45


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.