for x=0:0.5:5;
if 0<x<2
y=((1+0.5*(1-cos(2*pi*x/5))).^-0.5);
else x>2;
y=1;
end
end
plot(x,y)

 Respuesta aceptada

Ameer Hamza
Ameer Hamza el 12 de Abr. de 2020
Editada: Ameer Hamza el 12 de Abr. de 2020

0 votos

You can use this vectorized version which is usually faster in MATLAB as compared to for loop.
x = 0:0.1:5;
y = (x<2)*((1+0.5*(1-cos(2*pi*x/5))).^-0.5) + (x>=2)*1;
plot(x,y)

12 comentarios

Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
Thank you very much for your dear Ameer ....Will this vectorized version work correctly if i use (x<2)*((1+0.5*(1-cos(2*pi*x/5))).^-0.5) + (x>=2)*1; by using RK method? As i use this expression but, i don not get the required graph..Any suggestion please
Ameer Hamza
Ameer Hamza el 12 de Abr. de 2020
Can you paste your code here?
Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
Editada: Farooq Hussain el 12 de Abr. de 2020
%%% Range-Kutta method %%%%%
L==8;
CM=-1;
a=0;
h=0.5;
n=20;
x=a:h:n;
%%% Functions %%%
%%% A(x) =(1).*((x < 0)) + ((1-0.5*CM*(1-cos(2*pi*x/L))).^-0.5).*((0<= x) & (x <=L))+(1).*((x >L));
f1=@(x,u) u* ((1).*((x < 0)) +((1+0.5*(1-cos(2*pi*x/L))).^-0.5).*((0<= x) & (x <=L))+(1).*((x >L)));
%%% Initial Conditions %%%
u(1)=01;
for i=1:length(x)-1;
m1=h*f1(x(i), u(i));
m2=h*f1(x(i)+0.5*h, u(i)+0.5*m1);
m3=h*f1(x(i)+0.5*h, u(i)+0.5*m2);
m4=h*f1(x(i)+h, u(i)+m3);
u(i+1)=u(i)+(1/6)*(m1+2*m2+2*m3+m4);
end
plot(x,u,'k')
Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
my code does not read the value of A(x)...this is the issue
Ameer Hamza
Ameer Hamza el 12 de Abr. de 2020
Variables a and L are not defined in your code. Also can you show me the mathematical equation you are trying to implement.
Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
can i take your email please...so that i can email you the pdf of the paper i have reviewed...i manged to do all coding and plot graphs.....every thing is clear to me but piece-wise function A(x) is not clear to me...have been trying by different methods.....but there is something i am missing....Thanking in anticpation
Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
Ameer Hamza
Ameer Hamza el 12 de Abr. de 2020
It is not practical for me to understand the complete paper. Can you write down the logic to generate the matrix A, and I will try to suggest how it can be written in MATLAB.
Farooq Hussain
Farooq Hussain el 12 de Abr. de 2020
Editada: Farooq Hussain el 12 de Abr. de 2020
simply how can i incorporate or use A(x) by using this RK code...
A(x) in MATLAB code...I had successfully used A(x) in Mathematica.... I will send you my complete code after simplifying..so that you have no problem in understanding this...
Finally, thanks for your cooperation and time..I really appreciate this.
Ameer Hamza
Ameer Hamza el 12 de Abr. de 2020
I haven't used Mathematica in a while, so cannot remember correctly. In MATLAB, you don't need to explicitly write an index on the left-hand side if you are initializing a variable. You can just write
A = (1).*((x < 0)) + ((1-0.5*CM*(1-cos(2*pi*x/L))).^-0.5).*((0<= x) & (x <=L))+(1).*((x >L));
Farooq Hussain
Farooq Hussain el 13 de Abr. de 2020
Assalam o alaikum!
Dear Ameer Hamaz...Hope you are doing well...Please replace the value of A(x)
in my code u*A(x)......when
L=10;
a=0;
h=0.5;
n=20;
x=a:h:n;
f1=@(x,u) u * A(x);
%%% Initial Conditions %%%
u(1)=1;
for i=1:length(x)-1;
m1=h*f1(x(i), u(i));
m2=h*f1(x(i)+0.5*h, u(i)+0.5*m1);
m3=h*f1(x(i)+0.5*h, u(i)+0.5*m2);
m4=h*f1(x(i)+h, u(i)+m3);
u(i+1)=u(i)+(1/6)*(m1+2*m2+2*m3+m4);
end
plot(x,u,'k')
Ameer Hamza
Ameer Hamza el 13 de Abr. de 2020
You can define it like this
A = @(x) (0<x & x<L).*(1+0.5*(1-cos(2*pi*x/L))-1/2) + (L<x).*1;
f1=@(x,u) u * A(x);

Iniciar sesión para comentar.

Más respuestas (1)

Thiago Henrique Gomes Lobato
Thiago Henrique Gomes Lobato el 12 de Abr. de 2020
Editada: Thiago Henrique Gomes Lobato el 12 de Abr. de 2020

0 votos

Making y=... substitute the whole array. Try something like this:
x=0:0.5:5;
y = zeros(size(x));
for idx = 1:length(x)
if 0<x(idx) && x(idx)<2
y(idx)=((1+0.5*(1-cos(2*pi*x(idx)/5))).^-0.5);
else x(idx)>2;
y(idx)=1;
end
end
plot(x,y)

Categorías

Etiquetas

Preguntada:

el 12 de Abr. de 2020

Comentada:

el 13 de Abr. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by