MATLAB How to Plot y=sin(x)/log(x) in MATLAB Without Imaginary Errors?

  • Thread starter Thread starter MathematicalPhysicist
  • Start date Start date
  • Tags Tags
    Plot
Click For Summary
The discussion revolves around plotting the function y = sin(x)/log(x) in MATLAB and the errors encountered. The user initially receives a warning about imaginary parts due to the logarithm function being undefined for non-positive values of x. It is noted that the function cannot be plotted for x ≤ 0, and even for the range [2, 10], the plot does not display correctly. A key solution provided is to use element-wise operations in MATLAB by applying the "./" operator, which allows for proper matrix evaluation. This adjustment enables successful plotting of the function. Additionally, examples are shared to illustrate the use of element-wise operations for other mathematical functions, emphasizing the importance of this syntax in MATLAB for generating accurate plots.
MathematicalPhysicist
Science Advisor
Gold Member
Messages
4,662
Reaction score
372
Hi I want to plot the function ##y=\sin(x)/\log(x)## in MATLAB but I get the next error message:
Matlab:
Warning: Imaginary parts of complex X and/or Y arguments ignored

Here is the script that I used:
Matlab:
x = -2*pi:pi/100:2*pi;
y = sin(x)/log(x);
plot(x,y)
How to fix this that I'll get the plot on the real line?

Thanks!
 
Physics news on Phys.org
Never mind.

I want to delete this thread but I don't see how...
 
What happens to the denominator when ##x=1##?
 
@kuruman Yeah, it's not defined there, then how plot this function?
when I type it in google I get a nice plot.
 
MathematicalPhysicist said:
@kuruman Yeah, it's not defined there, then how plot this function?
when I type it in google I get a nice plot.
Can you do a piecewise plot? (I am not familiar with MATLAB).
 
@jedishrfu when I try to plot for the domain [2,10] I still don't get a graph, I do get the plot window but without the graph line, it doesn't show up.

Matlab:
x = 2:1/100:10;
y = sin(x)/log(x);
plot(x,y)
 
MathematicalPhysicist said:
@jedishrfu when I try to plot for the domain [2,10] I still don't get a graph, I do get the plot window but without the graph line, it doesn't show up.
Use this:
Matlab:
y = sin(x)./log(x);
The thing I added is "./" so that ##y## becomes a matrix. Now you should get a good plot.
Figure 2019-02-14 08_11_58.png
 

Attachments

  • Figure 2019-02-14 08_11_58.png
    Figure 2019-02-14 08_11_58.png
    9.5 KB · Views: 921
  • Like
Likes MathematicalPhysicist and jedishrfu
  • #10
the dot before the operator says to do an element by element evaluation.

as an example:

x=0:0.1:10
y=x.*x

generates the y=x^2 function and this plots it

plot(x,y)

In other programming languages, this simple convenience would be implemented as a for loop

Python:
for i in range(0, 100):
    x[i] = i / 10.0

for i in range(0, 100):
    y[i] = x[i] * x[i]
 
  • #11
Ah, yes forgot about the dot thing. Thanks folks!
 
  • #12
jedishrfu said:
as an example:

x=0:0.1:10
y=x.*x

generates the y=x^2 function
Note that the dot also works for exponential operators:
Code:
y = x.^2
 

Similar threads

  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 8 ·
Replies
8
Views
3K
  • · Replies 11 ·
Replies
11
Views
4K
  • · Replies 1 ·
Replies
1
Views
5K
  • · Replies 2 ·
Replies
2
Views
4K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 6 ·
Replies
6
Views
1K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 2 ·
Replies
2
Views
2K