chinasnowlee 发表于 2011-5-3 22:30:26

matlab 优化问题(矛盾方程组)多多指教

c=;
d=;

我的模型为求两个未知数,有20组数据!(真实值2040)

x1=c\d求得
x1 =
   19.1771
   40.3242
基本接近

但是用x2=lsqnonneg(c,d)求得
x2 =
         0
   46.7701
相差很大
用lb=;
>> x3=lsqlin(c,d,[],[],[],[],lb)
Optimization terminated: relative function value changing by less
than OPTIONS.TolFun.
x3 =
    0.4509
    1.3404
相差更大
请求赐教谢谢!

nwcwww 发表于 2011-5-4 00:16:19

lsqnonneg本来就是这样,doc lsqnonneg里的例题也是这么说的。

至于lsqlin,如果不加限制条件的话结果同左除一样:
>>x3=lsqlin(c,d,[],[],[],[])

x3 =

   19.1771
   40.3242

如果是加了lb,可以考虑把c和d等比例放大:
>>x3=lsqlin(c*1e10,d*1e10,[],[],[],[],)
Optimization terminated: relative function value changing by less
than OPTIONS.TolFun.

x3 =

   19.1772
   40.3241

chinasnowlee 发表于 2011-5-4 12:23:35

2# nwcwww
你好! 我刚试了一下,确实是这样,但是为什么要把c,d比例放大呢??具体放大多少倍怎么考虑呢???谢谢
此外


lsqnonneg



lsqnonneg
lsqnonneg 是不是c,d倍数也放大 结果就接近呢!??
谢谢!

chinasnowlee 发表于 2011-5-4 12:29:57

2# nwcwww
我的这个模型是有参数.>=0的约束的,我想知道为什么加上约束条件需要把C,d乘个大的系数!谢谢

nwcwww 发表于 2011-5-4 21:06:06

lsqlin默认算法large scale algorithm本身的问题。
除了放大C和d之外,也可以指定用medium scale algorithm。

>> x3=lsqlin(c,d,[],[],[],[],,[],[],optimset('largescale','off'))
Optimization terminated.

x3 =

   19.1771
   40.3242


lsqnonneg同样可以放大c和d来获得你想要的结果。

chinasnowlee 发表于 2011-5-4 21:35:15

5# nwcwww

非常感谢! 因为毕业论文需要用到优化.明白不少!

chinasnowlee 发表于 2011-5-4 21:42:27

5# nwcwww

同时我想咨询下:
因为要求解的方程组为m×n(其中m>n)
要看这个方程组的性态的话是不是用 cond(c)来求呢??

用lsqlin求的解是全局的还是局部的呢??再次感谢!
页: [1]
查看完整版本: matlab 优化问题(矛盾方程组)多多指教