Printing out values from a function instead of plotting them in Matlab - matlab

He all! I'm very new at matlab and I have a simple question to ask: I have a function that is being evaluated at 100 discrete points. I can get it on a plot using:
plot(x,f,'+')
But I need to print an actual list of these values.
Does anyone know how I could do this? I've searched without any luck, even though this seems fairly trivial

Related

Extracting different values of a function vs time using MATLAB curve fitting

I feel like this should be something simple to solve - but I'm struggling to find the answer anywhere.
I have a set of 'R' values and a set of time values, I want to use curve fitting (I haven't used this part of the software before) to calculate the 'R' values at a different set of time values, literally just be able to access what is displayed in a figure created using curve fitting using a different set of time values (ie I can point the curser to the values I want on a figure and write them down but this is not efficient at all for the number of time values I have). Context is an orbital motion radius vs time.
Thanks in advance :)
You can use Matlab's fit function to do this very easily. Assuming you have your data in arrays r and t, you can do something like this:
f = fit(t, r, 'smoothingspline')
disp(f(5))
If you consult the documentation, you can see the various fit types available. (See https://www.mathworks.com/help/curvefit/fit.html)

Matlab spectrograms giving imaginary-like numbers

I'm using MATLAB to work with some spectrograms. I'm new to this kind of thing and come from more of a CS background than a signals background, so I'm not sure what I'm missing here although it may turn out to be fairly basic.
I'm trying to compute spectral difference, which I conceptually am pretty sure I understand. I've got a signal, I can do the SFT on it with MATLAB's spectrogram() function. Then, I try to loop over the spectrogram for the entire signal and at each sampled point compute the difference from the previous point by looping over powers at each frequency and subtracting. I thought I had the concept down, but when I try to run it, I realize that the points returned when I write "MySpectrogram(n,k)" are complex numbers, or atleast look like that. They are formed such that the first part of the number is negative, and then after it there is a +Coefficient*I (-.07+0.0061i) for example. I tried to square these results. After squaring them, they still appear as complex numbers. Now I am totally lost. Can someone explain what's happening?
I'm calling s = spectrogram(x,window,noverlap,nfft).
Here's the documentation for spectrogram
If you need to access the power spectrum, use this:
[s,f,t,ps] = spectrogram(x,window,noverlap,f,fs)

MATLAB function handles

Im working on a MatLab homework and don't understand quite what the task is. The homework states:
Create a MATLAB funciona in an .m file which receives a handle for a two-dimensional function and which creates a surface plot with a range of values input while the .m file is running.
I can't make sense of what I'm supposed to be doing. Could anyone provide such an example?
Your homework is to define a MATLAB function. As it is a homework, you should know how to do that.
The input variable for your function should be a handle for a two-dimensional function. Again, you should know what this means, or you should be able to figure it out (hence homework). Hint: help function_handle.
The function should read the plot ranges during runtime, i.e. interactively from the user (writing something into the command line). You should know how to do this.
And finally, your function has to plot the 2d surface (provided as input parameter) over the range (provided as interactive input). You should know how to do this.

Sympy/Matlab Plot y=mx, without any numerical value of m

I need to plot y = m*x where x ranges from, say 0 to 10. But m is a symbolic constant here, I dont want to supply a specific value.
Here's what my desired graph looks like (similar to how a class teacher would draw this):
[Consider m=a]
Sympy:
Tried doing this:
sympy.plot(m*x,(x,0,10))
but this shows the following error:
ValueError: The same variable should be used in all univariate expressions being plotted.
I cant really understand the error message, bit I am guessing it cant plot m as a (symbolic) constant in this case. Is it so? And in general, how can I do this?
Matlab:
Soon, I wanted to know if this is a limitation of sympy only, and thought maybe popular ones like matlab can do it? But with a bit of search on docs and SO, I couldnt find any. Both plot and fplot doesnt seem to cover this, they expect numerical values.
Others:
I am not acquainted with other plotting or CAS softwares, but it will be interesting to know if they support this out of the box
So, to repeat the main question, how to draw similar graphs, preferably without managing the plotting code yourself ?
The solution must be generic enough like plot to be applied to other equations.
[ The question was heavily edited from a sympy-specific question ]
Only for some functions with specific conditions you can plot thus in Maple. In Python (using matplotlib, sympy or any other packages) or Matlab you need to create code to manage that (assuming values and then replace ticks with literal ticks).

Is there any way of annotating multiple plots using arrows with code in MATLAB?

When doing multiple plots on the same figure in MATLAB, is there any way of annotating them such that the legend entries have arrows pointing to the plots that they're named for?
Here's an example of what I have in mind. I'd like to do this using code.
Note that the MATLAB website mentions a way to do this using the annotation function. The problem with that function is that it takes x and y values (normalized for the plot) and puts the text there. Given that I am not certain where the datapoints will lie, this is unhelpful for what I want to do.
I don't mind if the text shows up at a random place, actually. What's important is to have an arrow or some way of pointing to the plot that it is referencing.
Take a look at the following Math works file exchange post:
http://www.mathworks.co.uk/matlabcentral/fileexchange/10656-data-space-to-figure-units-conversion
The code given here allows you to convert between data-space units and normalised figure units. The example given in the post seems to be doing almost exactly what you are asking.