Solutions
Task 1.1
a = (28.5*(3^3)-sqrt(1500))/((11^2)+3.73)
c = 23 * (-8+(sqrt(607)/3)) + (40/7 + (4.7)^2)^2
e = (24 + (4.5)^3)/((exp(1))^(4.4)-log10(12560))
g = cos(5*pi/6)*(sin(7*pi/8))^2 + (tan((pi/2)*log(8)))/(sqrt(7)+2)
Task 1.2
a = -9.3;
b = 1.85;
c = a/b;
d = 0.5*(c*b+2*a);
s1 = d - (a+b)/c + ((a+b)^2)/sqrt(abs(a*b*c))
s2 = log((c-d)*(b-a)) + (a+b+c+d)/(a-b-c-d)
Task 1.3
bmi_a1 = 17.8;
if bmi_a1 < 18.5
a1 = -1;
elseif bmi_a1 > 24.9
a1 = 1;
else a1 = 0
end
bmi_a2 = 24;
if bmi_a2 < 18.5
a2 = -1;
elseif bmi_a2 > 24.9
a2 = 1;
else a2 = 0
end
Task 1.4
result = 0;
for n = 4:97
if rem(n,4) == 0
disp(n)
result = result + sqrt(n);
end
Task 1.5
balance = 3000;
for n = 1:25
balance = balance*(1.06);
end
Task 1.6
balance = 2000;
for n = 1:30
if balance > 10000
balance = balance*(1.09);
else balance = balance*(1.07)
end
end
Task 1.7
savings = 0;
years = -1;
while savings < 1000000
savings = savings*(1.09) + 5000;
years = years + 1;
end
Task 1.8
m = 0;
last_instalment = 0;
loan = 22000;
while loan > 0
loan = loan*(1.005);
loan = loan - 300;
m = m + 1;
end
last_instalment = loan + 300;
% When the loan is 220000, Matlab runs into an infinite loop as the monthly payment cannot compensate for the extra loan generated by interest rate. The loan keeps growing bigger, and Gomez can never pay off his loan.
Task 2.1
a = [6, 8*3, 81, (exp(1))^(2.5), sqrt(65), sin(pi/3), 23.05];
b = [44, 9, log(51), 2^3, 0.1, 5*tand(25)];
c = 0:3:42;
d = (18:-4:2)';
e = linspace(3, -36, 14)';
Task 2.2
t = linspace(0, 2*pi, 100);
a = log(2 + t + t.^2);
b = (exp(1).^t).*(1 + cos(3.*t));
c = cos(t).^2 + sin(t).^2;
Task 2.3
R = 8.31;
n = 0.1;
T = (0:1:100)+273;
V = (500:10:2500)./(10^6);
P1 = (n*R*(50+273))./V;
P2 = (n*R.*T)/(1500/(10^6));
Task 2.4
x = [5 3 0 7 9 5 7 4 0 4 2 7];
a = x+16;
x(1:2:end) = x(1:2:end) + 3;
c = sqrt(x);
d = x.^2;
Task 2.5
A = [ 12 13 13 14 16 14 15 12 13 12];
H = [143 158 161 150 159 159 150 144 157 137];
W = [ 39 48 49 42 51 51 47 31 43 31];
mean_ahw = [mean(A); mean(H); mean(W)];
n150 = length(H(H>150));
mw13 = mean(W(A<=13));
ntall = length(A(H>mean_ahw(2,1) & W<mean_ahw(3,1)));
if A(H>=max(H)) == max(A)
age_height_check = true;
else
age_height_check = false;
end
Task 2.6
A = [ 12 13 13 14 16 14 15 12 13 12];
H = [143 158 161 150 159 159 150 144 157 137];
W = [ 39 48 49 42 51 51 47 31 43 31];
D = [A; H; W]';
mean_ahw = [mean(D(:,1)); mean(D(:,2)); mean(D(:,3))];
n150 = length(D((D(:,2)>150)));
mw13 = mean(D(D(:,1)<=13,3));
ntall = length(D((D(:,2)>mean_ahw(2,1)) & (D(:,3)<mean_ahw(3,1)),1));
if D(((D(:,2)>=max(D(:,2)))),1) == max(D(:,1))
age_height_check = true;
else
age_height_check = false;
end
Task 2.7
x = [5 3 8 6 9 1 4 7];
MyMax = x(1);
MyMin = x(1);
for i = x(2:end)
if i>MyMax
MyMax = i;
elseif i<MyMin
MyMin = i;
end
end
Task 2.8
a = sum(1:1:1000);
bb = 501:1:1000;
b = sum(bb(2:2:end)) + sum(bb(1:2:end).^2);
cc = 1:2:1000;
c = sum(cc(1:2:end).^2) + sum((cc(2:2:end).^2).*-1);
Task 3.1
x = linspace(1.5,3.5,200);
y = (-1/3).*(x-2).*(x-2.5).*(x/2-2.75).*(x/5-3.25).*(x-4) - 1.45;
z = [1 1.5 2 1.5 1];
t = [3 5 3 1 3];
figure;
plot(x,y,'g');
hold on
plot(z,t,'r');
hold off
xlim([0 4]);
ylim([-2 6]);
Task 3.2
load Data_AHW_big.mat
G = D(D(:,1)<=1,:);
B = D(D(:,1)>=2,:);
Ngirls = length(G);
Nboys = length(B);
N = [Ngirls Nboys];
Mgirls = [mean(G(:,2)) mean(G(:,3)) mean(G(:,4))];
Mboys = [mean(B(:,2)) mean(B(:,3)) mean(B(:,4))];
M = [Mgirls; Mboys];
if Mgirls(2) < Mboys(2)
compH = true;
else
compH = false;
end
if Mgirls(3) < Mboys(3)
compW = true;
else
compW = false;
end
GirlsH = [];
GirlsW = [];
BoysH = [];
BoysW = [];
for x = 11:17
GirlsH = [GirlsH; mean(G(G(:,2)>=x & G(:,2)<(x+1),3))];
GirlsW = [GirlsW; mean(G(G(:,2)>=x & G(:,2)<(x+1),4))];
BoysH = [BoysH; mean(B(B(:,2)>=x & B(:,2)<(x+1),3))];
BoysW = [BoysW; mean(B(B(:,2)>=x & B(:,2)<(x+1),4))];
end
CompAgeH = [];
CompAgeW = [];
for i = 1:length(GirlsH)
if GirlsH(i,1) < BoysH(i,1)
CompAgeH = logical([CompAgeH; true]);
else
CompAgeH = logical([CompAgeH; false]);
end
if GirlsW(i,1) < BoysW(i,1)
CompAgeW = logical([CompAgeW; true]);
else
CompAgeW = logical([CompAgeW; false]);
end
end
Task 3.3
load Data_AHW_big.mat
G = D(D(:,1)<=1,:);
B = D(D(:,1)>=2,:);
figure
axis([min(D(:,3)) max(D(:,3)) min(D(:,4)) max(D(:,4))])
subplot(1,2,1)
scatter(G(:,3), G(:,4), "b.")
xlabel('height')
ylabel('weght')
title('Girls')
subplot(1,2,2)
scatter(B(:,3), B(:,4), "b.")
xlabel('height')
ylabel('weght')
title('Boys')
figure
scatter(G(:,3), G(:,4), "m*"); hold on
scatter(B(:,3), B(:,4), "bo")
axis([min(D(:,3)) max(D(:,3)) min(D(:,4)) max(D(:,4))])
title('Girls and boys')
legend('Girls','Boys')
GirlsH = [];
GirlsW = [];
BoysH = [];
BoysW = [];
for x = 11:17
GirlsH = [GirlsH; mean(G(G(:,2)>=x & G(:,2)<(x+1),3))];
GirlsW = [GirlsW; mean(G(G(:,2)>=x & G(:,2)<(x+1),4))];
BoysH = [BoysH; mean(B(B(:,2)>=x & B(:,2)<(x+1),3))];
BoysW = [BoysW; mean(B(B(:,2)>=x & B(:,2)<(x+1),4))];
end
age = 11:1:17;
figure
tiledlayout(2,1);
nexttile
plot(age, GirlsH, 'm-o'); hold on
plot(age, BoysH, 'b-s'); hold off
legend('Girls','Boys')
xlabel('Age')
ylabel('Height')
axis tight
nexttile
plot(age, GirlsW, 'm-o'); hold on
plot(age, BoysW, 'b-s'); hold off
legend('Girls','Boys')
xlabel('Age')
ylabel('Weight')
axis tight
Task 3.4
data = [ 75 67 43 56 78 49 66 72 120
164 168 152 169 170 157 167 181 170];
figure
grid on
hold on
axis tight
for i = 1:length(data)
bmi = data(1,i)/((data(2,i)/100)^2);
if bmi>= 18.5 && bmi<=24.9
plot(data(2,i), data(1,i), "g*");
elseif bmi<18.5
plot(data(2,i), data(1,i), "b*");
else
plot(data(2,i), data(1,i), "r*");
end
end
hold off
xlabel('Height [m]')
ylabel('Weight [kg]')
Task 3.5
R = 8.31;
n = 0.1;
T2 = (0:1:100)+273;
V1 = (500:10:2500)./(10^6);
P1 = (n*R*(50+273))./V1;
P2 = (n*R.*T2)/(1500/(10^6));
figure
subplot(2,1,1)
plot(V1, P1, 'b');
xlabel('Volume [m^3]')
ylabel('Pressure [Pa]')
axis tight
grid on
subplot(2,1,2)
plot(T2, P2, 'b');
xlabel('Temperature [K]')
ylabel('Pressure [Pa]')
axis tight
grid on
Task 3.6
x = linspace(-2,2,50);
y = sin(2.*x).*exp(x-4);
a = randi(50,1,10);
figure
axis tight
plot(x,y, "k"); hold on
for i = 1:10
plot(x(a(i)),y(a(i)),'r.')
end
grid on
title('Random samples')
xlabel('x')
ylabel('y')
legend('y = sin(2x)exp(x-4)','Randomly sampled points')
legend('Location','south')
Task 4.1
v = [10 6 -9 4 0 2 0 -1 3 0 0 -4 -6 2];
nP = 0;
nN = 0;
nZ = 0;
for i = v
if i > 0
nP = nP + 1;
elseif i < 0
nN = nN + 1;
else
nZ = nZ + 1;
end
end
Task 4.2
v = [10 6 -9 4 0 2 0 -1 3 0 0 -4 -6 2];
nP = sum([double(v(1:end) > 0)]);
nN = sum([double(v(1:end) < 0)]);
nZ = sum([double(v(1:end) == 0)]);
Task 4.3
balance = 2000;
balanceV = [balance];
years = 0:1:30;
for n = 1:30
if balance > 10000
balance = balance*(1.09);
else
balance = balance*(1.07);
end
balanceV = [balanceV balance];
end
figure
plot(years, balanceV, "s-");
axis tight
xlabel("Years");
ylabel("Balance");
Task 4.4
m = 0;
loan = 22000;
loanV = loan;
instalmentV = 0;
while loan > 0
loan = loan*(1.005);
loan = loan - 300;
instalmentV = [instalmentV 300];
loanV = [loanV loan];
m = m + 1;
end
months = 0:1:m;
last_instalment = loan + 300;
loanV(end) = 0;
instalmentV(end) = last_instalment;
figure
bar(instalmentV, "r"); hold on
plot(months, loanV, "b.-")
axis tight
xlabel("months")
legend("instalments","loan balance")
Task 4.5
load WashingtonApril2002Temp.mat;
figure
h(1) = plot(T,"k-"); hold on
l = gobjects();
h(2) = yline(mean(T),"g",LineWidth=2);
for i = 1:length(T)
if T(i) >= mean(T)*1.1
h(3) = plot(i,T(i),"r*",MarkerSize=7);
elseif T(i) <= mean(T)*0.9
h(5) = plot(i,T(i),"b*",MarkerSize=7);
elseif T(i)
h(4) = plot(i,T(i),"g*",MarkerSize=7);
end
if T(i) == max(T)
h(6) = plot(i,T(i),"ro",MarkerSize=10);
line([i;i],[mean(T);max(T)],"Color","red","LineStyle",":","LineWidth",1);
line([0;i],[max(T);max(T)],"Color","red","LineStyle",":","LineWidth",1);
end
if T(i) == min(T)
h(7) = plot(i,T(i),"bo",MarkerSize=10);
line([0;i],[min(T);min(T)],"Color","blue","LineStyle",":","LineWidth",1);
line([i;i],[min(T);mean(T)],"Color","blue","LineStyle",":","LineWidth",1);
end
end
line()
h(9) = yline(mean(T)*0.9,"b--");
h(8) = yline(mean(T)*1.1,"r--");
axis tight
grid on
ylim([min(T)-5 max(T)+5]);
xlabel("days");
ylabel("temperatures");
legend(h([1 2 3 4 5 6 7 8 9]),"daily temperatures","average temperature","high temperature","moderate temperature","low temperature","maximal temperature","minimal temperature","high temperature limit","low temperature limit");
Task 5.1
function [months, balance] = savings(deposit, interest, goal)
balance = 0;
months = -1;
while balance < goal
balance = balance*(1+interest) + deposit;
months = months + 1;
end
Task 5.2
function distance = distanceCalculator(x,y)
v = [];
for i=1:length(x)
v = [v (x(i)-y(i))^2];
end
distance = sqrt(sum(v));
end
Task 5.3
pointX = [1 2 5 7 9 8 0 6 8 6];
pointY = [4 3 3 5 6 2 1 5 5 3];
adp = [4.5,4];
D = [];
for i=1:length(pointX)
plot(pointX(i), pointY(i), "k.",MarkerSize=10); hold on
D = [D distanceCalculator([pointX(i) pointY(i)], adp)];
end
plot(adp(1),adp(2),"rx",MarkerSize=10);
for i=1:length(D)
if D(i) == min(D)
plot(pointX(i), pointY(i), "ro",MarkerSize=12);
end
end
function distance = distanceCalculator(x,y)
distance = sqrt((x(1)-y(1))^2 + (x(2)-y(2))^2);
end
Task 5.4
function result = isInsideSquare(x,y,a,b,s)
if x<=(a+s) && y<=(b+s) && x>=a && y>=b
result = true;
else
result = false;
end
end
Task 5.5
function result = isInsideSquare2(point,corner,s)
if point(1)<=(corner(1)+s) && point(2)<=(corner(2)+s) && point(1)>=corner(1) && point(2)>=corner(2)
result = true;
else
result = false;
end
end
Task 5.6
point1 = [3 3];
corner1 = [1 2];
s1 = 4;
point2 = [2 3];
corner2 = [3 4];
s2 = 1;
figure
axis square
line([corner1(1) corner1(1)],[corner1(2) corner1(2)+s1]); hold on
line([corner1(1) corner1(1)+s1],[corner1(2)+s1 corner1(2)+s1]);
line([corner1(1)+s1 corner1(1)+s1],[corner1(2)+s1 corner1(2)]);
line([corner1(1)+s1 corner1(1)],[corner1(2) corner1(2)]);
if isInsideSquare(point1, corner1, s1)
plot(point1(1), point1(2), "g.",MarkerSize=10);
else
plot(point1(1), point1(2), "rx",MarkerSize=10);
end
xlim([0 8])
ylim([0 8])
figure
axis equal
line([corner2(1) corner2(1)],[corner2(2) corner2(2)+s2]); hold on
line([corner2(1) corner2(1)+s2],[corner2(2)+s2 corner2(2)+s2]);
line([corner2(1)+s2 corner2(1)+s2],[corner2(2)+s2 corner2(2)]);
line([corner2(1)+s2 corner2(1)],[corner2(2) corner2(2)]);
if isInsideSquare(point2, corner2, s2)
plot(point2(1), point2(2), "g.",MarkerSize=10);
else
plot(point2(1), point2(2), "rx",MarkerSize=10);
end
xlim([0 6])
ylim([0 6])
function result = isInsideSquare(point,corner,s)
if point(1)<=(corner(1)+s) && point(2)<=(corner(2)+s) && point(1)>=corner(1) && point(2)>=corner(2)
result = true;
else
result = false;
end
end
Task 6.1
load NYSEstock.mat;
s1high = length(stock1(stock1(:,5)>stock2(:,5)));
s1low = length(stock1(stock1(:,5)<stock2(:,5)));
s1ret = diff(stock1(:,5));
s2ret = diff(stock2(:,5));
if mean(s1ret)>mean(s2ret)
mret = 1;
else
mret = 2;
end
if max(s1ret)>max(s2ret)
dret = 1;
else
dret = 2;
end
plot(stock1(:,5),"r"); hold on
plot(stock2(:,5),"b"); hold off
plot(s1ret,"r"); hold on
plot(s2ret,"b"); hold off
Task 6.2
function [equal, higher, lower, highest, lowest] = stockAnalyzer(stock)
equal = [];
higher = [];
lower = [];
highest = [];
lowest = [];
temp1 = sort(stock(:,6),"descend");
temp2 = temp1(end-99:end);
temp1 = temp1(1:100);
for i=1:length(stock)
if stock(i,2) == stock(i,5)
equal = [equal; i];
elseif stock(i,2) > stock(i,5)
higher = [higher; i];
else
lower = [lower; i];
end
if ismember(stock(i,6),temp1)
highest = [highest; i];
elseif ismember(stock(i,6),temp2)
lowest = [lowest; i];
end
end
end
Task 6.3
load NYSEstock.mat
[a b c d e] = stockAnalyzer(stock2);
figure
hold on
plot(stock2(:,5),"k-");
for i=1:length(stock2)
if ismember(i,a)
plot(i,stock2(i,5),"g.",MarkerSize=5);
elseif ismember(i,b)
plot(i,stock2(i,5),"b.",MarkerSize=5);
elseif ismember(i,c)
plot(i,stock2(i,5),"r.",MarkerSize=5);
end
end
xlabel("days");
ylabel("closing price");
figure
hold on
plot(stock2(:,6),"k-");
for i=1:length(stock2)
if ismember(i,d)
plot(i,stock2(i,6),"r.",MarkerSize=5);
elseif ismember(i,e)
plot(i,stock2(i,6),"b.",MarkerSize=5);
end
end
xlabel("days");
ylabel("trading volume");
figure
hold on
scatter(stock2(:,5),stock2(:,6));
xlabel("closing price");
ylabel("trading volume");
function [equal, higher, lower, highest, lowest] = stockAnalyzer(stock)
equal = [];
higher = [];
lower = [];
highest = [];
lowest = [];
temp1 = sort(stock(:,6),"descend");
temp2 = temp1(end-99:end);
temp1 = temp1(1:100);
for i=1:length(stock)
if stock(i,2) == stock(i,5)
equal = [equal; i];
elseif stock(i,2) > stock(i,5)
higher = [higher; i];
else
lower = [lower; i];
end
if ismember(stock(i,6),temp1)
highest = [highest; i];
elseif ismember(stock(i,6),temp2)
lowest = [lowest; i];
end
end
end
Task 6.4
Tree5 = buildTree(5);
Tree11 = buildTree(11);
function Tree = buildTree(x)
N = x;
n = N-3;
left = '/';
right = '\';
star = '*';
Tree = [repmat('-',1,2*n-1),
repmat(' ',1,n-1) 'I' repmat(' ',1,n-1),
repmat(' ',1,n-1) 'U' repmat(' ',1,n-1)];
for k = n:-1:1
spaces = repmat(' ',1,n-k);
layer = [];
if k == 1
layer = [layer star];
else
for l = 1:2*k-1
if l==1
layer = [layer left];
elseif l==k*2-1
layer = [layer right];
else
layer = [layer star];
end
end
end
Layer = [spaces layer spaces];
Tree = [Layer; Tree];
end
end
Exam 1
Let x = [3 16 9 12 -1 0 -12 9 6 1]. Provide the command(s) that will:
- set values that are multiples of 3 to 3 (make use of rem - for instance a number n is a multiple of 5 if rem(n,5) equals to 0);
- extract the values of x that are greater than 10 into a vector called y;
- set the values in x that are less than the mean to 0;
- set the values in x that are above the mean to their difference from the mean.
Write your code is such a way that it works for any vector x.
x = [3 16 9 12 -1 0 -12 9 6 1];
% The instructions did not specifiy if the mean should be calculated based
% on the original x or the modified x, so in my solutions will recalculate
% the mean whenever a element of x changes.
% set values that are multiples of 3 to 3
for i=1:length(x)
if rem(x(i),3) == 0
x(i)=3;
end
end
% extract the values of x that are greater than 10 into a vector called y
y = x(x>=10);
% set the values in x that are less than the mean to 0
for i=1:length(x)
mean(x)
if x(i) < mean(x)
x(i)=0;
end
end
% set the values in x that are above the mean to their difference from the mean
for i=1:length(x)
if x(i) > mean(x)
x(i)=x(i)-mean(x);
end
end
Exam 2
Task 1
Write a script that will use the random-number generator rand to determine:
- the number of random numbers it takes before a number between 0.6 and 0.7 occurs;
- the number of random numbers it takes before the mean of those numbers is within 0.01 and 0.5
If you simply type x=rand, x will be one randomly generated number from interval [0,1].\
% n1 is the number of random numbers it takes before a number between 0.6
% and 0.7 occurs
v1 = [];
while true
x=rand;
if x>=0.6 && x<=0.7
% break the loop if the randomly generated number is between 0.6
% and 0.7
break;
else
% otherwise add the number to vector v1
v1 = [v1 x];
end
end
% assign length of vector v1 to n1
n1 = length(v1);
% n2 is the number of random numbers it takes before the mean of those
% numbers is within 0.01 and 0.5
v2 = [];
while true
if mean(v2)>=0.01 && mean(v2)<=0.5
% break the loop if the mean of previously generated numbers are
% between 0.01 and 0.5, this equals to 0 during the first iteration
% of the loop
break;
else
% otherwise add the number to vector v2
y=rand;
v2 = [v2 y];
end
end
% assign length of vector v2 to n2
n2 = length(v2);
Task 2
Write a script that for any given integer n and computes the following:
- as long as the value of n is greater than 1 (notice this will require while-loop), replace n with (n/2) if the integer is even,
- otherwise, replace n with (3n + 1).
Make the code count the number of values in (or the length of) the sequence that results. For instance, if n = 10, the sequence of integers is 5, 16, 8, 4, 2, 1, so the length is 6.
Then loop the script in such a way that it runs the algorithm for all n from 2 to 100, collects the respective sequence lengths into a vector.
Plot that vector.
% vector v is used to stored sequence lengths
v = [];
for n=2:100
a = [];
while n>1
if rem(n,2) == 0
% replace n with (n/2) if the integer is even
n = n/2;
else % otherwise replace n with (3n + 1)
n = 3*n + 1;
end
% add n to placeholder vector a
a = [a n];
end
% add the length of vector a to vector v
v = [v length(a)];
end
% plot the sequence lengths using vector v
plot(v)
Exam 3
Task 1
Write a code which will calculate the total electricity bill respective to the total consumption, following the charges:
- For first 50 units respective price 0.50/unit
- For next 100 units respective price 0.75/unit
- For next 100 units respective price 1.20/unit
- For unit above 250 respective price 1.50/unit
Using the following piece of code round(400*rand(20,1)) generate twenty random consumption values (note they will range between 0 and 400), and calculate their respective total bills.
Then plot them as points, in such a way that x axis contains just given consumption's index (location in the consumption vector), and y axis contains the consumption value, but each of the four categories is shown with a distinct marker style.
% create vector of random consumption values
consumption = round(400*rand(20,1));
% bill vector stores the respective total bill of each consumption value
bill = [];
% open figure in fullscreen and enable retaining current plot
figure('units','normalized','outerposition',[0 0 1 1])
hold on
% start loop to iterate thorugh consumption values
for i=1:length(consumption)
% start if-else to calculate the bill and plot the graph
if consumption(i) > 250
bill = [bill; 50*0.5 + 100*0.75 + 100*1.2 + (consumption(i)-250)*1.5];
plot(i,consumption(i),"r*");
elseif consumption(i) > 150
bill = [bill; 50*0.5 + 100*0.75 + (consumption(i)-150)*1.2];
plot(i,consumption(i),"bo");
elseif consumption(i) > 50
bill = [bill; 50*0.5 + (consumption(i)-50)*0.75];
plot(i,consumption(i),"gs");
else
bill = [bill; consumption(i)*0.5];
plot(i,consumption(i),"k.");
end
% add the bill of the consumption value next to the plotted point; this
% was not required but because I calculated the bill already, why not
% use it?
text(i+0.1,consumption(i),string(bill(i)));
end
% add labels to the graph
xlabel("index");
ylabel("consumption values");
Task 2
Given an array AN×3 (that is, array A which is sized N by 3), we draw N discs in a 2D plane. In the array A, the first column represents the x coordinate of the center of each disc, the second column represents the y coordinate of the center of each disc, and the third column contains the radius of the disc.
Create a Matlab code which draws all the discs defined by array A, where the biggest disc(s) (with biggest radius) is drawn in red, the smallest one(s) is drawn in green, and the remaining ones in blue. Plot also the circle centers (with color respective to the circle itself) as points with marker size equal 5.
-
Set the plot axis so that the circles are actually circles (not flattened to ellipses).
-
Use Help to learn how to add text into the figure (in figure area, not titles or labels). Then add circle center coordinates for all circles in the figure in form (x0,y0) next to all circle centers.
Test your code on an array A containing at least 3 different discs. An example output for array A = [0 0 2; 2 0 1; 4 4 5] should look as presented in figure below.
% create array A
A = [0 0 2; 2 0 1; 4 4 5] ;
% vector t ∈ [0,2π]
t = 0:pi/50:2*pi;
% open figure in fullscreen, enable retaining current plot, and make axes
% into equal length
figure('units','normalized','outerposition',[0 0 1 1])
hold on
axis square
% iterate through all elements of A
for i=1:length(A)
% check if the element has the biggest radius, and draw the circle
% and the center point in red
if A(i,3) == max(A(:,3))
plot((A(i,3) * cos(t) + A(i,1)),(A(i,3) * sin(t) + (A(i,2))),"r-");
plot(A(i,1),A(i,2),"r.",MarkerSize=5);
% check if the element has the smallest radius, and draw the circle
% and the center point in green
elseif A(i,3) == min(A(:,3))
plot((A(i,3) * cos(t) + A(i,1)),(A(i,3) * sin(t) + (A(i,2))),"g-");
plot(A(i,1),A(i,2),"g.",MarkerSize=5);
% other elements will be drawn in blue
else
plot((A(i,3) * cos(t) + A(i,1)),(A(i,3) * sin(t) + (A(i,2))),"b-");
plot(A(i,1),A(i,2),"b.",MarkerSize=5);
end
% add coordinates to cirle center
text(A(i,1)+0.15,A(i,2),'('+string(A(i,1))+","+string(A(i,2))+')');
end