matlab二元函数拟合23
发布网友
发布时间:2023-10-21 12:32
我来回答
共2个回答
热心网友
时间:2024-12-14 15:49
我的理解如下
已知:
a=rand(8,1);
= 0.5497
0.9172
0.2858
0.7572
0.7537
0.3804
0.5678
0.0759
b=rand(8,1);
= 0.0540
0.5308
0.7792
0.9340
0.1299
0.5688
0.4694
0.0119
给出c的解析表达式:c=5+6*a+7*b+8*a.^2+9*b.^2
=11.1198
23.4844
18.2868
28.5195
15.1285
15.3344
16.2550
5.5857
即自变量为a和b,c为函数,5是常数项,6和7是一次项系数 8和9是二次项系数
要求:我们要通过函数拟合来得到这些系数:5 6 7 8 9
1)用polyfit是指单变量x与函数y之间的拟合关系
如果非要用这个函数,可以把二元的输入加权合并成一元输入,类似于一元回归的思想,比如将输入x=a+b(平均加权)作为输入变量,此时的映射关系为x为输入,c为函数输出
输入polyfit(x,c,2)
得到3.3457 8.2160 4.8824
即c=3.3457*x^2+ 8.2160*x+4.8824
=3.3457*(a+b)^2+ 8.2160*(a+b)+4.8824
或者你可以用更多阶来拟合
比如polyfit(x,c,3)得到1.0187 0.6132 10.1033 4.6768
2)可以用多元线性回归的命令regress
输入矩阵X=[ones(size(a)) a b a.*b a.^2 b.^2];
X为6列数据,得到的系数分别对应这6列
p=regress(c,X)
p = 5.0000
6.0000
7.0000
0.0000
8.0000
9.0000
p就是需要求解的系数这里面出现了一个0是对应交叉项a*b的
因为之前的解析式中就没有交叉项所以该系数为0
热心网友
时间:2024-12-14 15:49
1.不要想着什么都直接问别人要程序
2.matlab里有一个非线性拟合函数lsqcurvefit,我给你个范例,照着写就行了
x=0.019,0.023,0.027
y=430,380,256
3
parameters:
a,b,c
target
function:
y=(a*(1-x/b)+x/b)^c
================================================
function
untitled3
clc
xi=[0.019,0.023,0.027];
yi=[430,380,256];
abc0=[4,0.5,5];
abc
=
lsqcurvefit(@fun,abc0,xi,yi)
function
y
=
fun(abc,x)
y
=
(abc(1)*(1-x/abc(2))+x/abc(2)).^abc(3);
abc
=
31.2588
-3.9585
1.7033
============================================
3.采用什么函数形式拟合要看你有没有合适的理论模型,如果没有模型的话,用多项式拟合最方便,matlab有函数polyfit,但我不知道能不能拟合二元函数,自己看下帮助