fsolve 오류에 대한 질문

11 views (last 30 days)
Jin Ung
Jin Ung on 9 Dec 2022
Edited: lazymatlab on 18 Apr 2023
안녕하세요 한양대학교 대학원에서 공부하는 학생입니다.
fsolve를 실행 시 다음과 같은 오류가 발생합니다. 이를 해결하고 싶습니다. 아래 코드에 풀고자하는 비선형 방정식이 있습니다.
'목적 함수가 초기점에서 정의되지 않은 값을 반환합니다. FSOLVE 실행을 계속할 수 없습니다.'
F(1) = 2.3e-14*x^0.68*exp(-15.76/x)/sqrt(e_charge*x/mar) - 1/(ng*0.5*R*L/(R*0.86*(3+L/(2*lamda_in))^(-1/2)+L*0.8*(4+R/(2*lamda_in))^(-1/2)));가 0이 되도록하는 x를 구하고 싶습니다.
이에 대한 답변 부탁드립니다.
%% nonliear equation solve
x = fsolve(@func1,[0])
function F = func1(x)
Pressure = 100; %[mTorr]
Pabs = 100; %[W]
R = 0.13; %[m]
L = 0.1; %[m]
Tgas = 300; %[K]
RF_freq = 13.56;%[MHz]
Argon_mass = 39.948; %[amu]
mar = Argon_mass*1.67e-27; %[kg]
me = 9.11e-31; %[kg]
e_charge = 1.6e-19; %[C]
kB = 1.38e-23; %[J/K]
uB = sqrt(e_charge*x(1)/mar);
ng = (Pressure*133.322368*0.001)/(kB*Tgas); %[m^-3]
Deff = 1e+20/ng; %[m^2/s]
eff_diff_length = ((pi/L)^2+(2.405/R)^2)^-0.5; %[m]
sigma_in = 1e-18; %[m^2]
sigma_en = 6e-20; %[m^2]
lamda_in = 1/(sigma_in*ng); %[m]
volume = pi*R^2*L;
epsilon0 = 8.85e-12; %[F/m]
mu0 = 1.26E-06; %[H/m]
hR = 0.8*(4+R/(2*lamda_in))^(-1/2);
hl = 0.86*(3+L/(2*lamda_in))^(-1/2);
Aeff = 2*pi*R*(hR*L+hl*R);
eff_plasma_size = 0.5*R*L/(R*hl+L*hR);
nu_m = ng*sigma_en*sqrt(8*e_charge*x(1)/(pi*me)); %[Hz]
Kgm = 2.5e-15*x(1)^0.74*exp(-11.56/x(1));
Kgi = 2.3e-14*x(1)^0.68*exp(-15.76/x(1));
Kel = 3.9e-13*exp(-4.6/x(1));
Egm = 11.56;Egi = 15.78;
epsilonc = (Kgi*Egi + Kgm*Egm + 3*me/mar*Kel*x(1))/Kgi;
F(1) = 2.3e-14*x^0.68*exp(-15.76/x)/sqrt(e_charge*x/mar) - 1/(ng*0.5*R*L/(R*0.86*(3+L/(2*lamda_in))^(-1/2)+L*0.8*(4+R/(2*lamda_in))^(-1/2)));
end

Answers (1)

lazymatlab
lazymatlab on 18 Apr 2023
Edited: lazymatlab on 18 Apr 2023
fsolve는 equation이 여러 개 있을 때 사용하며, equation이 하나일 때에는 fzero를 사용하는 것이 좋습니다. fzero는 지정한 초기값에서부터 방정식의 해를 찾아가는 방식인데, 주어진 F에 x=0을 대입하면 NaN이 나와서 에러가 발생합니다. F가 NaN이 되지 않는 적당한 값(x=1 등)을 대입하고 fzero를 이용하면 결과가 잘 나오는 것이 확인됩니다.
결론적으로 첫줄이 아래와 같이 수정되면 됩니다.
x = fzero(@func1, 1);

Categories

Find more on 문제 기반 최적화 설정 in Help Center and File Exchange

Products


Release

R2022b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!