# where to write function

1 view (last 30 days)
shiv gaur on 2 Feb 2022
Commented: Voss on 2 Feb 2022
m=0;
k0 = 1; la0 = 2*pi/k0; a = 0.3;
ec = 2.2^2; es = 1.7^2; ef = -4;
pc = ef/ec; ps = ef/es;
tol = 1e-12;
bsinf = sqrt(ef*es/(ef+es));
x = linspace(-3,3,601)*a;
plot(x/a, real(Hy), linewidth,2);
function [be,E] = pwga(la0,ef,ec,es, a, bsinf, m, tol);
ga = sqrt(be^2-ef); as = sqrt(be^2-es); ac = sqrt(be^2-ec);
psi = atanh(-pc*ac/ga)/2- atanh(-ps*as/ga)/2
Hy = cosh(ga*a - psi).*exp(as*(x+a)).*(x<-a) + ...
cosh(ga*a + psi).*exp(-ac*(x-a)).*(x>a) + ...
cosh(ga*x + psi).*(abs(x)<=a);
end
pl plot the following
Steven Lord on 2 Feb 2022
Try updating the function yourself (it's a good way to learn.) If you are not able to successfully do so post your updated function and we can offer more feedback.

Voss on 2 Feb 2022
Sorry, I had the impression that the question was where to write the function, based on the title, "where to write function".
If the question is how to plot real(Hy) vs x/a, then you're going to have to get Hy out of that function or plot from inside the function (both of which would require calling the function at some point). But also, there is an undefined variable be you'd have to define first. I'll just pick be = 1 to show how it might work:
m=0;
k0 = 1;
la0 = 2*pi/k0;
a = 0.3;
ec = 2.2^2;
es = 1.7^2;
ef = -4;
pc = ef/ec;
ps = ef/es;
tol = 1e-12;
bsinf = sqrt(ef*es/(ef+es));
x = linspace(-3,3,601)*a;
Hy = pwga(la0,ef,ec,es,pc,ps,a,bsinf,m,tol,x);
plot(x/a, real(Hy), 'linewidth',2);
function Hy = pwga(la0,ef,ec,es,pc,ps,a,bsinf,m,tol,x)
be = 1;
ga = sqrt(be^2-ef);
as = sqrt(be^2-es);
ac = sqrt(be^2-ec);
psi = atanh(-pc*ac/ga)/2- atanh(-ps*as/ga)/2;
Hy = cosh(ga*a - psi).*exp(as*(x+a)).*(x<-a) + ...
cosh(ga*a + psi).*exp(-ac*(x-a)).*(x>a) + ...
cosh(ga*x + psi).*(abs(x)<=a);
end
In this case the input argument names in the definition of the function are the same as the names of the variables the function is called with, but this need not be the case, and it's important to understand that if you want to understand how functions work. For example, you can try the following to see how it works:
first_a = 100;
first_b = 200;
second_a = 1000;
second_b = 2000;
c = a+b;
end
Voss on 2 Feb 2022
How would I know what the value of be is supposed to be?
You could maybe calculate be from a given value of Hy, but no Hy is given in your code; in fact Hy is what was calculated from be.
Perhaps some description on your part about what the various variables represent, or the field or domain of problem would help people have some context and maybe an expert in that field can assist you.
If you want to avoid your questions getting flagged as duplicates, then you should ask a clear question each time, so it's obvious to others how the question is different from other questions relating to the same piece of code.
I am req to do nothing.

R2021b

### Community Treasure Hunt

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

Start Hunting!

Translated by