[問題] 解聯立(lsqnonlin)已回收
程式如下
clear all; clc; close all; format long;
%=========================================
global M u0
turns = 10000 ;
A =1 ;
radius = 4.5 * 10^-2 ;
u0 = 4*pi*10-7 ;
M = pi * radius^2 * A * turns ;
%=========================================
global X Y Z
X = -0.13 ;
Y = 0 ;
Z = 0.13 ;
%=========================================
global Bx By Bz
Data = [ -6.8231251e-004 ; 3.1970395e-004 ; 4.8637890e-004 ]
Bx = Data(1,:) ;
By = Data(2,:) ;
Bz = Data(3,:) ;
%==========================================
%% optimization
x0 = [ 0.5 0.5 0.5 1 1 1 ] * 10^-2 ; % x0 = [ a b c m n p ] % The initail
value
lb = [ -15 -15 -15 -1 -1 -1 ] * 10^-2 ;
ub = [ 15 15 15 1 1 1 ] * 10^-2 ;
options =optimset('LevenbergMarquardt','off') ; % The optimization .
[ x , resnorm ,exitflag,output] = lsqnonlin(@fun,x0,lb,ub,options) ;
%==========================================
fun.m
function f = fun(x0)
global M u0 X Y Z Bx By Bz
x = X ; y = Y ; z = Z ;
a = x0(1) ; b = x0(2) ; c = x0(3) ; m = x0(4) ; n = x0(5) ; p = x0(6) ; %
f = zeros(1,4) ;
f(1) = u0 * M * ( 3 * (m * ( x-a ) + n * ( y-b ) + p * ( z-c )) * (x-a) /
sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2 )^5 - m / sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2
)^3 ) / (4*pi) - Bx ; %
f(2) = u0 * M * ( 3 * (m * ( x-a ) + n * ( y-b ) + p * ( z-c )) * (y-b) /
sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2 )^5 - n / sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2
)^3 ) / (4*pi) - By ; %
f(3) = u0 * M * ( 3 * (m * ( x-a ) + n * ( y-b ) + p * ( z-c )) * (z-c) /
sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2 )^5 - p / sqrt( (x-a)^2 + (y-b)^2 + (z-c)^2
)^3 ) / (4*pi) - Bz ; %
f(4) = m^2 + n^2 +p^2 -1 ; %
我想請教的是在fun.m檔中的f(4)
因為他應該要是限制條件 也就是我希望他可以是 m^2+n^2+p^2=1
因為不知道語法這個限制要怎麼寫 所以我也把他當作objective function
最後出來的結果卻相差遙遠 變成 (-2.50e-9)^2+(-3.97e-9)^2+(3.94e-9)^2 極小於1
[0.0086 0.0052 0.0018 -2.50e-09 -3.97e-09 3.94e-09]
PS 假設我已經知道 a = 0.02 b = 0.02 c = 0.02
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.241.2
※ 編輯: arj20306 來自: 140.113.241.2 (09/10 18:08)
※ 編輯: arj20306 來自: 140.113.241.2 (09/10 18:09)
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章