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)

 Accepted Answer

Ameer Hamza
Ameer Hamza on 12 Apr 2020
Edited: Ameer Hamza on 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 Comments

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
Can you paste your code here?
Farooq Hussain
Farooq Hussain on 12 Apr 2020
Edited: Farooq Hussain on 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')
my code does not read the value of A(x)...this is the issue
Variables a and L are not defined in your code. Also can you show me the mathematical equation you are trying to implement.
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
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 on 12 Apr 2020
Edited: Farooq Hussain on 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));
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);

Sign in to comment.

More Answers (1)

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)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!