首页 > 知识常识 > 正文

如何将数据点拟合成方程

分享到微信朋友圈

打开微信。点击 “ 发现 ” ,
使用 “ 扫一扫 ” 即可将网页分享至朋友圈。

1.怎么把两组数据拟合成一个方程因为拟合函数的形式没有给定,而且数据点比较少(看似17个点,实际有效点只有1

1.怎么把两组数据拟合成一个方程

因为拟合函数的形式没有给定,而且数据点比较少(看似17个点,实际有效点只有12个),这个问题可能比较困难。

我用最小二乘法大致尝试了一下,程序如下:clearclcl=[]';dq=[]';t=[01234567891011121313.5515.7716.98]';sq=[]';%%(1)线性拟合A=[dqtsq];a1=A\l%[A*a1l]norm(A*a1-l)%%(2)加入二次项A=[dqdq.^2tt.^2sqsq.^2];a2=A\l%[A*a2l]norm(A*a2-l)%%(3)加入三次项A=[dqdq.^2dq.^3tt.^2t.^3sqsq.^2sq.^3];a3=A\lnorm(A*a3-l)%[A*a3l]%%(4)加入四次项A=[dqdq.^2dq.^3dq.^4tt.^2t.^3t.^4sqsq.^2sq.^3sq.^4];a4=A\lnorm(A*a4-l)[A*a4l]%%(5)删除部分三次和四次项,加入了平方根项A=[dq.^0.5dqdq.^2t.^0.5tt.^2t.^3t.^4sq.^0.5sqsq.^2];a5=A\lnorm(A*a5-l)%[A*a5l]%%(6)自己随便猜的一个形式A=[dq.^(2/3)dq.^(1/3)dq.^0.5t.^(2/3)t.^(1/3)t.^0.5tt.^2sq.^(2/3)sq.^(1/3)sq.^0.5sq];a6=A\lnorm(A*a6-l)[A*a6l]以上做了6次尝试,第一次假设函数形式为l=a1(1)*dq+a1(2)*t+a1(3)sq,即线性函数。拟合出的三个常数存在数组a1中。

norm(A*a1-l)语句算出了拟合曲线上对应点与实际数据点的偏差范数。第二次假设函数形式为l=a2(1)*dq+a2(2)*dq^2+a2(3)*t+a2(4)*t^2+a2(5)*sq+a2(6)*sq^2,即在此一次的基础上加入了二次项。

同样,拟合出的六个常数存在数组a2中。依次类推,其他的都很容易理解。

需要注意的是,1.matlab中的运算符”\“是内置的最小二乘法运算;2.由于矩阵A的秩是12,也就是说你的17组数据中只有12组是相互独立的。因此在假设拟合函数形式的时候,不能超过12项,否则拟合函数就没有意义了,而且运算过程中matlab也会给出warning。

2.【将下列数据拟合成方程x=20,30,40,50,60,70,80,90,100,110,120y=0,0,

这是matlab的命令跟运行结果:clcclearclose allx1=[20,30,40,50,60,70,80,90,100,110,120];y1=[0,0,43,143,303,497,650,805,913,1000,1075];plot(x1,y1,'bo')holdp=polyfit(x1,y1,3);p1=num2str(p(1));p2=num2str(p(2));p3=num2str(p(3));p4=num2str(p(4));x=linspace(20,120,1000);y=p(1).*x.^3+p(2).*x.^2+p(3).*x+p(4);plot(x,y,'r')xlabel('x [20,120]')s1='y=',s2='x^3+',s3='x^2+',s4='x+';s=strcat(s1,p1,s2,p2,s3,p3,s4,p4);ylabel(s)legend('原始数据','拟合曲线',2);T=strcat('拟合结果:',s);title(T,'FontSize',12)hold off运行结果如图所示:分数太少了吧,这么大个题目.。

3.matlab怎么把四组数据拟合成一个方程式啊,这个方程式没有给出的模

你的问题并不详细,我给你做两种不同的补充,基于这两个补充来回答吧。

首先假设你的四组数据是四个训练集(比如每组数据是二维的,表示100点,那四组数据就是400个点)

补充1.

假设你需要的是将四组数据所描述的样本看成是一个整体,需要拟合出一个方程以最大程度拟合这所有的样本点,那么你可以选择一个阶数较高或较复杂的方程式模型(比如高阶多项式、幂函数、对数函数的组合等),使用最小二乘回归、加权最小二乘回归、梯度下降、支持向量机等方法拟合模型系数,找出使得误差最小的模型形式及参数

补充2.

假设你需要的是将其中一部分作为训练数据集,另一部分用来作检验(包括模型泛化能力、交叉验证等),那我建议你选择一个稍微简单的模型,阶数不要太高,在通过训练集得到模型的具体参数后,再用检验数据集进行检验,检验标准很多,包括方差等,主要就是看模型的泛化能力强不强。

具体实施可以采用matlab软件,里面包含了很多数据处理方面的函数

4.如何用matlab将离散数据拟合成方程,在线等

同意1楼的回答,用cftool. 但是不知道函数形式的情况下确实不好拟合。

有几类cftool中没有,但科研也常用的函数拟合你可以试试, 比如pade近似, 广义回归网络, 主成分分解等.

给你一个贝叶斯正则化训练的BP前馈网络试试看

返回值funObj就是拟合出来的方程

%-----------分割线-----------------

function funObj = netFit(x, y)

maxID=1; % 这里取1. 所以每次运行结果都有所不同,取大点结果基本就不变了.

% Matlab手册建议训练很多网络求平均,比如maxID=100. 可并行加速

% 具体参考doc train --> useParallel, useGPU. 自动的.

net = feedforwardnet(15); % 这个值随便取的,其实有讲究。

net.trainFcn = 'trainbr';

net.divideParam.trainRatio = 0.7;

net.divideParam.valRatio = 0.3;

net.divideParam.testRatio = 0;

net = configure(net, x, y);

net.trainParam.showWindow = 0;

h = waitbar(0,'Training with Bayesian Regularization 0%');

netCollect = cell(maxID,1);

for netID=1:maxID

net = init(net);

net = train(net, x, y);

waitbar(netID/maxID,h ,。

sprintf('Training with Bayesian Regularization %4.1f%%',netID/maxID*100));

netCollect{netID} = net;

end

delete(h);

funObj = @(x)evalNet(netCollect, x);

xfit = linspace(min(x), max(x), 100);

yfit = funObj(xfit);

figure(10);plot(xfit, yfit, 'r-', x, y, 'ok');

legend('Fitted Line','Data')

xlabel('X','FontSize',14);ylabel('Y','FontSize',14);title('maxID=100')

end

function y = evalNet(netCollect, x)

NNet = length(netCollect);

y = zeros(size(x));

for netId=1:NNet

net = netCollect{netId};

y = y+net(x);

end

y = y/NNet;

end

5.excel中怎样根据数据生成方程式

excel中根据数据生成方程式步骤如下:

1、打开Excel,将数据填入表格中。

2、按住鼠标左键,选择要分析拟合的数据。

3、点击上方菜单栏中插入按钮,然后点击推荐的图表。

4、在弹出的窗口中选择合适的数据表现形式,点击确定。

5、将鼠标光标移动到生成的图线上,然后点击鼠标右键,在下拉菜单中点击“添加趋势线”。

6、右侧会出现“设置趋势线格式”栏,将滚动条拉到最底部,勾选“显示公式”和“显示R平方值”,拟合的函数方程和R平方值就会显示在图中了。

如何将数据点拟合成方程

标签:知识常识,数据,in,函数

网友评论: