lsqnonlinで同じ評価関数・変数・入力に対して,普通に使用した場合と分割して使用した場合とで結果が違うのは何故なのでしょうか.
Mostrar comentarios más antiguos
lsqnonlinにおいて,評価関数として次の関数
fuction values = funcOpt(num,r,X,Y)
values = [];
for i=1:1:num
Y_ = Y(3*i-2+3*i,:); % 3*1ベクトル
r_ = r(7*i-6+7*i);
A = setA(r_(1:2)); % 3*3行列
B = setB(r_(3:4)); % 3*4行列
value = reshape(Y_-A*B*X,[],1);
values = [values;value];
end
end
を用いるとき,変数と入力の組み合わせnum個に対して,
下記のコードA・コードBのように使用しました.
% コードA:普通に使用した場合
myfun = ...
@(r) ( funcOpt(num,r,X,Y) );
[optr,optresnorm,optresidual,optexitflag,optoutput] ...
= lsqnonlin(myfun,rini,rlow,rup,optoptions);
%コードB:分割して使用した場合
r_ =[];
optresidual_ =[];
for i=1:1:num
Y_ = Y(3*i-2+3*i,:);
rini_ = rini(7*i-6+7*i);
rlow_ = rlow(7*i-6+7*i);
rup_ = rup(7*i-6+7*i);
%%%
myfun = ...
@(r) ( funcOpt(1,r,X,Y) );
[optr,optresnorm,optresidual,optexitflag,optoutput] ...
= lsqnonlin(myfun,rini_,rlow_,rup_,optoptions);
%%%
r_ = [r_;optr];
optresidual_ = [optresidual_;optresidual];
end
optr = r_;
optresidual = optresidual_;
このとき,optrとoptresidualがコードA・コードBで違いました.
そして,optresidualのノルムはコードBの方が小さかったです.
これは何故なのでしょうか.
恐らく,optoptionsの設定によってoptrとoptresidualが限りなく近くなるように設定できると思うのですが,
どうするのがよいのでしょうか.
ご回答よろしくお願い致します.
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre 数学 en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
