zcf20066 发表于 2007-2-8 20:03

求助:用什么命令可以解决方程个数比未知量多的情形

多谢!

MVH 发表于 2007-2-9 12:31

超定方程,一般求最小二乘解

不知道你说的命令是什么意思?

zcf20066 发表于 2007-2-9 15:42

回复 #2 MVH 的帖子

solve命令可以解未知数和方程个数相等的方程组,但是若不相等,就会出现报错信息。
所以我是想问一下有没有那样的命令,可以直接解这种情形。

用最小二乘法怎么做?谢谢你!

zcf20066 发表于 2007-2-11 11:19

回复 #3 zcf20066 的帖子

请问对方程个数有限制吗?我看了论坛里以前介绍的最小二乘法,可是换成我的问题就不行了,
我那个问题有13个方程,12个未知数,是不是因为太多了。
程序如下,望高手赐教:
function myfun(x)

h=zeros(1,14);
h(1)=0.003792658534;h(2)=-0.001481225915;h(3)=-0.017870431651;h(4)=0.043155452582;
h(6)=-0.070078291222;h(7)=0.024665659489;h(8)=0.758162601964;h(9)=1.085782709814;
h(5)=0.096014767936;h(10)=0.408183939725;h(11)=-0.198056706807;h(12)=-0.152463871896;
h(13)=0.005671342686;h(14)=0.014521394762;
g=zeros(1,14);a=zeros(1,13);
g=sqrt(2)/2*h;
for n=1:13
    for i=1:14-n
      a(n)=a(n)+2*g(i)*g(i+n);
    end
end
F=[2*(x(2)+1/2*(a(1)*(x(1)+x(3))+a(3)*(x(5)-x(1))+a(5)*(x(7)-x(3))+a(7)*(x(9)-x(5))+a(9)*(x(11)-x(7))+a(11)*(-x(9))+a(13)*(-x(11))))-x(1);
2*(x(4)+1/2*(a(1)*(x(3)+x(5))+a(3)*(x(7)+x(1))+a(5)*(x(9)-x(1))+a(7)*(x(11)-x(3))+a(9)*(-x(5))+a(11)*(-x(7))+a(13)*(-x(9))))-x(2);
2*(x(6)+1/2*(a(1)*(x(7)+x(5))+a(3)*(x(9)+x(3))+a(7)*(x(11)+x(1))+a(9)*(-x(1))+a(11)*(-x(3))+a(13)*(-x(5))))-x(3);
2*(x(8)+1/2*(a(1)*(x(9)+x(7))+a(3)*(x(11)+x(5))+a(5)*(x(3))+a(9)*x(1)+a(11)*(-x(1))+a(13)*(-x(3))))-x(4);
2*(x(10)+1/2*(a(1)*(x(9)+x(11))+a(3)*x(7)+a(5)*x(5)+a(7)*x(3)+a(9)*x(1)+a(11)*(-x(1))+a(13)*(-x(3))))-x(5);
2*(x(12)+1/2*(a(1)*x(11)+a(3)*x(9)+a(5)*x(7)+a(7)*x(5)+a(7)*x(3)+a(9)*x(1)+a(11)*(-x(1))+a(13)*(-x(3))))-x(6);
a(3)*x(11)+a(5)*x(9)+a(7)*x(7)+a(9)*x(5)+a(11)*x(3)+a(13)*x(1)-x(7);
a(5)*x(11)+a(7)*x(9)+a(9)*x(7)+a(11)*x(5)+a(13)*x(3)-x(8);
a(7)*x(11)+a(9)*x(9)+a(11)*x(7)+a(13)*x(5)-x(9);
a(9)*x(11)+a(11)*x(9)+a(13)*x(7)-x(10);
a(11)*x(11)+a(13)*x(9)-x(11);
x(12)-a(13)*x(11);
x(1)+2*x(2)+3*x(3)+4*x(4)+5*x(5)+6*x(6)+7*x(7)+8*x(8)+9*x(9)+10*x(10)+11*x(11)+12*x(12)+1/2];

fl_potato 发表于 2007-2-11 19:28

可以用你的所有的方程建一个准则函数,如J(x)=f1(x)^2+f2(x)^2+...f3(x)^2,再用optimization工具箱解无约束的优化问题阿,方法很多的,可以用梯度,也可以用拟牛顿,工具箱里有直接求解的函数,很方便的

wjed 发表于 2007-2-19 22:22

呵呵,方程有点难,做什么的?

gghhjj 发表于 2007-3-3 03:14

原帖由 zcf20066 于 2007-2-9 15:42 发表
solve命令可以解未知数和方程个数相等的方程组,但是若不相等,就会出现报错信息。
所以我是想问一下有没有那样的命令,可以直接解这种情形。

用最小二乘法怎么做?谢谢你!

solve和fsolve只能解适定问题

gghhjj 发表于 2007-3-3 03:17

超定非线性方程组可以用五楼提到的优化算法进行求解

也可以用牛顿类算法来求解,即将牛顿类迭代算法和最小二乘原理
页: [1]
查看完整版本: 求助:用什么命令可以解决方程个数比未知量多的情形