请教:多元非线性幂函数拟合

请教:多元非线性幂函数拟合,第1张

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。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/12178212.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存