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)

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 12 Apr. 2020
Bearbeitet: Ameer Hamza am 12 Apr. 2020

0 Stimmen

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 Kommentare

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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Thiago Henrique Gomes Lobato
Bearbeitet: Thiago Henrique Gomes Lobato am 12 Apr. 2020

0 Stimmen

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)

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by