# Convert decimal and negative values ​​to integers

1 Ansicht (letzte 30 Tage)
Lev Mihailov am 4 Jul. 2022
Beantwortet: Rik am 4 Jul. 2022
There are x and y coordinates that I need to convert to integer values ​​while preserving the meaning of the graph
a = 0:pi/100:2*pi;
x=cos(a);
y = sin(x);
plot(x,y) % first graph
% plot(a,y) % second graph
##### 12 Kommentare10 ältere Kommentare anzeigen10 ältere Kommentare ausblenden
Dyuman Joshi am 4 Jul. 2022
Ok. So, What is it that you are trying to do in the first place? How did you come up with the conversions you mentioned above?
Lev Mihailov am 4 Jul. 2022
@Dyuman Joshi take min and max values, create an array, from -5.4 ; 1.2 to 4.5, fill array from 1 to n(up to 4), where 1 is the smallest value and 4 is the maximum

Melden Sie sich an, um zu kommentieren.

### Antworten (2)

Matt J am 4 Jul. 2022
Something like this, perhaps?
a = 0:pi/100:2*pi;
x=cos(a);
y = sin(x);
fcn=@(z)round(rescale(z,0,intmax('uint16')));
plot(fcn(a),fcn(y))
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

Rik am 4 Jul. 2022
Since all your values are between -1 and 1, you need a method to discretize your data to some arbitrary (but repeatable) indices. You have two general options:
1. Have a linear lookup table. This will map all numbers lineraly to the closest integer.
2. Have a non-linear lookup table. This allows you to decide what data ranges should have more precision.
Below I will implement the simplest version of option 1 I can think of. If you want to increase performance, interp1 may be required.
discretize_values([-1 0 1],3)
ans = 1×3
1 2 3
Now we can apply this to your curve. What I show here is how you can set the precision to influence how jagged your graph will look. Set a higher number for a smoother curve. The mapping back to non-integers should of course be removed if you are planning to use this for indexing.
a=linspace(0,2*pi,200);x=cos(a);y=sin(a);
plot(a,y)
hold on
precision=20;
y2=discretize_values(y,precision);
y2=2*((y2-1)/(precision-1))-1; % map back to non-integers
plot(a,y2)
hold off
function out=discretize_values(in,precision)
% map (-1,1) to 1:precision
if any(in>1) || any(in<-1)
error('data outside expected range')
end
out=1+round((precision-1)*(in+1)/2);
end
##### 0 Kommentare-2 ältere Kommentare anzeigen-2 ältere Kommentare ausblenden

Melden Sie sich an, um zu kommentieren.

### Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

R2021a

### Community Treasure Hunt

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

Start Hunting!

Translated by