[問題] matlab lsqnonlin已回收
程式如下 之後在詢問各位大大問題
B = [ 1.0000000e+001 -1.0000000e+001 -1.0000000e+001 1.0000000e+001 ...
0.0000000e+000 -2.0000000e+001 ;
1.0000000e+001 1.0000000e+001 -1.0000000e+001 -1.0000000e+001 ...
0.0000000e+000 1.0000000e+001 ;
-2.0000000e+001 -2.0000000e+001 -2.0000000e+001 -2.0000000e+001 ...
2.0000000e+001 1.0000000e+001 ;
-2.1126201e-008 1.8585270e-008 2.8684479e-008 -2.8271913e-008 ...
-2.8507878e-008 -4.1732526e-008 ;
-2.6093691e-008 -2.5468394e-008 2.9572883e-008 1.7171730e-008 ...
3.1440679e-008 1.8883697e-008 ;
1.0169805e-008 1.3120370e-008 9.2647982e-009 1.0944208e-008 ...
1.7693058e-007 -3.2500418e-009 ] ;
主程式如下
clc ;
clear all ;
global Bexp ;
Bexp = load('B.dat') ;
T0 = [ 1 1 1 1 1 1 ] ;
T = lsqnonlin('fun',T0) ;
fun.m檔如下
function y = fun(T0)
global Bexp ;
a = T0(1) ; b = T0(2) ; c = T0(3) ;
m = T0(4) ; n = T0(5) ; p = T0(6) ;
Nt = -2.59998208*10^-4 ; % 係數
x = Bexp(1,:) ; y = Bexp(2,:) ;z = Bexp(3,:) ;
Bx = Bexp(4,:) ; By = Bexp(5,:) ; Bz = Bexp(6,:) ;
Rcal = sqrt((x-a).^2+(y-b).^2+(z-c).^2) ;
Bxcal = Nt*(3*(m*(x-a)+n*(y-b)+p*(z-c))*(x-a)./Rcal.^5-m/Rcal.^3);
Bycal = Nt*(3*(m*(x-a)+n*(y-b)+p*(z-c))*(y-b)./Rcal.^5-n/Rcal.^3);
Bzcal = Nt*(3*(m*(x-a)+n*(y-b)+p*(z-c))*(z-c)./Rcal.^5-p/Rcal.^3);
y=sum((Bx-Bxcal).^2 + (By-Bycal).^2 + (Bz-Bzcal).^2 ) ;
結束
問題敘述
原始方程式事由向量拆解成 x y z 軸 所以他取到的最後有三個方向的量
因此有 x y z Bx By Bz 已經確定了
但a b c m n p 都是未知的數值 我最需要的解是其中的a b c
1. 顯示錯誤:
??? Error using ==> lsqncommon at 101
LSQNONLIN cannot continue because user supplied objective function failed with
the following error:
Error using ==> mtimes
Inner matrix dimensions must agree.
Error in ==> lsqnonlin at 182
[x,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in ==> Untitled2 at 10
T = lsqnonlin('fun',T0) ;
2. 假設 其中的m n p 我限制了一個條件 m^2+n^2+p^2=1 需要在指令中的何處使用?
但 a b c 大致上為 [ -10 10 ] 之間
3. 有哪位大大前輩 可以介紹類似用MATLAB寫最佳化的書籍可以參考的
PS 希望有提到一種叫:Levenberg Marquardt
感激不盡 希望大家多多幫忙 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.241.2