MATLAB Answers

Why are the values in my matrix being divided by 1e^3?

1 view (last 30 days)
Oscar Zampi
Oscar Zampi on 15 Feb 2021
Commented: Walter Roberson on 15 Feb 2021
Hi, I have the piece of code as shown below, when the matrix A is displayed, each value in it has been divided by 1e^3. I cant seem to figure out why, does anyone have any ideas?
clear all
clc
[ortho, cmap] = imread('Oban.TIF');
ortho = uint16(ortho);
count1 = 0 ;
peaks = zeros([],3) ; % to store i,j,ortho(i,j) in respective columns
sz = size(ortho);
md= median(ortho);
pks = zeros(sz(1),sz(2));
for i =2:sz(1)-1
for j =2:sz(2)-1
if ortho(i-1,j) < ortho(i,j) & ...
ortho(i+1,j-1) < ortho(i,j) & ...
ortho(i,j-1) < ortho(i,j) & ...
ortho(i,j+1) < ortho(i,j)
pks(i,j) = 1;
% fprintf("i=%d j=%d z=%d \n",i,j,ortho(i,j));
count1 = count1+1 ;
peaks(count1,:) = [i j ortho(i,j)] ;
end
end
end
% peaks
rand = randsample(1:length(peaks), 5);
randm = peaks(rand,:);
count2 = 0 ;
A = zeros([],3) ;
for m = 1:5
i = randm(m,1);
j = randm(m,2);
% fprintf('i is %d and j is %d \n',i,j);
R = worldfileread('concord_ortho_w.tfw', 'planar', size(ortho));
figure (5)
mapshow(ortho, cmap, R);
% LINE
Txx = i + 207000 ;
Txy = j + 909000;
Rxx = 210276;
Rxy = 910552;
hold on
h = plot([Txx Rxx],[Txy Rxy], 'b'); %draw line
Dx = Txx - Rxx;
Dy = Txy - Rxy;
Dsq = Dx^2 + Dy^2;
Dp = sqrt(Dsq);
Dm = Dp*25;
Dkm = Dm/1000;
Distance = string(Dkm);
text(Rxx, Rxy, 'Tx','Color','red','FontSize',14)
text(Txx, Txy, Distance,'Color','red','FontSize',14)
x = [Txx Rxx];
y = [Txy Rxy];
N = 20;
xi = linspace(x(1), x(2), N+1); %segment the line into n segments
yi = interp1(x, y, xi, 'linear');
Q = N ;
DistReso = Dm/Q;
plot(xi(2:end-1), yi(2:end-1), 'bp')
Elevationm = zeros(1,Q+1); %before the loop
for P = 1:Q %state values
format long
imag=imread('Oban.tif');
PointPx = Txx + (P*(Rxx-Txx)/N);
PointPy = Txy +(P*(Rxy-Txy)/N);
SubPlotxPRound = round(PointPx);
SubPlotyPRound = round(PointPy);
format long
ElevPx = (PointPx- 207000);
ElevPy = PointPy - 909000;
ElevPxRound = round(ElevPx);
ElevPyRound = round(ElevPy);
Elevationcm = imag(ElevPxRound,ElevPyRound);
Elevationm(1,P+1) = Elevationcm/100;
end
struct_Input = struct;
struct_Input.Frequency = 38000000000; % Frequency to calculate loss at (Hz)
struct_Input.Elevation = Elevationm; % terrain elevation profile, (list of points) (m)
struct_Input.Resolution = DistReso; % terrain input resolution (distance between points) (m)
struct_Input.TX_Height = 50; % Transmit antenna height above ground (m)
struct_Input.RX_Height = 200; % Recieve antenna height above ground (m)
struct_Input.eps = 4; % Soil dielectric
struct_Input.sgm = 50; % Surface conductivity
struct_Input.surfref = 260; % Surface refractivity
struct_Input.Climate = 5; % Climate, 1-Equitorial, 2-Continental Subtropical, 3-Maritime Tropical, 4-Desert
struct_Input.Polarization = 1; % 1 is vertical, 0 is horizontal.
struct_Input.Confidence = 0.95; % confidence for statistical analysis (.01 to .99)
struct_Input.Reliability = 0.9; % Reliability to calculate statistics for (.01 to .99)
myLRobj = CL_Propagation_RF_LR();
% myLRobj.test();
% struct_Output = point_to_point(myLRobj,struct_Input)
TS = 25;
dbloss = 361.6;
RS = TS - dbloss;
NF = -150;
SNR2 = RS - NF;
PL = dbloss;
F = -(0.5 * SNR2) + (0.5 * (PL/Dkm));
fprintf('i is %d, j is %d, fitness is %d. \n',i,j,F)
count2 = count2+1 ;
A(count2,:) = [i j F] ;
end
disp(A);

Answers (1)

Walter Roberson
Walter Roberson on 15 Feb 2021
Give the command
format long g
and disp(A) again. I think you will see the values you expect.
The default set by MATLAB is format short. If you looked very carefully at the very beginning of the output of the display, it would have said
1e3 *
meaning that you were intended to mentally multiply all the displayed values by 1000 .
  2 Comments
Walter Roberson
Walter Roberson on 15 Feb 2021
It's a "feature"
format short is the default because it creates compact output, and a lot of the time people really don't need to know more than 5 digits of precision. 5 digits is good enough most of the time. Unfortunately, the assumption in the display routines is that all rows and columns have the same relative weight, so that if one value is 123456 and another value is 42, that the 42 barely rates a digit of output by comparison. However a lot of the time that doesn't hold, and different columns might have different scales or different starting points and using a common scale factor gives very wrong understandings of the data...

Sign in to comment.

Tags

Community Treasure Hunt

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

Start Hunting!