如何用MATLAB对一个函数图拟合得到比较准确的公式?

就是上传的图片里面中间那条曲线(Global)
能不能给出详细的程序?

图片太小,看不清楚,但是我给出一个别的例子(这个例子是我们老师上课时演示过的例子),跟你这个类似,可以参考一下,无论别人怎样回答,你都要知道matlab中用到的函数名的功能,自己一步步输入数据执行。
举例:已知某镇近20年(79-98)的人口统计为:3.90, 5.30,7.20 ,9.60, 12.90, 17.10 ,23.10,31.400,38.60,50.20,62.90 105.70 179.0 205.00,226.5 试分别用一阶,二阶,四阶多项式和指数曲线拟合人口对年份的曲线。
pop1=[3.90 5.30 7.20 9.60 12.90 17.10 23.10 31.400]
pop2=[38.60 50.20 62.90 76.0 92.0 105.70 22.80]
pop3=[131.70 150.70 179.0 205.0 226.50];
pop=[pop1,pop2,pop3]'
cdate=1979:1998;
cdate=cdate'
p=polyfit(cdate,pop,4)
会出现:
Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 3.000002e-024.
> In D:\toolbox\matlab\polyfun\polyfit.m at line 52
In c:\matlabbk\qx2.m at line 7
应对cdate 进行数据预处理,方法为:
sdate=(cdate-mean(date))./std(cdate)
对应的脚本程序为:
pop1=[3.90 5.30 7.20 9.60 12.90 17.10 23.10 31.400]
pop2=[38.60 50.20 62.90 76.0 92.0 105.70 22.80]
pop3=[131.70 150.70 179.0 205.0 226.50]
pop=[pop1,pop2,pop3]'
cdate=1979:1998;
cdate=cdate'
sdate=(cdate-mean(cdate))./std(cdate)
p=polyfit(sdate,pop,4)
运行该文件,可得到多项式的拟合曲线和误差曲线。
将预处理的人口数据的对数,进行一次拟合,对应的脚本程序为:
pop1=[3.90 5.30 7.20 9.60 12.90 17.10 23.10 31.400]
pop2=[38.60 50.20 62.90 76.0 92.0 105.70 22.80]
pop3=[131.70 150.70 179.0 205.0 226.50]
pop=[pop1,pop2,pop3]'
cdate=1979:1998;
cdate=cdate'
sdate=(cdate-mean(cdate))./std(cdate)
logp1=polyfit(sdate,log10(pop),1)
logpred1=10.^polyval(logp1,sdate)
semilogy(cdate,logpred1,'-',cdate,pop,'+')
grid on
得到的结果是:10
y=1.5944(10.^0.5211x)

问题的关键在于你要事先观察数据连成的点符合什么分布,然后用这个分布去拟合,得到相应的参数,方差(最小二乘法),方差小的即为所要的曲线分布。
希望对你有帮助。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-07
自己一步步输入数据执行,你都要知道matlab中用到的函数名的功能,可以参考一下,无论别人怎样回答,看不清楚,但是我给出一个别的例子(这个例子是我们老师上课时演示过的例子),跟你这个类似图片太小:已知某镇近20年(79-98)的人口.。
举例
第2个回答  2009-04-19
你用matlab的cftool试试
在命令窗中输入 cftool,很人性化的窗口
第3个回答  2009-04-19
三次插值