How can I asign values to syms during a for loop

1 次查看(过去 30 天)
Hi there,
I'm having a problem with the sysmbolics when I try to make a for loop to then plot the function for the different values of x.
The code is the following
syms w(x,y) W(x,y) g(y) yp z Ax
assume(y,'real')
assume(yp,'real')
% Ax = 300;
% Radius
R = 50;
q = 1/3;
k = 0.04;
sigmas = 1/3*(k*x+R)^2;
% c(x)
c = R^2*(1-q)/(2*sigmas);
% Tau squared
taus = 2/3*k*(k*x+R)*Ax;
w(x,y)=sqrt(c)*exp(-y^2/(2*sigmas));
g(z) = exp(-z^2/(2*taus))/sqrt(2*pi*taus);
g(y-yp);
f(x,y,yp,Ax) = g(y-yp)*w(x,yp);
% Some limits of integration
a = -1000;
b = 1000;
% Define W as the integral of f(x,yp) dy from a to b
% W(x,Ax,y) = int(f(x,y,yp,Ax), yp, a, b);
Ax = 1;
N=Ax:Ax:10*R;
%W(x,y) = zeros(length(N),1); % Pre-allocation. not sure if needed
for i = N
x = i-1;
W(x+i,y) = int(f(x,y,yp,Ax), yp, a, b);
i = i + 1;
end
So basically in the for loop the W function will be evaluated at x+deltaX and then the integral of the function on the right hand side will have x as value. Basically if we start at x=0 and deltaX=0.1, we will have W(0.1,y)=int(g(y-yp)*w(0,yp))
Any idea how could I make it work ?

回答(1 个)

Brahmadev
Brahmadev 2023-9-27
Hi Raul,
I understand that you would like to evaluate the integral "W" for each step of "deltaX". This can be accomplished without using a for loop. You can replace the code after defining the limits "a" and "b" with the following code:
Fnew = subs(f, Ax, 1); % Symbolic substitution of Ax as 1
Ax = 1; % Defining the value of Ax for proper evaluation of Ax:Ax:50*R
% Calculating the integral after substituting the value for x as an array
% with steps deltaX
Fnew2 = subs(Fnew, x, Ax:Ax:10*R);
W = int(Fnew2, yp, a, b);
Also, it is not necessary to define "Ax" and "yp" as a symbolic variables in the first line.
Hope this helps.

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by