matlab 多元非线性函数拟合

matlab 多元非线性函数拟合,第1张

因为这个函数的形式比较特殊,对其两边取对数后得到

log(y)=log(a)+blog(x1)+clog(x2)

于是立即就转换为了线性拟合

[1 log(x1) log(x2)][log(a) b c]'=log(y)

于是[log(a) b c]'=[1 log(x1) log(x2)]\log(y)

这样就可以得到a,b,c了。不需要进行非线性拟合。

下面是程序:(对于x1、x2、y的赋值部分这里就不写了,你自己在前面加上即可)

p=[ones(length(y),1) log([x1 x2])]\log(y);%就这一句话就搞定了

a=exp(p(1)),b=p(2),c=p(3)%这就是拟合后的参数值

y%这是采样点y的值

ax1^bx2^c%这是拟合后在采样点得到的值,可以和y比较一下,很接近。

题主的(4自变量1因变量)多元函数的拟合matlab程序。可以用nlinfit非线性回归函数来做(也可以用lsqcurvefit函数)。实现代码:

x1=[055 065 065 065 065 055 055 055 065]';

x2=[16 16 14 16 14 14 16 14 14]';

x3=[20 20 20 10 10 20 20 20 20]';

x4=[10 10 10 10 10 10 12 12 12]';

Y=[1848 3145 3337 3022 3188 197 163 1621 2534]';

X=[x1 x2 x3 x4];

n=length(x1);

a0=rand(1,5);

func=@(a,X)(a(1)+a(2)X(:,1)+a(3)X(:,2)+a(4)X(:,3)+a(5)X(:,4));

[a,r,J] = nlinfit(X,Y,func,a0);a

Y1=func(a,X);

[Y  Y1]

运行上述代码,可以得到

a1= -152778571412534;a2= 114823809522886;a3=  -0359047619087202 ;a4= 000441190476147387;a5=-023363095238449

多元函数表达式,y=a1+a2x1+a3x2+a4x3+a5x4

nlinfit与lsqcurvefit两者区别并不太大,前者用回归的方法来求解,而后者用最小二乘法来求解,两者都可以用于非线性函数和线性函数。

使用griddata函数,可进行三维拟合,并求出任意点处的值,之前用过求电流温度和电阻率的函数拟合如下rq=griddata(i,t,r,iq,tq) 。

具体过程如下:

D=[[1,6,92];[4,12,15];[7,4,23];[10,10,25];[13,2,11];[16,8,9];[0,0,3861]]

D =

10000    60000    92000

40000   120000    15000

70000    40000    23000

100000   100000    25000

130000    20000   110000

160000    80000    90000

0         0        3861000

x=D(:,1);y=D(:,2);

z=D(:,3);

T=[x y xy xx yy ones(7,1)]\z

T =-307039

-875047

29042

06209

44429

3861000

所以所求函数为 T(1)x+T(2)y+T(3)xy+T(4)x^2+T(5)y^2+T(6)

即z=-307039x--875047y+29042xy+06209x^2+ 44429y^2+3861000

1、首先启动matlab,选择编辑器,再新建一个命令文件。

2、然后在编辑器窗口中输入图示的代码。

3、然后我们点击界面上方菜单栏里的保存图标进行保存。

4、需要注意的是,保存文件的位置要与当前搜索路径的位置保持一致。这可以通过右键编辑窗口的文件,在d出的下拉框中选择。

5、最后再命令行窗口处输入dxsnh,并敲入键盘上的enter建。可以看出阶数越高,曲线与拟合点拟合得越好。

扩展资料:

函数中所使用的算法都是科研和工程计算中的最新研究成果,而且经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。

MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。

函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组 *** 作以及建模动态仿真等。

用matlab cftool工具箱选择ploynomial进行拟合,拟合效果(看似很好)并不一定符合你要求。你可以用得到的拟合函数,来验证(yi=f(xi))是否与已知数据(y值)基本相吻合。

一般我们的拟合函数,可以用下列方法来进行。

fun=@(a,x)a(1)x(1)+a(2)x(2)+。。。 %自定义函数

[a,resnorm,residual,exitflag]=lsqcurvefit(fun,x0,X,y); %x0——初值,X=[x y];

[a,r,J] = nlinfit(X,y,fun,x0);

求得拟合函数后,绘制图形

xa=[。。。], ya=[。。。];

[x,y]=meshgrid(xa,ya);

z=f(x,y);

mesh(x,y,z)

xlabel('x');ylabel('y');zlabel('z');

如有还问题,可以再帮你。

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

原文地址:https://www.54852.com/langs/13491989.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-09-01
下一篇2025-09-01

发表评论

登录后才能评论

评论列表(0条)

    保存