# Exempting imaginary numbers from the output of an expression using an if statement.

3 visualizzazioni (ultimi 30 giorni)
Julian il 1 Dic 2023
Commentato: Dyuman Joshi il 4 Dic 2023
Coding Heron's formula: If triangle T has sides a,b,c, given that a semiperimeter is s = (a+b+c)/2 then the area of any triangle is .
I am working out the best way(s) to say "Matlab! if any of (s-a), (s-b), (s-c) is < 0, multiply inside the square root by a -1." This way I avoid imaginary numbers in the output and keep the geometry accurate. 3 things came to mind right away, in order of priority: use an if statement, a for loop, or something new entirely!
Here is the brainstorming-
v = [1:25];
a = randi([length(v)])
a = 6
b = randi([length(v)])
b = 9
c = randi([length(v)])
c = 6
P = a + b + c
P = 21
s = P/2
s = 10.5000
% how to s > a,b,c so that imaginary numbers do not happen
check1 = (s-a)
check1 = 4.5000
check2 = (s-b)
check2 = 1.5000
check3 = (s-c)
check3 = 4.5000
if sqrt(s.*(s-a).*(s-b).*(s-c))
check1 <0
check2 <0
check3 <0
AT = sqrt(s.*(-1.*((s-a).*(s-b).*(s-c))))
end
##### 1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Julian il 1 Dic 2023
Modificato: Julian il 1 Dic 2023
Upon further inspection, I noticed that I do not need to break them into cases, and can just refer to the part under the square root within the if statement like so:
AT = sqrt(s.*(s-a).*(s-b).*(s-c))
if s.*(s-a).*(s-b).*(s-c) < 0
AT = sqrt(s.*(-1.*((s-a).*(s-b).*(s-c))))
end
%The new issue is that sometimes I get back a triangle with an area of 0.
%hmm.. Ok - the 0 case is when a = 20, b = 24, and c = 4. Matlab does this
%math: sqrt(24.*(4).*(0).*(16)) = 0

Accedi per commentare.

### Risposta accettata

Chris il 1 Dic 2023
You can take the absolute value of each difference:
AT = sqrt(s.*abs(s-a).*abs(s-b).*abs(s-c));
##### 6 CommentiMostra 4 commenti meno recentiNascondi 4 commenti meno recenti
Paul il 3 Dic 2023
Taking the absolute value of the radicand will lead to incorrect results if the inputs for the "sides" can't be the sides of an actual triangle. The much better approach would be to error check the inputs first using the criterion in @Dyuman Joshi's comment, and then use Heron's fomula only if the inputs define a valid triangle.
Also, there may be interest in this Wikipedia link.
Dyuman Joshi il 4 Dic 2023
@Paul, that is interesting!

Accedi per commentare.

### Categorie

Scopri di più su Programming in Help Center e File Exchange

R2023b

### Community Treasure Hunt

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

Start Hunting!

Translated by