在Norm函数使用中,Norm[#/factor] &中的facotor的取值问题
mathematica吧
全部回复
仅看楼主
level 1
data = {{1, 2}, {3, 4}}
In[25]:= factor = {0.3, 0.4};
FindFit[data, c x - 1, c, x, NormFunction -> (Norm[#/factor] &)]
Out[26]= {c -> 1.8866}
如上,这里的factor={0.3,0.4}是分别给最小二乘法中的(在这里一共就2项)每项各乘了一个因子,
换成以下这样可能更清楚些,formula2就是相当于把factor分配进去后的结果,可以看到前一项的因子是0.3,后一项的是0.4。
In[21]:= formula1 = (c - 3)^2 + (3 c - 5)^2 // Simplify;
formula2 = ((c - 3)/0.3)^2 + ((3 c - 5)/0.4)^2 // Simplify;
FindMinimum[formula1, c]
FindMinimum[formula2, c]
Out[23]= {1.6, {c -> 1.8}}
Out[24]= {16.4948, {c -> 1.8866}}
跟之前的是一致的结果。
factor如果都取1,factor={1,1},那就跟没有这个是一样了,这很自然。
但我试了下,发现取值不能超过1,好像只能在0~1之间取。
但如果取成{1,0.9},就一个取1,一个取小数,也算不出来,运行一下子接着就没下文了,结果之前定义的那些变量也都变蓝了,就变成没定义的了!顺便也想问下这是为什么?
当然主要是想请教下在这里的factor该如何理解,权重吗,标准差,还是别的什么东西?
谢谢!
2018年12月18日 06点12分 1
吧务
level 15
版本9及版本11.2均未能重现你所说的问题:
2019年01月05日 08点01分 2
level 1
@xzcyr
首先十分感谢您!
因为我想贴图,所以就重开楼了,见谅。
我的版本是10.4,不过我刚试了一下,的确{1.1,1.2}可以运行,汗颜。。。不知道那时候为什么行不通。不过我换成{1,1.2}就不行了,没结果弹出来且给刷蓝了。但是改写成{1.0,1.2}就又行了,见下图,这是因为数据类型不一样的缘故吗?
2019年01月06日 03点01分 4
依旧重现不了。我个人的意见是,如果你要用版本10以上的Mathematica就要尽量追到最新。
2019年03月02日 03点03分
1