1、用表格计算是一件比较繁琐的过程。
2、可以借于Matlab的nlinfit()函数,很方便地求出拟合系数a、b、c、d、e。求解步骤:
%已知数据
x=[0 61326 61326 60238 60238 93046]';
y=[160 160 185 0210 235 160];
z=[16 12 10 9 6 8];
x=[x y];
y=z;
%自定义函数
func=@(a,x)[a(1)x(:,1)^a(2)+a(3)x(:,2)^a(4)+a(5)]
a=nlinfit(x,y,func,a0);vpa(a,5)
x1=x;
z1=func(a,x1);
[z z1] %比较已知数据与拟合数据的差值。
运行结果
a=-0000034393、b= 18079、c=2284、d= -026351、e= -43961
以下已知数据与拟合数据的对比
已知数据 拟合数据
160000 160038
120000 122357
100000 99849
90000 82091
60000 65789
80000 79972
方法一
1、最常用的是多项式拟合,采用polyfit函数,在命令窗口输入自变量x和因变量y。
2、以二次多项式拟合为例,输入p=polyfit(x,y,2),如果想拟合更高次的多项式,更换括号内数字即可。
方法二
1、在MATLAB自带的曲线拟合工具包上方工具栏选取APPS,点击curve fitting。在上方工具栏选取APPS,点击curve fitting
2、输入自变量x和因变量y。
3、选择拟合方式,有多项式拟合polynomial,高斯拟合gaussian,幂指数拟合power等等,本次以多项式拟合为例。
4、通过数据计算,可以获得曲线参数(曲线函数中的各项系数),从而实现曲线拟合。
给你举一个求函数值的例子:
首先新建一个m文件,然后在里边写如下代码(具体的函数体,代码会不同):
function y=fff(x,z1,z2) %fff为函数名,当你保存m文件的时候最好也用这个名,这样不会在运行时出错,否则的话可能会出错,其中y为输出参数,即函数值,x,z1,z2为输入参数,x为自变量,z1,z2为函数中的参数,当k1,k2不随x的变化而变化的时候,可以只写为“function y=fff(x)”,但是参数k1k2要在m文件中声明。
for i=1:length(x)
p(i)=sqrt(x(i)^2+10)+z1(i)-z2(i); %x(i),z1(i),z2(i)分别为向量的第i的元素
y=p2-5; %注意函数体中一定要要给y赋值,因为y是输出参数,否则会出现错误。
end
到此为止,m文件编写结束,要保存。
然后在matlab的command窗口输入以下内容:
x=1:5;
z1=1:-01:06;
z2=0:05:2; %注意x,z1,z2的大小要一致,如果z1,z2已经在函数中声明,这里就不用输入了。
pp=fff(x,z1,z2) %注意输入参数的顺序要和函数的一样
之后会出现以下结果:
pp =
36332 32833 33178 35980 40322
得知自变量x和因变量y的值后,就可以拟合了,但是你要做拟合的话最好用spss
matlab的曲线拟合并不是很好,但是给你介绍一下在命令窗口下输入以下命令:
plot(x,y,'r:o') % 会出现一个figure,在菜单栏上的tools选择basic fitting,以下你自己弄就可以了,可以看见图像,又可以看见曲线的表达式,但据我所知matlab只能拟合幂函数。
你的程序太乱,没看懂,不知我写的是否对你有帮助
cftool拟合的是当前数据,所以0肯定不会显示啊!
既然你拟合出了这些数据符合的函数表达式,你要求x=0处的值,那你把x=0带入函数表达式,得到y的值即可!
图中只是假设其函数关系是ae^x+b,最后得到a和b的值,把x=0带入后,y=a+b。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)