How can i solve the Error using erfc- Input must be real and full

조회 수: 13 (최근 30일)
Siti Noramirah
Siti Noramirah 2021년 4월 22일
편집: David Goodmanson 2021년 5월 5일
The coding are as below.
I got the error at LINE 5 where the erfc is not valid since there is a square root of complex number. But the calculation supposed to be like that, any other ways to write it without getting an error? I really appreciate some help here.
Coding:
y=linspace(0,6,150);
t=1; U=3; Pr=5; w=pi/3; B1=0.8; Gr=4.5; a1=1-Pr; B2=B1/a1; B3=Gr/(a1*B2);
H=1; r=1i*w*t; s1=B1+1i*w; s2=B1-1i*w; z1=1i*B2*Pr; z2=1i*B2*t;
u1=(1/4)*H*exp(imag(r)+y*sqrt(imag(s1))).*erfc(y/(2*sqrt(t))+sqrt(imag(s1))*t)+(1/4)*H*exp(imag(r)-y*sqrt(imag(s1))).*erfc(y/(2*sqrt(t))-sqrt(imag(s1)*t));
u2=(1/4)*H*exp(imag(-r)+y*sqrt(imag(s2))).*erfc(y/(2*sqrt(t))+sqrt(imag(s2))*t)+(1/4)*H*exp(imag(-r)-y*sqrt(imag(s2))).*erfc(y/(2*sqrt(t))-sqrt(imag(s2)*t));
u3=(B3/2)*exp(y*sqrt(B1))*erfc(y/(2*sqrt(t))+sqrt(B1*t))+(B3/2)*exp(-y*sqrt(B1))*erfc(y/(2*sqrt(t))-sqrt(B1*t));
u4=(1/2)*exp(-B2*t+y*sqrt(B1-B2))*erfc(y/(2*sqrt(t))-sqrt((B1-B2)*t))+(1/2)*exp(-B2*t-y*sqrt(B1-B2))*erfc(y/(2*sqrt(t))+sqrt((B1-B2)*t));
u5=B3*erfc(y/2*sqrt(Pr/t));
u6=(B3/2)*exp(-B2+y*imag(z1))*erfc((y/2)*sqrt(Pr/t)+imag(z2))+(B3/2)*exp(-B2-y*imag(z1))*erfc((y/2)*sqrt(Pr/t)-imag(z2));
u=u1+u2-u3+u4+u5-u6;
figure
plot(y,u,'blue')
title('Temperature profiles when Pr=0.7 and t=0.8')
xlabel('y')
ylabel('u')
  댓글 수: 3
Siti Noramirah
Siti Noramirah 2021년 4월 22일
I want to plot a graph for u(y,t) which is the solution from taking inverse laplace of u_bar(y,s).
so, as the result from the inverse laplace, i got u2=........erfc(......) . when i run the coding, there's an error using the erfc. For u1, there's no error since it contain real argument.
beta1=0.8 omega=pi/3
Is there any different approach to fix this problem?
Thank you sm for your help.
David Goodmanson
David Goodmanson 2021년 4월 22일
Hello Siti,
given the symmetry of u1 and u2 in the handwritten equations, it can't be the case that u1 has real argument for erfc and u2 has complex argument for erfc. It appears that they are all complex.

댓글을 달려면 로그인하십시오.

답변 (1개)

David Goodmanson
David Goodmanson 2021년 4월 23일
편집: David Goodmanson 2021년 5월 5일
Hello Siti,
Although erfc does not take complex arguments as you know, the kummer U function is available and does take complex argument.
Kummer M and kummer U are partner functions where M is bounded at the origin, and U is not. In Matlab the kummer M function is denoted by hypergoem(a,b,z), and the kummer U function is denoted by kummerU. Matlab syntax is not very consistent here. Anyway, you can use
function y = erfcU(z)
% erfc from kummerU
%
% function y = erfcU(z)
yy = (1/sqrt(pi))*exp(-z.^2).*kummerU(1/2,1/2,z.^2);
a = real(z)>0 | (real(z)==0 & imag(z)>=0); % Re(z)>0, also positive y axis
y = (a.*yy + ~a.*(2-yy));
which works for complex argument.

카테고리

Help CenterFile Exchange에서 Simulink에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by