1. matlab数据拟合函数
这,,,,,这是二值函数啊,手动给出一个解吧:
y = -2*sgn(x-31);
其中sgn是符号函数
如果要用连续函数拟合的话,可以用sigmod函数:
y = -2/(exp(-x+31.5)+1) + 1;
![matlab数据拟合函数](https://tse-mm.bing.com/th?q=matlab%E6%95%B0%E6%8D%AE%E6%8B%9F%E5%90%88%E5%87%BD%E6%95%B0)
2. matlab怎么根据数据拟合公式
不管是什么程序(matlab或是excel),你必须得告许程序目标拟合公式的形式。这里的形式,是指你的公式是多项式型、对数型、三角形或其它的形式,但是这个公式里面有待定的系数,而这个系数就是通过拟合得到的。
还有就是数据拟合,一般采用最小二乘的方法,这种方法并不是所有形式的公式都可以拟合。如果你的公式比较复杂,比如上说是一个积分形式,并且这个积分还不能显示的积出来,需要数值积分才可以积出来的话,用最小二乘法就不行了,这时,matlab是没有现成的函数来进行拟合的,这时就需要自己编程序来实现,比如可以运用“黄金分割法”、“Powell优化”等方法来实现。
但,如你所提的问题,多项式是可以拟合的,多项式拟合也是最基本的数据拟合。可是呢,你又不知这个多项式是多少次的,这时候就需要根据你对已有数据观察加以判断了。你可以先假定是N次的,然后根据拟合的效果看是否需要更改。数据拟合并没有标准答案,只要你拟合出来的曲线和已有的数据符得相对比较好就行了。转载,仅供参考。
3. matlab数据拟合
程序改成如下:
x=0:pi/20:pi/2; y=sin(x); a=polyfit(x,y,5);x1=0:pi/30:pi*2;y1=sin(x1);y2=a(1)*x1.^5+a(2)*x1.^4+ a(3)*x1.^3+ a(4)*x1.^2+ a(5)*x1+a(6) ; plot(x1,y1,'b-',x1,y2,'r*')set(gca,'Xtick',[0:0.5:7])%设置坐标轴legend('原曲线','拟合曲线') grid onaxis([0,7,-1.2,4])
第二问。程序改成如下:
x=0:pi/20:pi/2;y=sin(x);a=polyfit(x,y,5);x2=0:pi/20:pi/2;y2=a(1)*x2.^5+ a(2)*x2.^4+ a(3)*x2.^3+ a(4)*x2.^2+ a(5)*x2+a(6);%把x1该成x2plot(x,y,'*',x2,y2,'-')
![matlab数据拟合](https://tse-mm.bing.com/th?q=matlab%E6%95%B0%E6%8D%AE%E6%8B%9F%E5%90%88)
4. matlab拟合函数?
题主给出中国人口预测问题(二),可以使用英国经济学家马尔萨斯提出的Malthus模型来拟合与预测。其步骤:
第一步,自定义Malthus模型函数(指数函数),如
func=@(k,t)N0*exp(D*(t-t0))
这里,N0=60.2;t0=1954;
第二步,利用1954-2005年的数据,分别使用lsqcurvefit函数,求出系数D。即
[D,resnorm,residual,exitflag]=lsqcurvefit(func,a0,t,N);
第三步,计算拟合值,即
x1=func(D,t);
第四步,计算相关系数R^2,即
R2=R2_fun(x,x1);
第五步,预测2010年和2030年的人口数,即
xhat=func(D,2010);
disp(['预测2010年人口数为',num2str(xhat),'千万'])
xhat=func(D,2030);
disp(['预测2030年人口数为',num2str(xhat),'千万'])
第六步,使用plot函数绘制,中国人口数的统计数据与预测模型曲线对比图,即
plot(t,x,'*-',t,x1,'+-')
第七步,标注图例,即
legend('统计数据','Malthus模型')
第八步,编写标题,即
title='中国人口数的统计数据与Malthus模型曲线对比';
第九步,标注坐标轴名称,即
xlabel('年份');ylabel('人口(千万)');
最后,编写程序,并运行可以得到如下结果。
其他问题与上述过程类似。
5. matlab拟合函数?
首先,把给出的向量方程,改写为
a1*X+a2*Y+a3=-(X²+Y²)
Z(x,y)=-(x²+y²)=a1*x+a2*y+a3
然后,我们用regress最小二乘法回归函数来拟合a1、a2、a3的系数
x=[。。。] %数据
y=[。。。] %数据
Z=-(x²+y²);
X=[x y ones(n,1)]; %n=x或y数据的个数
a= regress(Z,X); %求出系数a1,a2和a3
此时,我们就可以得到如下系数:
a1=a(1),a2=a(2)和a3=a(3)
![matlab拟合函数?](https://tse-mm.bing.com/th?q=matlab%E6%8B%9F%E5%90%88%E5%87%BD%E6%95%B0%EF%BC%9F)
6. 关于matlab拟合
用matlab拟合三维曲线函数,一般可以用lsqcurvefit或nlinfit等函数来求解其函数的系数。求解步骤:
1、已知x、y、z的对应的数据,若干组(数据要求十组以上)
x=[。。。];y=[。。。];z=[。。。];
X=[x y]; %组成X向量组
2、自定义拟合函数,例如,fun=@(a,X)a(1)*X(:,1).^2+a(2))*X(:,2).^2
3、初定a的初值,a0
4、求解拟合系数,a=lsqcurvefit(fun,a0,x,z)
5、已知值与拟合值对比,并求其决定系数 R²
z1=fun(a,X)
[z z1] %对比
6、判断其决定系数 R²是否接近于1。
7. matlab函数拟合
问题出在,t=0时,Log10(t)是无穷大,所以运行程序出现警告。处理方法,人为地加一个最小量,即
t=[eps 0.3333333333333144 0.6666666666666856 1.0 ......]
程序修改后代码
t=[eps 0.3333333333333144 0.6666666666666856 1.0 ......]';
y=[0.7000000000000455 5.5 5.5 5.400000000000034 5.300000000000011 ......]';
[coefit,yfit]=f_mbpclft(t,y) %f_mbpclft()自定义函数就是你给的内容
运行结果
![matlab函数拟合](https://tse-mm.bing.com/th?q=matlab%E5%87%BD%E6%95%B0%E6%8B%9F%E5%90%88)
8. 用matlab拟合函数
用matlab拟合成:(a/165000)*(2*x)^b+d*(2*x)^c这种形式,一般可以lsqcurvefit()来确定a,b,c,d的系数。
经拟合可以求得
a=0.00011353,b=1,c=-5.1844,d=-5.1844
R^2=0.97664 %相关系数(拟合度)
运行代码: