I want to plot between "W" and "lambda" for different values of "psi" but don't know what's going wrong.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
AVINASH SAHU
am 8 Jul. 2022
Kommentiert: Torsten
am 9 Jul. 2022
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
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)')
0 Kommentare
Akzeptierte Antwort
patrick1704
am 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.
1 Kommentar
Torsten
am 9 Jul. 2022
The problem has been solved here:
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Calculus finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!