如何用matlab并用最小二乘法找出一天的气温变化规律?这类我们可以根据已知的数学模型,创建其数学模型函数,然后用lsqcurvefit()最小二乘拟合函数,求出其数学模型的系数。具体 *** 作过程如下:
1、创建模型1(三次函数) T=a+b*t+c*t^2+d*t^3函数,即
func=@(a,t)a(1)+a(2)*t+a(3)*t.^2+a(4)*t.^3
2、初定 a0的初值,如a0=[13,0,0.1,0]
3、使用lsqcurvefit函数,求解系数a
4、求出拟合值,即
T1=func(a,t)
5、使用plot函数,绘制曲线,即
plot(t,T1,'k-')
6、创建模型2(sin函数) 模型2 T=r*sin(pi/14*t+θ)+20函数,即
func=@(a,t)a(1).*sin(pi/14*t+a(2))+20
7、重复2-5的过程
8、比较模型1和模型2的拟合效果。从图形中,我们可以看到模型2的拟合效果比模型1要好得多。
>> fun=inline ('c(1)*sin((pi/12)*t+c(2)))','c','t')fun =
Inline function:
fun(c,t) = c(1)*sin((pi/12)*t+c(2))
>>t=[0 ,1, 2 ,3, 4 ,5 ,6 ,7, 8 ,9, 10, 11, 12,13 ,14 ,15 ,16 ,17 ,18, 19, 20 ,21, 22,23 ,24]
>>T=[15 ,14 ,14 ,14 ,14 ,15 ,16 ,18 ,20 ,22 ,23, 25 ,28, 31, 32 ,31, 29 ,27 ,25 ,24, 22, 20 ,18 ,17 ,16]
>>c=lsqcurvefit(fun,[0,0],t,T)
Optimization terminated: relative function value
changing by less than OPTIONS.TolFun.
c =
-6.97212793671912 0.76170885656579
T=-6.9721sin((pi/12)t+0.7617)
cleara=xlsread('data.xls','C2:G37')
n=length(a)
year=a(1,2)
sum=0ii=0
monthcount=0
yearcount=0
for i=1:n
if i ~= length(a)
if a(i,2)==year
if abs(a(i,5))>=9000
ii=ii+1% 异常值个数
else
sum=sum+a(i,5)
monthcount=monthcount+1
end
else
yearcount=yearcount+1
result(yearcount,1)=year
result(yearcount,2)=sum
result(yearcount,3)=monthcount
result(yearcount,4)=ii
year=a(i,2)
if abs(a(i,5))>=9000
ii=1
sum=0
monthcount=0
else
sum=a(i,5)
ii=0
monthcount=1
end
end
else if abs(a(i,5))>=9000
ii=ii+1% 异常值个数
else
sum=sum+a(i,5)
monthcount=monthcount+1
yearcount=yearcount+1
result(yearcount,1)=year
result(yearcount,2)=sum
result(yearcount,3)=monthcount
result(yearcount,4)=ii
end
end
end
sucess=xlswrite('Pre.xls',result)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)