fsolve 오류에 대한 질문

조회 수: 11 (최근 30일)
Jin Ung
Jin Ung 2022년 12월 9일
편집: lazymatlab 2023년 4월 18일
안녕하세요 한양대학교 대학원에서 공부하는 학생입니다.
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

답변 (1개)

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

카테고리

Help CenterFile Exchange에서 문제 기반 최적화 설정에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!