function s=hansh(x,r)
a=x(1);
b=x(2);
s=a.*r.^0.5+b.*r;
保存为hanshu.m
t=[4,6,8,10,12,15];
y=[19,22,27,33,36,40];
x0=[1 1];
[x,resnorm]=lsqcurvefit(@hansh,x0,t,y)
保存为cesh.m
在命令窗口中输入cesh
结果:
x =
7.7600 0.7103
resnorm =
5.1186
x是两个系数的值,resnorm表示拟合曲线的残差(表示拟合值和实际值的差距,越小越好)
%将你的所有数据代入方程,会得到一个关于a,b的二元一次方程组(你给出六个数据,就有六个方程),再将方程组写成矩阵形式AX=b
x=[4,6,8,10,12,15]'; %转成列向量
y=[19,22,27,33,36,40]'; %转成列向量
A=[sqrt(x),x]; %矩阵
X=A\y; %求a,b,即求解线性方程组,方程数超过变量数,超定,MATLAB会自己用最小二乘法求解
a=X(1)
b=X(2)
plot(x,y,'*',x,a*sqrt(x)+b*x)
legend('原始数据点','拟合曲线')
你的函数没声明
你应该建立一个hansh.m放在你的工作环境下(代码的前四行)例如work文件夹
在主界面输入后四行
直接用回归命令regress即可,返回结果就是回归系数。
x,y都用列向量,然后用命令
[k,b]=regress(y,x),就行了。