Clear Filters
Clear Filters

I want to plot between "W" and "lambda" for different values of "psi" but don't know what's going wrong.

2 views (last 30 days)
syms x lambda
warning off
alpha = -0.1;
sigma = 0.1;
eps = -0.1;
e = 0.2;
M = 10;
a = 2;
figure
psi_list = [10, 20, 30, 40. 50];
for i = 1:numel(psi_list)
psi = psi_list(i);
hbar = @(x) a - a.*x + x;
A1 = eps + alpha^3 + (3 * sigma^2 * alpha);
B1 = @(x,lambda) (-3 * lambda * M) * ((hbar(x).^2) + (2 .* hbar(x) .* alpha) + (sigma^2) + (alpha^2));
a1 = @(x) tanh(M .* hbar(x));
b1 = @(x) 1 - ((tanh(M .* hbar(x))).^2);
c1 = (M * alpha) - ((M^3 * A1)/3);
d1 = @(lambda) 2 * (M^2) * (1 + lambda);
C1 = @(x) a1(x) + (b1(x) .* c1);
D1 = @(x,lambda) d1(lambda) .* ((hbar(x).^3) + (3 .* (hbar(x).^2) .* alpha) + (3 .* hbar(x) .* (alpha)^2) + (3 .* hbar(x) .* (sigma)^2) + eps + (3 * alpha * (sigma^2)) + (alpha^3));
f1 = @(x,lambda) B1(x,lambda) + (3 * lambda .* C1(x) .* hbar(x)) + (3 * lambda .* C1(x) .* alpha) + (D1(x,lambda) .* C1(x));
f2 = @(x,lambda) 12 * (M^2) * (1 + lambda) .* C1(x);
f3 = psi * (e^3);
f4 = @(lambda) (1 + lambda) *180 * ((1 - e)^2); % 180 is not given in paper
f5 = @(lambda) 1/(2 + lambda);
F = @(x,lambda) ((f5(lambda) .* f1(x,lambda))./f2(x,lambda)) + (f3/f4(lambda));
q1 = @(x,lambda) hbar(x) ./ (2 .* F(x,lambda));
Q1 = @(lambda) integral(q1,0,1); % integration with respect to "x" limit 0 to 1
q2 = @(x,lambda) 1./(F(x,lambda));
Q2 = @(lambda) integral(q2,0,1); % integration with respect to "x" limit 0 to 1
Q = @(lambda) Q1(lambda)/Q2(lambda); % Q is a function of "lambda"
p1 = @(x,lambda) (1./F(x,lambda)) .* ((0.5 .* hbar(x)) - Q(lambda));
P = @(x,lambda) integral(p1,0,x); % integration with respect to "x" limit 0 to x
% W is obtained by integrating "P" with respect to x limit of x is 0 to 1
W =@(lambda) integral(P,0,1);
fplot(W(lambda), [0 1])
end
Error using integral
Limits of integration must be double or single scalars.

Error in solution (line 43)
P = @(x,lambda) integral(p1,0,x); % integration with respect ot "x" limit 0 to x

Error in integralCalc/iterateScalarValued (line 314)
fx = FUN(t);

Error in integralCalc/vadapt (line 132)
[q,errbnd] = iterateScalarValued(u,tinterval,pathlen);

Error in integralCalc (line 75)
[q,errbnd] = vadapt(@AtoBInvTransform,interval);

Error in integral (line 87)
Q = integralCalc(fun,a,b,opstruct);

Error in solution (line 46)
W =@(lambda) integral(P,0,1);
legend(num2str(psi_list'))
ylim([0 1])
set(gca, 'ytick', 0:0.1:1);
set(gca, 'xtick', 0:0.2:1);
xlabel('x')
ylabel('W(lambda)')

Accepted Answer

patrick1704
patrick1704 on 9 Jul 2022
Well, what's going wrong in this context is that your "W" calls "P", which wants to evaluate from [0,x] with x being defined as a symbolic variable. This is not possible with integral but only int (Definite and indefinite integrals - MATLAB int - MathWorks Deutschland).
However, I think that your recursive function definition is anyway a little off. From my perspective, you defined all functions with the anyonymouse handle @(lambda, x), with lambda being defined by fplot and x being either numeric or symbolic depending on what you want/need to achieve. Additionally, you have to explicity call the inputs to pass them to the next function.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!