# Complex Numbers

12 replies to this topic

### #1 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus

Posted 28 October 2006 - 11:12 PM

require("cas")
m=input()
a=input()
t=m*cas.cos(a)+m*cas.sin(a)*i
--the "i" is the representacion of complex number
print(t)

how can I work on complex number and how can I setdegree or setradian??

Thanks.

### #2 vanhoa

vanhoa

Casio Overlord

• Members
• 854 posts
• Gender:Male
• Location:Vietnam

• Calculators:
AFX 2.0, CP 300, CP 330, nSpire, TI 89, FX 5800

Posted 29 October 2006 - 04:02 AM

```require("cas")
m=input()
a=input()
t=m*cas.cos(a)+m*cas.sin(a)*cas("i")
print(t)```

You must set mode to complex.

### #3 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus

Posted 29 October 2006 - 04:41 AM

CpLua have the function re( or im(, which means real part of the complex and the no-real part of the complex?

Is there something like SetDegree or SetRadian on CpLua?

### #4 vanhoa

vanhoa

Casio Overlord

• Members
• 854 posts
• Gender:Male
• Location:Vietnam

• Calculators:
AFX 2.0, CP 300, CP 330, nSpire, TI 89, FX 5800

Posted 29 October 2006 - 04:47 AM

The functions math.deg and math.rad convert between radians and degrees. print(math.deg(4*math.atan(1))) return 180 for example.

### #5 Kilburn

Kilburn

Casio Technician

• Members
• 491 posts
• Gender:Male
• Location:France
• Interests:Blah

• Calculators:
FX-7500 G

Posted 29 October 2006 - 08:33 PM

I made a simple lib that handles complex numbers and allows to make simple operations on them (+ - * / ^) :

```cplx={
_mt={
__index={
re=0,
im=0,
set=function(u,r,i)
u.re,u.im=r,i
end,
__type="cplx",
},
a,b=u1,u2
if type(a)=="table" and type(b)=="table" then
return cplx(a.re+b.re,a.im+b.im)
else
if type(u1)=="number" then
return cplx(u2.re+u1,u2.im)
elseif type(u2)=="number" then
return cplx(u1.re+u2,u1.im)
end
end
end,
__sub=function(u1,u2)
a,b=u1,u2
if type(a)=="table" and type(b)=="table" then
return cplx(a.re-b.re,a.im-b.im)
else
if type(u1)=="number" then
return cplx(u1-u2.re,u2.im)
elseif type(u2)=="number" then
return cplx(u1.re-u2,u1.im)
end
end
end,
__mul=function(u1,u2)
a,b=u1,u2
if type(a)=="table" and type(b)=="table" then
return cplx(-u1.im*u2.im+u1.re*u2.re,u1.im*u2.re+u1.re*u2.im)
else
if type(u1)=="number" then
return cplx(u2.re*u1,u2.im*u1)
elseif type(u2)=="number" then
return cplx(u1.re*u2,u1.im*u2)
end
end
end,
__div=function(u1,u2)
a,b=u1,u2
if type(a)=="table" and type(b)=="table" then
return cplx((u1.im*u2.im)/(u2.im^2+u2.re^2)+(u1.re*u2.re)/(u2.im^2+u2.re^2),(u1.im*u2.re)/(u2.im^2+u2.re^2)-(u1.re*u2.im)/(u2.im^2+u2.re^2))
else
if type(u1)=="number" then
return cplx((u2.re*u1)/(u2.im^2+u2.re^2),(-u1*u2.im)/(u2.im^2+u2.re^2))
elseif type(u2)=="number" then
return cplx(u1.re/u2,u1.im/u2)
end
end
end,
__pow=function(u1,u2)
a,b=u1,u2
if type(a)=="table" and type(b)=="table" then
return cplx(math.exp(u2.im*(math.atan(u1.re*(u1.im)^(-1))-((math.pi*math.sign(u1.im))/(2))))*((u1.im)^(2)+(u1.re)^(2))^(((u2.re)/(2)))*math.cos(((u2.im*math.log((u1.im)^(2)+(u1.re)^(2)))/(2))-u2.re*(math.atan(((u1.re)/(u1.im)))-((math.pi*math.sign(u1.im))/(2)))),math.exp(u2.im*(math.atan(u1.re*(u1.im)^(-1))-((math.pi*math.sign(u1.im))/(2))))*((u1.im)^(2)+(u1.re)^(2))^(((u2.re)/(2)))*math.sin(((u2.im*math.log((u1.im)^(2)+(u1.re)^(2)))/(2))-u2.re*(math.atan(((u1.re)/(u1.im)))-((math.pi*math.sign(u1.im))/(2)))))
else
if type(u1)=="number" then
return cplx((u1)^(u2.re)*math.cos(u2.im*math.log(u1)),(u1)^(u2.re)*math.sin(u2.im*math.log(u1)))
elseif type(u2)=="number" then
return cplx(((u1.im)^(2)+(u1.re)^(2))^(((u2)/(2)))*math.cos(u2*(math.atan(((u1.re)/(u1.im)))-((math.pi*math.sign(u1.im))/(2)))),-((u1.im)^(2)+(u1.re)^(2))^(((u2)/(2)))*math.sin(u2*(math.atan(((u1.re)/(u1.im)))-((math.pi*math.sign(u1.im))/(2)))))
end
end
end,
__unm=function(u)
return cplx(-u.re,-u.im)
end,
__tostring=function(u)
local r,i="",""
if math.abs(u.re)~=1 then
r=u.re
elseif u.re==-1 then r="-"
end
if math.abs(u.im)~=1 then
i=u.im
elseif u.im==-1 then i="-"
end
if u.re==0 then
return i.."i"
elseif u.im>0 then
return r.."+"..i.."i"
elseif u.im<0 then
return r..i.."i"
else
return r
end
end,
__concat=function(u1,u2)
if type(u1)==type(u2) then
return cplx._mt.__tostring(u1)..cplx._mt.__tostring(u2)
elseif type(u1)=="table" then
return cplx._mt.__tostring(u1)..u2
else
return u1..cplx._mt.__tostring(u2)
end
end
}
}
setmetatable(cplx,{
__call=function(u,r,i)
o={}
setmetatable(o,cplx._mt)
o:set(r or 0,i or 0)
return o
end
})

export{cplx=cplx}```

It's very simple to use:
```require("cplx") -- supposing you saved the lib in "cplx"

m=input()
a=input()
t=cplx(math.cos(a),math.sin(a))
print(t)
print("Real part:"..t.re)
print("Imaginary part:"..t.im)

--Operations on t
print("t+8="..t+8)
print("t+3i="..t+cplx(0,3))
print("t+6-2i="..t+cplx(6,-2))
print("t^2="..t^2)```

### #6 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus

Posted 30 October 2006 - 03:35 AM

Killburn I tried your code but it didn?t run well.

My question is why do you store something in the variable m

You write this:

require("cplx") -- supposing you saved the lib in "cplx"

m=input()
a=input()
t=cplx(math.cos(a),math.sin(a))
......

if the user put the i while he/she runs the program how can the program knows that the i is the representation of the complex numbers??????

On Basic i can write

SetComplex
Input x,"input complex number:"
print(x+(2+2i))

Basic already know if the user uses the i on the keyboard of the CP300

Thanks

### #7 Kilburn

Kilburn

Casio Technician

• Members
• 491 posts
• Gender:Male
• Location:France
• Interests:Blah

• Calculators:
FX-7500 G

Posted 30 October 2006 - 08:56 AM

Ah, yes I don't know why I put "input(m)", it's totally useless. And you can't actually input a complex number using input(), I'm supposing you are entering a real number for a...

### #8 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus

Posted 30 October 2006 - 09:26 PM

I have CpLua 0.9 and I wrote this

require("cas")
x=cas(input("COMPLEX NUMBER 1:"))
y=cas(input("COMPLEX NUMBER 2:"))
m=cas.compToPol(x+y)
print("x:".. cas.approx(x) .. "y:" .. cas.approx(y) .. "\n\nTotal:\n" .. (m))

My question about this code is: why CpLua show compToPol as string and then show the number as polar.?

I need just the number as polar not compToPol as string.?

### #9 vanhoa

vanhoa

Casio Overlord

• Members
• 854 posts
• Gender:Male
• Location:Vietnam

• Calculators:
AFX 2.0, CP 300, CP 330, nSpire, TI 89, FX 5800

Posted 31 October 2006 - 01:02 AM

require("cas")
x=cas(input("COMPLEX NUMBER 1:"))
y=cas(input("COMPLEX NUMBER 2:"))
m=cas.compToPol(x+y)
u=m()
print("x:".. cas.approx(x) .. "y:" .. cas.approx(y) .. "\n\nTotal:\n" .. (u))

### #10 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus

Posted 31 October 2006 - 09:21 PM

vanhoa

I writed u=m(), but CpLua show me

"Runtime Error:
main:7: attempt to concatenate global 'u' (a nil value)"

### #11 vanhoa

vanhoa

Casio Overlord

• Members
• 854 posts
• Gender:Male
• Location:Vietnam

• Calculators:
AFX 2.0, CP 300, CP 330, nSpire, TI 89, FX 5800

Posted 01 November 2006 - 12:02 PM

What??? Nothing with me...

### #12 vanhoa

vanhoa

Casio Overlord

• Members
• 854 posts
• Gender:Male
• Location:Vietnam

• Calculators:
AFX 2.0, CP 300, CP 330, nSpire, TI 89, FX 5800

Posted 03 November 2006 - 03:14 AM

Sorry, Im wrong... In place of compToPol(x+y),

a,b=cas.abs(x+y),cas.arg(x+y)

can solve that problem.

### #13 Colombia

Colombia

• Members
• 94 posts
• Gender:Male
• Location:Venezuela

• Calculators:
algebra FX 2.0 plus