
在matlab中,怎样求下列方程的系数。是四元二次线性方程,最好能出现Y=A*X^2+B*X+C;
如果各位有更好的求这个四元二次多项式,系数的方法,更好,感谢。。。。。
x=[3.5 0.35 0.8 0.6
3.5 0.425 1.82 1.3
3.5 0.5 2.8 2
4.25 0.35 1.82 2
4.25 0.425 2.8 0.6
4.25 0.5 0.8 1.3
5 0.35 2.8 1.3
5 0.425 0.8 2
5 0.5 1.82 0.6
];
Y=[18.42
19.5
19.3
18.73
19.21
19.93
17.51
18.91
19.85
];
>>X=[ones(9,1),x];
syms a b c X;
Y=(ax+b)X+c;
t=coeffs(Y,X);
t(3)
再问一句,下面的语句看不大懂
A = diag(t(1:4))
B = t(5:8)'
C = t(9)
第一个是求对角矩阵的,B是?系数吗? 展开
对于Y=A*X^2+B*X+C(确切一点说,应该是Y=X'*A*X+B*X+C)的形式,X是4x1向量,则A是4x4矩阵,B是1x4向量,C是标量,共21未知数,但现在的数据只有9组约束,显然有很多未知数是自由的。
可以考虑对矩阵A加一些限制条件,例如,规定A是对较阵,此时共有9个未知数,如果约束条件独立,应该可以求出唯一解来。
参考代码:
x = [3.5 0.35 0.8 0.6
3.5 0.425 1.82 1.3
3.5 0.5 2.8 2
4.25 0.35 1.82 2
4.25 0.425 2.8 0.6
4.25 0.5 0.8 1.3
5 0.35 2.8 1.3
5 0.425 0.8 2
5 0.5 1.82 0.6
];
Y = [18.42
19.5
19.3
18.73
19.21
19.93
17.51
18.91
19.85
];
X = [x.^2 x ones(9,1)];
t = X\Y;
A = diag(t(1:4))
B = t(5:8)'
C = t(9)
求得结果:
A =
-0.6667 0 0 0
0 -44.4444 0 0
0 0 -0.4843 0
0 0 0 0.1837
B =
5.4556 47.6000 1.5369 -0.6061
C =
-4.3453
得到的方程是:y=a1*x1^2+a2*x2^2+a3*x3^2+a4*x4^2+b1*x1+b2*x2+b3*x3+b4*x4+c,
只有x^2,跟x的关系,而没有相互之间的关系。比如x1*x2,x2*x3,x3*x4,.......
而这正是我需要的东西。最好得出,x,x1*x2这下关系的。有很多未知数是自由的不要紧,只要能找出他们之间的关系就好。
没看明白你的意思。
回归模型在能满足精度要求的条件下,一般尽量选择简单的,这也是著名的奥卡姆剃刀原则。
你给的数据一共9组,使用现在的方程刚好有9个参数,完全可以满足精度要求,为什么还一定要再增加其它项呢?你也完全可以理解为,x1*x2等项的系数都是0。
补充:
A = diag(t(1:4)) 是用向量生成对角矩阵(也就是你上面写的方程中的a1~a4);
B = t(5:8)' 是系数b1~b4。
3.5 0.425 1.82 1.3
3.5 0.5 2.8 2
4.25 0.35 1.82 2
4.25 0.425 2.8 0.6
4.25 0.5 0.8 1.3
5 0.35 2.8 1.3
5 0.425 0.8 2
5 0.5 1.82 0.6];
Y=[18.42
19.5
19.3
18.73
19.21
19.93
17.51
18.91
19.85];
X=[ones(9,1),x,x.^2];
[b]=regress(Y,X)
b =
-4.3453
5.4556
47.6000
1.5369
-0.6061
-0.6667
-44.4444
-0.4843
0.1837
b的解依次排下来就是常数项 一次项 和二次项的系数 正好九个