注册 登录
编程论坛 Matlab

MATLAB数据拟和问题请教!!

liq000123 发布于 2006-10-11 10:11, 3488 次点击
只有本站会员才能查看附件,请 登录

我自己把图画出来了。。但是不知道怎么拟和。请教高手帮忙看下。。
其中《放矿高度与体积的关系曲线_1》应该是指数函数的。
《放矿椭球体_1》应该是个椭圆的。
函数最好可以显示在图上。。
12 回复
#2
ydgsl2006-10-11 23:02

上述第一个问题比较简单,结果为:
y=b1*exp(b2*x-b3*x^2)
b=[6708.80036, .243479098e-1, .276638857e-4]

y=b1+b2*exp(b3*x-b4*x^2)
b=[-13807.5916, 10805.0272, .210387493e-1, .217123205e-4]
请运行下列程序:
clear,clc
x=[0., 10., 20., 35., 45., 55., 65., 75., 85., 95., 105., 115., 125., 135., 145., 155., 165., 175., 185., 195., 205., 215., 225., 235., 245., 255., 265., 275., 285., 295., 305.];
y=[0., 2806.250, 4818.750, 9453.130, 11875., 14612.50, 21896.88, 27143.75, 39768.75, 49565.63, 61243.75, 77850., 93890.63, 114675., 135662.5, 151715.6, 179793.8, 209518.8, 238796.9, 268334.4, 318181.2, 354221.9, 390725., 434387.5, 493178.1, 550512.5, 603787.5, 668978.1, 738828.1, 794840.6, 860984.4];
b=[6708.80036, .243479098e-1, .276638857e-4]
plot(x,y,'o','markerfacecolor','k','markeredgecolor','k','markersize',8)
hold on
x1=min(x):2.5:max(x);
y1=b(1)*exp(b(2)*x1-b(3)*x1.^2);
plot(x1,y1,'linewidth',3)
b=[-13807.5916, 10805.0272, .210387493e-1, .217123205e-4]
y2=b(1)+b(2)*exp(b(3)*x1-b(4)*x1.^2);
plot(x1,y2,'r-','linewidth',2)
axis tight

第二个问题有点难度,结果稍后再给出。

#3
ydgsl2006-10-11 23:49
第二个问题的结果为:
y=sqrt(b1*x+b2*(x-b3)^2);
其中:b=[9.67259042, -.464304995e-1, 53.1406257]

请运行下列程序:
y=[10., 15., 15., 20., 20., 20., 25., 25., 30., 30., 30., 30., 30., 30., 30., 35., 35., 35., 35., 30., 30., 30., 25., 25., 20., 20., 20., 15., 15., 10., 10., 5., 5., 0., 0., -5., -5., -10., -10., -15., -15., -20., -20., -20., -25., -25., -30., -30., -30., -35., -35., -35., -35., -30., -30., -30., -30., -30., -30., -30., -25., -25., -20., -20., -20., -15., -15., -10.];
x=[305., 295., 285., 275., 265., 255., 245., 235., 225., 215., 205., 195., 185., 175., 165., 155., 145., 135., 125., 115., 105., 95., 85., 75., 65., 55., 45., 35., 25., 20., 15., 10., 5., 0., 0., 5., 10., 15., 20., 25., 35., 45., 55., 65., 75., 85., 95., 105., 115., 125., 135., 145., 155., 165., 175., 185., 195., 205., 215., 225., 235., 245., 255., 265., 275., 285., 295., 305.];
b=[9.67259042, -.464304995e-1, 53.1406257]
x1=linspace(min(x)+6,max(x)+.5,120);
y1=sqrt(b(1)*x1+b(2)*(x1-b(3)).^2);
plot(x,y,'o','markerfacecolor','k','markeredgecolor','k','markersize',8)
hold on
plot(x1,y1,'b-','linewidth',3)
y2=-sqrt(b(1)*x1+b(2)*(x1-b(3)).^2);
plot(x1,y2,'b-','linewidth',3)
axis tight
#4
abingchem2006-10-12 08:22
高手,欢迎欢迎
#5
liq0001232006-10-12 09:25
高手啊。。
在这里谢谢了!!你能给我你的qq号或其他的联系方式吗?我还有其他问题要请教!!
#6
尘埃1222006-10-12 10:09
ydgsl请教

你参数拟合的方法是什么?用的是什么函数求出的b参数?
#7
liq0001232006-10-12 11:02

不好意思刚才没有注意。。
我也想问同样的问题 就是用的是什么函数求出的b参数?
还有第二个问题的x的数据和y的数据好象反了。。
我想把函数显示在图上怎么做的啊?

#8
ydgsl2006-10-12 23:26
1、所使用的算法是缩张算法结合改良高斯牛顿法的合成算法。在matlab基础上编制了曲线、曲面拟合的程序。用此算法对所有NIST测试题均能顺利实现全局最优参数估计。对1stOpt9个测试题也能实现全局最优拟合,其中少部分(2-3个)确有较大难度。当然,对于第一个较简单的问题,可采用lsqcurvefit 或 nlinfit命令 可能也能得到所要的结果。
2、x和y的数据对调了,这样便于处理。否则要增加参数,增加复杂性。
3、运行我上述程序,便可得到图形,至于函数显示在图上的问题,可在图形窗口内用添加文本的方式解决。
#9
尘埃1222006-10-13 11:40
ydgsl 呵呵,有问题请教:

1.matlab中lsqcurvefit()函数运行时会出现“Optimization terminated: relative function value
changing by less than OPTIONS.TolFun.”运行警告,不知您是否也曾遇到?

2.能否介绍lsqcurvefit()和nlinfit()两种函数的区别和实现原理?

3.您的1stOpt9是否已经注册?运行的结果是否如众人所说,比一般的 统计软件拟合结果好?

呵呵,问题太多,请教大侠了
#10
ydgsl2006-10-13 19:33
尘埃122:
1、matlab警告指的是前后几轮的目标函数变化小于规定值(1e-8),尚未收敛但已超出迭代次数(100次)。这种情况我也遇到过,但目前我主要是用自己的程序,其最优拟合的能力较强,也就很少使用nlinfit或lsqcurvefit了。
2、这两种命令均主要使用levenberg-Marquardt算法。
3、1stOpt不是我的产品,我编的程序比1stOpt有一定的距离,但相对简单方便,对于大多数会编程的人来说也能应用。其核心是缩张算法+Levenberg-Marquardt方法。目前可实现绝大多数能找到的测试问题的最优拟合(包括1stOpt测试问题),我们目前正在编制不依赖于Matlab的通用软件。
#11
尘埃1222006-10-16 10:45
呵呵,谢谢ydgsl的解答

以后有问题再向您请教,对您编制的软件,拭目以待:)
#12
liuhuaqiang2009-10-23 23:22
我想拟合一个线性函数,在MATLAB中需要用那些函数
各位大侠
#13
liuhuaqiang2009-10-24 10:26
我想拟合一个线性函数,在MATLAB中需要用那些函数
各位大侠
1