matlab 解决二元二次拟合,4小时内有效答案者加 50

来自:校园生活    更新日期:早些时候
二元二次的函数优化能在matlab上实现吗?~

这种形式的目标函数在matlab中做优化当然可以,但是,需要明确一些条件:
需要u和v的具体表达式,优化问题可能存在多个局部最优解,算法不是任何情况下都保证有效的,更不可能对于不定的任意函数直接求出最优解;
约束条件x,y的关系应该已知,理由同上;
k1和k2作为常数应该确定,理由和上面类似。

设拟合的2元2次方程为
f(x,y)=b1*x²+b2*x*y+b3*y²+b4*x+b5*y+b6
用Matlab的regress()函数拟合,也可以用自定义函数拟合。regress()函数命令格式为
[B,BINT,R,RINT,STATS] = REGRESS(Y,X)
B——参数估计值,拟合函数系数
BINT——B的置信区间
R——残差向量,测试值与拟合值的差值
RINT——R的置信区间
STATS——检验统计量,置信度、F统计量,p值
Y——因变量观察值
X——自变量观察值
根据提供的数据,通过拟合得
B1 =0
B2 =-1734024.851
B3 =-31661318.71
B4 =3785724.073
B5 =9670754.012
B6 =-512586.098

使用回归回归成y=ax1^2+bx1^2+cx1+dx2+ex1*x2+f

y=[23 33 52 51 43 40 46]';
x1=[5 10 16 25 33 47 60]';
x2=[18 31 66 68 70 72 70]';
X=[ones(size(y)) x1.^2 x2.^2 x1 x2 x1.*x2];
[b,bint,r,rint,stats] = regress(y,X);
b,bint,r,rint,stats%%b为对应的参数 b(1)为f,b(2)为a,b(3)为b,b(4)为c,b(4)为d,b(5)为e

b =

14.16063954858540
0.01716893872592
0.02508536698014
4.71438649302305
-0.84792032737350
-0.08960148833191

bint =

1.0e+002 * %bint%为b的95%置信区间

-2.10382223368177 2.38703502465347
-0.00084283937911 0.00118621815363
-0.00394646933209 0.00444817667170
-0.64861833027424 0.74290606013470
-0.32305433102722 0.30609592447975
-0.01094505865341 0.00915302888678

r =

0.03724545917960
-0.06644448785574
-0.67601703114931
2.23548693159668
-2.01680533072312
0.55616729477867
-0.06963283582684

rint =

-0.43600297065399 0.51049388901318
-0.91070175413925 0.77781277842777
-9.26562783407416 7.91359377177553
-26.16906770631366 30.64004156950702
-27.64274677589925 23.60913611445302
-6.51060822024266 7.62294280980001
-0.95440190420693 0.81513623255325

%stats的第三个参数为F检验的P值,p值很小P<0.001,说明拟合模型有效

stats =
0.98459455672427 12.78242422631952 0.20909110587007

还可以使用rstool(X,Y,'quadratic')

二元二次拟合自变量有2个,因变量一个,可以使用的有nlinfit和regress,线性时用regress,非线性时用nlinfit。由于是二元二次模型,2个函数都可以用。

以regress为例,
假设因变量存在y向量中,自变量存在x1、x2向量中。因为要使用二元二次模型,首先要构造自变量矩阵:
X=[x1.^2,x2.^2,x1.*x2,x1,x2,ones(size(x1))];%注意,需要有1列全为1
然后就能调用regress了
[b,bint,r,rint,stats] = regress(y,X)
b为回归系数,bint为置信区间。r为残差,rint为残差置信区间。stats为反应回归品质的统计参数。

扩展:
此外,nlinfit与regress都有相应配套函数。与nlinfit配套的有nlintool(互动窗口)、nlinparci(计算拟合系数置信区间)、nlinpredci(计算预测值置信区间)。与regress配套的有rcoplot(画残差图)。
对于进阶matlab使用者还有更多的选择,如拟合工具箱、fit函数等等。

三次多项式应该都可以达到你的要求
clc;clear;
x=[5 10 16 25 33 47 60];
y=[18 31 66 68 70 72 70];
a=polyfit(x,y,3) %这里用三次多项式拟合a就是这些系数
y =vpa(poly2sym(a),10) %输出的你要的函数。
x=0:0.01:100;%后面是画出的图像
y=vectorize(y)
y=eval(y);
plot(x,y,'-');

clear
x(:,1)=[5 10 16 25 33 47 60]';
x(:,2)=[18 31 66 68 70 72 70]';
x(:,3)=x(:,1).^2;
x(:,4)=x(:,2).^2;
x(:,5)=x(:,2).*x(:,1);
x(:,6)=ones(length(x(:,1)),1);
y=[23 33 52 51 43 40 46]';
regress(y,x);

应该是用多项式拟合函数polyfit对已知数据进行指定阶的多项式回归。具体我就忘了,是好久以前学的MATLAB了!不好意思!


matlab 解决二元二次拟合,4小时内有效答案者加 50视频

相关评论:

相关主题精彩

版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

Copyright © 喜物网