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

四组数据如下:
l=[0 0 0 0 12 0 15 20 30 55 120 110 125 100 80 110 120];
dq=[1020 1290 1140 900 1020 990 1200 1200 1380 1140 1080 1170 1050 1140 1255 969 1650];
t=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 13.55 15.77 16.98];
sq=[1020 1290 1140 900 1500 990 1920 1080 1860 1200 1380 1050 1530 750 654 831 2250];
想要l=******的关于其他三个未知量的函数。

因为拟合函数的形式没有给定,而且数据点比较少(看似17个点,实际有效点只有12个),这个问题可能比较困难。我用最小二乘法大致尝试了一下,程序如下:
clear
clc
l=[0 0 0 0 12 0 15 20 30 55 120 110 125 100 80 110 120]';
dq=[1020 1290 1140 900 1020 990 1200 1200 1380 1140 1080 1170 1050 1140 1255 969 1650]';
t=[0 1 2 3 4 5 6 7 8 9 10 11 12 13 13.55 15.77 16.98]';
sq=[1020 1290 1140 900 1500 990 1920 1080 1860 1200 1380 1050 1530 750 654 831 2250]';
%% (1)线性拟合
A=[dq t sq];
a1=A\l
%[A*a1 l]
norm(A*a1-l)
%% (2)加入二次项
A=[dq dq.^2 t t.^2 sq sq.^2];
a2=A\l
%[A*a2 l]
norm(A*a2-l)
%% (3)加入三次项
A=[dq dq.^2 dq.^3 t t.^2 t.^3 sq sq.^2 sq.^3];
a3=A\l
norm(A*a3-l)
%[A*a3 l]
%% (4)加入四次项
A=[dq dq.^2 dq.^3 dq.^4 t t.^2 t.^3 t.^4 sq sq.^2 sq.^3 sq.^4];
a4=A\l
norm(A*a4-l)
[A*a4 l]
%%(5)删除部分三次和四次项,加入了平方根项
A=[dq.^0.5 dq dq.^2 t.^0.5 t t.^2 t.^3 t.^4 sq.^0.5 sq sq.^2];
a5=A\l
norm(A*a5-l)
%[A*a5 l]
%%(6)自己随便猜的一个形式
A=[dq.^(2/3) dq.^(1/3) dq.^0.5 t.^(2/3) t.^(1/3) t.^0.5 t t.^2 sq.^(2/3) sq.^(1/3) sq.^0.5 sq];
a6=A\l
norm(A*a6-l)
[A*a6 l]
以上做了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。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-16
要说清数据是二维还是三维 ,二维数据直接用图形工具cftool,多做几次比较,就能选出。三维数据主要在拟合方程形式的选择。
第2个回答  2013-09-15
要做多元回归。线性的简单一些。但是偏差可能会比较大。追问

多元回归要怎么编程呢,帮帮忙啊

相似回答