[問題] matlab lsqnonlin已回收

看板MATLAB作者 (1+.....)時間16年前 (2009/07/07 18:56), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
程式如下 之後在詢問各位大大問題 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
文章代碼(AID): #1AKodvJO (MATLAB)