How can i plot this graph?

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)

 Risposta accettata

Ameer Hamza
Ameer Hamza il 12 Apr 2020
Modificato: Ameer Hamza il 12 Apr 2020
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 Commenti

Farooq Hussain
Farooq Hussain il 12 Apr 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 il 12 Apr 2020
Can you paste your code here?
Farooq Hussain
Farooq Hussain il 12 Apr 2020
Modificato: Farooq Hussain il 12 Apr 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 il 12 Apr 2020
my code does not read the value of A(x)...this is the issue
Ameer Hamza
Ameer Hamza il 12 Apr 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 il 12 Apr 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
Ameer Hamza
Ameer Hamza il 12 Apr 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 il 12 Apr 2020
Modificato: Farooq Hussain il 12 Apr 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.
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 il 13 Apr 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')
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);

Accedi per commentare.

Più risposte (1)

Thiago Henrique Gomes Lobato
Modificato: Thiago Henrique Gomes Lobato il 12 Apr 2020
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)

Tag

Community Treasure Hunt

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

Start Hunting!

Translated by