回 帖 发 新 帖 刷新版面

主题:[原创]怎么能求出这样一组数据拟合函数的参数啊?

我有一个2*129的矩阵,他们是对应的关系,就类似(x,y)这种的
我画了一下这组数据构成的图形
想用正态函数去逼近他
可是正态函数有两个参数mu,sigma
在matlab里有函数lsqcurvefit.m可以直接把x,y带进去就得出一组最适合原来数据的参数,然后根据得到的这组mu,sigma才能画出逼近曲线

可是这种两个参数的怎么带啊?
我按照书上写的可是总是说我这个lsqcurvefit函数用的错误
还请大家帮帮忙!
数据是下面的这些
x=[0    0.3906    0.7813    1.1719    1.5625    1.9531    2.3438    2.7344    3.1250    3.5156    3.9063    4.2969    4.6875    5.0781    5.4688    5.8594    6.2500    6.6406    7.0313    7.4219    7.8125    8.2031    8.5938    8.9844    9.3750    9.7656   10.1563   10.5469   10.9375   11.3281   11.7188   12.1094   12.5000   12.8906   13.2813   13.6719   14.0625   14.4531   14.8438   15.2344   15.6250   16.0156   16.4063   16.7969   17.1875   17.5781   17.9688   18.3594   18.7500   19.1406   19.5313   19.9219   20.3125   20.7031   21.0938   21.4844   21.8750   22.2656   22.6563   23.0469   23.4375   23.8281   24.2188   24.6094   25.0000   25.3906   25.7813   26.1719   26.5625   26.9531   27.3438   27.7344   28.1250   28.5156   28.9063   29.2969   29.6875   30.0781   30.4688   30.8594   31.2500   31.6406   32.0313   32.4219   32.8125   33.2031   33.5938   33.9844   34.3750   34.7656   35.1563   35.5469   35.9375   36.3281   36.7188   37.1094   37.5000   37.8906   38.2813   38.6719   39.0625   39.4531   39.8438   40.2344   40.6250   41.0156   41.4063   41.7969   42.1875   42.5781   42.9688   43.3594   43.7500   44.1406   44.5313   44.9219   45.3125   45.7031   46.0938   46.4844   46.8750   47.2656   47.6563   48.0469   48.4375   48.8281   49.2188   49.6094   50.0000]
y=[0   0   0   0   0   0   0   0.0001    0.0002    0.0014    0.0051    0.0110    0.0156    0.0288    0.0290    0.0111    0.0225    0.0335    0.0483   0.0056    0.0803    0.1387    0.1598    0.0679    0.0252    0.0478    0.0474    0.0268    0.0066    0.0088    0.0050    0.0050   0.0028    0.0039    0.0078    0.0100    0.0055    0.0028    0.0071    0.0048    0.0080    0.0020    0.0019    0.0041    0.0042   0.0041    0.0043    0.0115    0.0067    0.0083    0.0038    0.0015    0.0018    0.0050    0.0035    0.0037    0.0064    0.0027   0.0032    0.0028    0.0027    0.0016    0.0008    0.0011    0.0017    0.0017    0.0006    0.0004    0.0028    0.0026    0.0012   0.0011    0.0007    0.0006    0.0013    0.0015    0.0001    0.0008    0.0007    0.0009    0.0017    0.0018    0.0011    0.0008   0.0004    0.0002    0.0001    0.0003    0.0003    0.0002    0.0003    0.0001    0.0004    0.0002    0.0002    0.0002    0.0001   0.0001   0   0   0   0  0.0001  0.0001  0.0001   0  0  0  0  0  0  0  0  0  0  0  0  0  0   0   0   0   0   0   0  0  0  0]

回复列表 (共5个回复)

沙发

BP网络试了吗?

板凳

BP是神经网络的那个吗?
之前感觉用哪个应该效果很好,可是不会啊
一点也没接触过,不知道怎么办?
还请赐教啊!

3 楼

不知道你的函数是什么样的,这里给你个示例,可以参考
第一步:编写M文件
function Y= myfun(x,ydata)
Y=(x(3)-x(4))./((1+(x(1).*hdata.^x(2).^(1-(1./x(2)))+x(4)
命令文件:
xdata = [0.00 27.20 53.04 62.56 69.36 81.60 95.20 108.80 126.48 159.12 197.20 251.60 262.48 286.96 359.04 452.88 503.20];  
ydata=[0.476 0.434 0.406 0.401 0.392 0.382 0.365 0.351 0.335 0.312 0.287 0.271 0.261 0.253 0.252 0.236 0.234];
x0=[0.1 1 0.1 0.1];                   % 待定参数的初始值
[x,resnorm] = lsqcurvefit(@myfun,x0,xdata,ydata)

4 楼

function Y= myfun(x,ydata)
Y=(x(3)-x(4))./((1+(x(1).*hdata.^x(2).^(1-(1./x(2)))+x(4)

这个函数是根据什么写出来的啊?
如果我想用高斯函数呢?就是那个normpdf(x,mu,sigma)
这个时候调用函数myfun怎么写啊?
写出来之后x0和lsqcurvefit的调用怎么写啊?
不好意思,问的有点太细了
不过还请高手帮帮忙

我已经在这纠结很久了!:(

5 楼


那是所要拟合出的函数表达式
x(1),x(2)......是你所要拟合的参数,不过都写成了x的函数形式
lsqcurvefit是非线性曲线拟合函数
 normpdf是概率密度函数
这两个函数的数学原理不一样
我上面回复的 M 文件名为myfun在lsqcurvefit已经调用
如果我在复制粘铁过程中没有出错的话,示例是可以运行的
多查看Matlab Help
还有肯定需要选择一个接近的函数表达式,否则你拟合的参数放在那里???
根据拟合曲线和你的散点图的逼近效果,来确定较优的函数表达式 

我来回复

您尚未登录,请登录后再回复。点此登录或注册