一、什么是“拟合”
拟合:得到一条确定的曲线,经过尽可能多的点
插值:要经过所有样本点,为了避免龙格现象通常采取分段
(倾向于选择拟合,因为希望得到确定的曲线)
二、拟合的方法:最小二乘法
三、评价拟合效果:R_2
SSE也可当成拟合优度
线性函数拟合效果看R_2,非线性函数和其他复杂的函数看SSE即可
此处线性函数不是针对变量而言,而是针对参数来说是线性
特别地,这里指数函数可以取对数,从而变为线性于参数的函数
四、代码
(补充)匿名函数:
handle=@(传入的参数,多个参数用逗号分隔)函数表达式
handle为调用匿名函数时使用的名字
比如:
%z=@(x,y)x^2+y^2
%z(1,2)
%ans=5
fplot函数可用于画出匿名一元函数的图形
fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像
clear;clc
%画样本点
plot(x,y,'o')
%给x和y轴加上标签
xlabel('x的值')
ylabel('y的值')
n=size(x,1) %求行数->共有几个样本点(x和y的数据按列排下来)
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x))
b=(sum(x.*x)*sum(y)-sum(x.*y)*sum(x))/(n*sum(x.*x)-sum(x)*sum(x))
hold on %继续在之前的图上画
grid on %显示网格线
%模拟生成新数据(间隔设置得越小,画的图形越准确)
xx=2.5:0.1:7
yy=k*xx+b
%plot(xx,yy,'-')
%匿名函数
%handle=@(传入的参数,多个参数用逗号分隔)函数表达式 handle为调用匿名函数时使用的名字
%比如
%z=@(x,y)x^2+y^2
%z(1,2)
%fplot函数可用于画出匿名一元函数的图形
%fplot(f,xinterval)画出匿名函数f在指定区间xinterval=[xmin,xmax]上的图像
f=@(x)k*x+b;
fplot(f,[2.5,7]);
legend('样本数据','拟合函数','Location','southeast')
y_hat=k*x+b %y的拟合值
SSR=sum((y_hat-mean(y)).^2) %回归平方和 mean()是求平均值的函数
SSE=sum((y_hat-y).^2) %误差平方和
SST=sum((y-mean(y)).^2) %总和平方和
SST-SSE-SSR %结果为0,证明SST=SSE+SSR
R_2=SSR/SST
五、强大的拟合工具箱:cftool
命令行窗口输入cftool
注意:
拟合方式选择:Custom Equation(自定义方程)时,
写入自定义公式(注意在代码中写时,要把乘除写成点乘和点除,因为这里x和y是向量了)
若result栏显示: Fit computation did not converge即没有找到收敛解,且拟合图效果也不好,
则点击Fit Options,修改非线性拟合的初始值(StartPoint),r修改为0.02,xm修改为500
可以导出图片和代码
六、生成随机数(randi rand normrnd roundn)
%randi: 生成均匀分布的随机整数(i=int)
s1=randi(10,2,5) %生成1-10的随机整数矩阵,大小为2*5
s2=randi([-5,5],1,10) %生成-5至5之间的随机整数矩阵,大小为1*10
%rand: 生成在0-1之间均匀分布的随机数
s3=rand(1,5) %生成0-1的随机矩阵,大小为1*5
%a+(b-a)*rand(*,*): 生成在a和b之间均匀分布的随机矩阵
s4=2+(5-2)*rand(1,5) %生成2至5之间的随机矩阵,大小为1*5
%normrnd: 产生正态分布的随机数
%产生一个均值为0,标准差为2的正态分布随机矩阵,大小为3*4
%s5=normrnd(0,2,3,4)
%roundn: 任意位置四舍五入
% 0个位 1十位 2百位 -1小数点后一位 -2小数点后两位
a=3.1415
roundn(a,-2) %ans=3.1400
roundn(a,2) %ans=0
a=31415
roundn(a,2) %ans=31400
a=5.5
roundn(a,0) %ans=6
roundn(a,1) %ans=10
clear;clc
x=rand(30,1)*10 %x是0-10之间均匀分布的随机向量(30个样本)
y=3*exp(0.5*x)-5+normrnd(0,1,30,1)
cftool
*** 函数或变量 'normrnd' 无法识别:
1、命令行窗口输入doc normrnd,打开相应的文档(如图)
2、会显示未安装某某产品,点击进去,按提示安装即可