你把数据告诉我,我来试试看~~
In Matlab,Use:
polyfit(x,y,2)
得到:y=0.005x2 -0.1716x+16.0660
你看看这个是否符合你的要求,另外,要看你的数据了,如果你想求y在x=10的时候的值,这个绝对是不可以的,你只能在这个附近做个大致的计算。
我检验的结果也不是很满意,
问题在于你想拟合成什么函数。如果是简单的多项式函数可以用polyfit,程序如下
x=[1 3 5 6 8 9 10 11 12 14 15 17 19 21 23 25];
y=[10 20 42 60 73 79 80 78 73 56 71 51 42 41 40];
plot(x,y,'ro');
p=polyfit(x,y,4);%于是拟合出的曲线就是p(1)x^4+p(2)x^3+p(3)x^2+p(4)x+p(5),想拟合成其它次数的多项式只需将4改为相应的次数即可
f=poly2sym(p);
xinterp=[2 4 7 13 16 18 20 22 24];
yinterp=subs(f,xinterp);
hold on;
plot(xinterp,yinterp,'o');
ezplot(f,[0,30])
下面程序放到一个m文件里,运行即可:
function a=f()
x=[0.25 0.5 0.75 1 1.5 2 2.5 3 3.5 4 4.5 5 6 7 8 9 10 11 12 13 14 15 16 ];
y=[15 34 37.5 41 41 38.5 34 34 29 25.5 25 20.5 19 17.5 14 12.5 9 7.5 6 5 3.5 3.5 2];
a = nlinfit(x,y,@ff,[1;1]);
function y=ff(a,x)
y=log(a(1))-a(2)*x;
拟合结果不太好,可能是你的函数形式问题
可以用拟合的方法,最简单用多项式拟合,就能出来一个多项式的表达式(公式)。在MTALAB中多项式拟合的函数是polyfit。
你要做指数拟和吗,我觉得应该先将拟合方程做变换,将指数方程变为线性方程,然后用matlab中的线性拟合公式进行拟合,然后可以得出r1和b |
如果拟合成直线就是说幂次是1,程序如下,
x=[1 2 3 4 5 6];
y=[8.59 9.54 10.55 11.54 12.54 13.54];
n=1;
p=polyfit(x,y,n); %计算n次多项式系数p
xi=linspace(0,6,100);
yi=polyval(p,xi); %计算多项式的值
plot(x,y,'o',xi,yi);
xlabel('x'),ylabel('f(x)')
title('最小二乘法拟合')
数值替换成你自己的数据。
matlab统计工具箱里面有个函数,叫cftool
用这个函数什么函数形式都能拟合。
不需要程序,你直接敲入cftool,就会出来图像化工具