matlab二元函数拟合

事情紧急。。要做一个分析数据的任务,查了下用matlab不错,以前从未用过,不知如何下手,请哪位耐心的朋友细心讲解。。
题目:拟合函数,求两个变量a,b对c的影响。已知a越大,b越大,c就越大;a属于(0,10),b属于(1000万,10亿),c属于(100,10000),也就是说a虽然小,但稍有波动影响却甚大。
我可以给出约8组数据,即八组有序数对(a,b,c),请拟合出类似这样的关系式:c=2(a的3次方)-3(a的2次方)+……+2(b的3次方)-0.3(a的2次方)+……+10 或 c=3(a的1.2345……次方)+5(b的4.567……次方)也就是线性拟合或指数拟合
以上二个关系只是范例,我想拟合成这种形式,不知是否可行。网上查了下,据说可以用polyfit和lsqcurve,但我不知道怎么用。如果真的可行的话,麻烦大家给出操作步骤,及要在matlab中编写的程序,即大概的结构,可以把添入数据的地方空着(标明添什么数据)。总之呢,函数越接近越好是最终目的。

我的理解如下
已知:
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
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-11-25
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,但我不知道能不能拟合二元函数,自己看下帮助

matlab二元函数拟合怎么设计函数。
myfunc=inline('-beta(1)*log(x+beta(2))-beta(3)','beta','x');非线性函数 beta=nlinfit(x,y,myfunc,[0 0 0]);通过这个非线性函数进行拟合 k=beta(1),a=beta(2),b=beta(3)测试这个方程 xx=min(x):max(x);yy=-k*log(x+a)-b;plot(x,y,'o',x,yy,'r')--- 以上x,...

请教大神怎么用matlab拟合二元二次函数
用matlab拟合二元二次函数,可以这样处理:1、提供试验数据,如x,y(一般要求十组以上)2、根据x,y 数据,用plot()绘制其散点图 3、根据散点图,确定其二元二次函数模型 func=@(x) 二元二次函数表达式 4、确定拟合系数的初值,a0=[a01,a02 ,a03,。。。]5、用最小二乘回归函数nlinfit()...

matlab二元函数拟合求参数问题,已知模型求参数
此处beta就是你需要拟合得到的系数k1,k2,k3,X是输入变量矩阵n*p,n为样本个数,这里n=12,p为自变量个数,这里你的输入是x和y,所以p=2。y是你给出的因变量值,这里对应你给出的z。fun就是你给出的被拟合的函数。beta0是系数beta的初始迭代值。先给出子函数的形式:function f=myfun(beta...

如何用Matlab画二元函数?
1、首先打开Matlab软件,默认弹出窗口 Command Window,将已请确定的(x,y,z)值依次输入该窗口中。然后再输入cftool工具命令回车,就弹出绘图界面了。2、会发现没看到图形绘出。3、用Polynomial函数确定关系。4、依次点选x,y(1 2 3 4 5 )的阶数。5、如果对自动生成的图形不满意,调出可调坐标轴的...

二元指数函数matlab拟合求教。
0.574 0.586 0.598 0.612 0.622]x=[x1 x2];fun=inline('0.574*(1+a(1)*log(a(2)*x(:,1)+1))*(1.2-x(:,2))^2','a','x')a=lsqcurvefit(fun,[0.5 0.5],x,y);a = 2.26093382320496 2.00929325314624 即a =2.26093382320496,b=2.00929325314624 ...

怎么用一直数据进行matlab二元二次函数拟合
用Matlab的regress()函数拟合,也可以用自定义函数拟合。regress()函数命令格式为 [B,BINT,R,RINT,STATS] = REGRESS(Y,X)B——参数估计值,拟合函数系数 BINT——B的置信区间 R——残差向量,测试值与拟合值的差值 RINT——R的置信区间 STATS——检验统计量,置信度、F统计量,p值 Y——因...

怎样用 mathematica 拟合二元函数?
以下是二元拟合。例3 观察下面的二元函数拟合。In[1]:=Flatten[Table[{x,y,1 + 5x –x y},{x,0,1,0.2},{y,0,1,0.2}],1]Out[1]={{0,0,1},{0,0.2,1},{0,0.4,1},{0,0.6,1},{0,0.8,1},{0,1.,1},{0.2,0,2.},{0.2,0.2...

如何对二元函数进行最小二乘法拟合
matlab里最小二乘法只要用简单的矩阵除法就可以完成。示例:y=a1*x1^2+a2*x2+c 原始数据 x1 = [1 2 3 ... ]; x2 = [1 2 3 ...]; y = [1 2 3 ...];LS Y = y(:); H = [x1(:).^2 x2(:) ones(size(x1(:)))];X = (H.'*H)\\(H.'*Y);得到的X是三个...

Matlab 二元线性函数拟合 求助
Matlab 二元线性函数拟合,可以用regress()最小二乘法的多元线性回归函数。应用实例:z=f(x,y)= x=[343.5 346.46 347.77 351.1 352.86 354.31 355.99 356.64 359.55 361.06 362.02 363.48 364.71 365.95 367.46 368.67 369.7 370.51 371.43 372.3 373.33]';y=[3.457 ...

Matlab 二元非线性函数拟合 函数形式已知 求取系数。求帮助。
非线性曲线拟合:lsqcurvefit x=lsqcurvefit(fun, x0,xdata,ydata)[x,resnorm]=lsqcurvefit(fun, x0,xdata,ydata)功能:根据给定的数据xdata,ydata(对应点的横,纵坐标),按函数文件fun给定的函数,以x0为初值作最小二乘拟合,返回函数fun中的系数向量x和残差的平方和resnorm.

相似回答