Data update
This commit is contained in:
parent
4d5544505c
commit
4924dd0264
3073 changed files with 55820 additions and 4408 deletions
30
Task/Arithmetic-Complex/ArkScript/arithmetic-complex.ark
Normal file
30
Task/Arithmetic-Complex/ArkScript/arithmetic-complex.ark
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
(import std.Math)
|
||||
|
||||
(let a (math:complex 1 1))
|
||||
(let b (math:complex 3.75 1.25))
|
||||
|
||||
(assert
|
||||
(=
|
||||
(math:complex-add a b)
|
||||
(math:complex 4.75 2.25))
|
||||
"complex add")
|
||||
(assert
|
||||
(=
|
||||
(math:complex-mul a b)
|
||||
(math:complex 2.5 5))
|
||||
"complex mul")
|
||||
(assert
|
||||
(=
|
||||
(math:complex-mul (math:complex -1 0) a)
|
||||
(math:complex -1 -1))
|
||||
"complex negation")
|
||||
(assert
|
||||
(=
|
||||
(math:complex-div (math:complex 1 0) a)
|
||||
(math:complex 0.5 -0.5))
|
||||
"complex inversion")
|
||||
(assert
|
||||
(=
|
||||
(math:complex-conjugate a)
|
||||
(math:complex 1 -1))
|
||||
"complex conjugate")
|
||||
86
Task/Arithmetic-Complex/DuckDB/arithmetic-complex.duckdb
Normal file
86
Task/Arithmetic-Complex/DuckDB/arithmetic-complex.duckdb
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
CREATE TYPE COMPLEX AS STRUCT(r REAL, i REAL);
|
||||
|
||||
CREATE OR REPLACE FUNCTION isreal(a) AS (
|
||||
if (try_cast(a as REAL), true, false)
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION tocomplex(a) AS (
|
||||
coalesce( try_cast(a as COMPLEX), {r: a, i:0.0 }::COMPLEX )
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_add_(a, b) AS (
|
||||
{r: a.r + b.r, i:a.i + b.i}
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_add(a, b) AS (
|
||||
complex_add_(tocomplex(a), tocomplex(b))
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_mul_(a, b) AS (
|
||||
{r: a.r * b.r - a.i * b.i, i:a.r * b.i + a.i * b.r}
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_mul(a, b) AS (
|
||||
complex_mul_(tocomplex(a), tocomplex(b))
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_mag(a) AS (
|
||||
case when isreal(a)
|
||||
then abs(a::REAL)
|
||||
else sqrt( (a::COMPLEX).r ^ 2 + (a::COMPLEX).i ^2)
|
||||
end
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_conj(a) AS (
|
||||
case when isreal(a)
|
||||
then {r: a::REAL, i: 0.0}
|
||||
else {r: (a::COMPLEX).r, i: - (a::COMPLEX).i}
|
||||
end
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_mag_squared(x) AS (
|
||||
case when isreal(x)
|
||||
then x::REAL*x::REAL
|
||||
else (x::COMPLEX).r ^ 2 + (x::COMPLEX).i ^ 2
|
||||
end
|
||||
);
|
||||
|
||||
# Oddly, the a.r notation cannot currently be used here
|
||||
CREATE OR REPLACE FUNCTION complex_div_(a, b) AS (
|
||||
WITH denom AS (select complex_mag_squared(b) as denom,
|
||||
a['r'] as ar, a['i'] as ai, b['r'] as br, b['i'] as bi
|
||||
)
|
||||
SELECT {r: (ar * br + ai * bi) / denom,
|
||||
i: (ai * br - ar * bi) / denom }
|
||||
FROM denom
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_div(a, b) AS (
|
||||
complex_div_(tocomplex(a), tocomplex(b))
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_exp_(z) AS (
|
||||
complex_mul_( {r: exp(z.r), i: 0.0}, {r: cos(z.i), i:sin(z.i) })
|
||||
);
|
||||
|
||||
CREATE OR REPLACE FUNCTION complex_exp(z) AS (
|
||||
if( isreal(z),
|
||||
{r:exp(z::REAL), i:0.0},
|
||||
complex_exp_( tocomplex(z) ) )
|
||||
);
|
||||
|
||||
## Examples
|
||||
.mode line
|
||||
CREATE OR REPLACE FUNCTION test(x,y) as table (
|
||||
select x as "x",
|
||||
y as "y",
|
||||
complex_add(x,y) as "add",
|
||||
complex_mul(x,y) as "mul",
|
||||
complex_div(1, x) as "1/x",
|
||||
complex_conj(x) as "conj(x)",
|
||||
complex_div(x,y).complex_mul(y) as "(x/y)*y"
|
||||
);
|
||||
|
||||
from test({r:1,i:1}, {r:0,i:1} );
|
||||
|
||||
select complex_exp( {r:0, i:pi()} ) as "e^iπ";
|
||||
71
Task/Arithmetic-Complex/FutureBasic/arithmetic-complex.basic
Normal file
71
Task/Arithmetic-Complex/FutureBasic/arithmetic-complex.basic
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
//
|
||||
// Arithmetic/Complex
|
||||
// Using FutureBasic 7.0.34
|
||||
// August 2025, R.W
|
||||
|
||||
include "Tlbx complex.incl"
|
||||
// through this include file, FB supports the following
|
||||
// double complex functions (as of August 2025).
|
||||
// Float and long double complex might be
|
||||
// available in later versions
|
||||
|
||||
//fn creal, cimag, cabs, carg, conj, cproj
|
||||
//fn csqrt, cexp, clog, cpow
|
||||
//fn csin, ccos, ctan
|
||||
//fn casin, cacos, catan
|
||||
//fn csinh, ccosh, ctanh
|
||||
//fn casinh,cacosh,catanh
|
||||
|
||||
// Below is redefining "I" to Cj since I don't want to lose the
|
||||
// ability to use "i" as my favorite FOR NEXT / loop variable
|
||||
BeginCDeclaration
|
||||
#define Cj I
|
||||
EndC
|
||||
system double Cj
|
||||
|
||||
local fn PrintComplexNumber( z as double_complex )
|
||||
double y
|
||||
print @fn creal( z ) " ";
|
||||
y = fn cimag( z )
|
||||
if ( y >= 0.0 ) then print @"+"; : else print @"-";
|
||||
print @abs( y ) "i"
|
||||
end fn
|
||||
|
||||
window 1,@"Arithmetic/Complex"
|
||||
|
||||
double_complex z1, z2, z3, z4, z5, z6
|
||||
double_complex z7, z8, z9, zs, zn
|
||||
|
||||
z1 = 1.5 + 3 * Cj //1.5 + 3i
|
||||
z2 = 1.5 + 1.5 * Cj //1.5 + 1.5i
|
||||
|
||||
// Operations using C99 operators
|
||||
z3 = z1 + z2 // addition
|
||||
z4 = z1 - z2 // subtraction
|
||||
z5 = z1 * z2 // multiplication
|
||||
z6 = z1 / z2 // division
|
||||
//----------------
|
||||
z7 = fn conj(z1) // conjugate
|
||||
z8 = fn cpow(z1,z2) // power ^
|
||||
z9 = fn cabs(z1) // norm | magnitude
|
||||
zs = fn csqrt(z1) // square root
|
||||
zn = -(z1) // negate
|
||||
|
||||
// Extract real/imag parts using creal/cimag
|
||||
print @
|
||||
print @" z1 + z2 = "; fn creal(z3); " + "; fn cimag(z3); "i"
|
||||
print @" z1 - z2 = "; fn creal(z4); " + "; fn cimag(z4); "i"
|
||||
print @" z1 * z2 = "; fn creal(z5); " + "; fn cimag(z5); "i"
|
||||
print @" z1 / z2 = "; fn creal(z6); " + "; fn cimag(z6); "i"
|
||||
print @" Conj z1 = "; fn creal(z7); " "; fn cimag(z7); "i"
|
||||
print @" Abs z1 = "; fn creal(z9)
|
||||
print @" z1 ^ z2 = ";
|
||||
fn PrintComplexNumber(z8)
|
||||
print @" cSqrt z1= ";
|
||||
fn PrintComplexNumber(zs)
|
||||
print @" -(z1) = ";
|
||||
fn PrintComplexNumber(zn)
|
||||
print @" z1 real = "; fn creal(z1)
|
||||
print @" z1 imag = "; fn cimag(z1)
|
||||
|
||||
HandleEvents
|
||||
15
Task/Arithmetic-Complex/Pluto/arithmetic-complex.pluto
Normal file
15
Task/Arithmetic-Complex/Pluto/arithmetic-complex.pluto
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
require "complex"
|
||||
local fmt = require "fmt"
|
||||
|
||||
local x = new complex(1, 3)
|
||||
local y = new complex(5, 2)
|
||||
|
||||
fmt.print("x = %s", x)
|
||||
fmt.print("y = %s", y)
|
||||
fmt.print("x + y = %s", x + y)
|
||||
fmt.print("x - y = %s", x - y)
|
||||
fmt.print("x * y = %s", x * y)
|
||||
fmt.print("x / y = %s", x / y)
|
||||
fmt.print("-x = %s", -x)
|
||||
fmt.print("1 / x = %s", x:inverse())
|
||||
fmt.print("x* = %s", x:conj())
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
-- 19 May 2025
|
||||
-- 7 Aug 2025
|
||||
include Settings
|
||||
|
||||
say 'COMPLEX ARITHMETIC'
|
||||
|
|
@ -6,48 +6,45 @@ say version
|
|||
say
|
||||
a = '1 2'; b = '3 4'; c = '5 6'; d = '7 8'; i = I()
|
||||
say 'VALUES'
|
||||
say 'a =' crec2form(a)
|
||||
say 'b =' crec2form(b)
|
||||
say 'c =' crec2form(c)
|
||||
say 'd =' crec2form(d)
|
||||
say 'a =' Rec2FormC(a)
|
||||
say 'b =' Rec2FormC(b)
|
||||
say 'c =' Rec2FormC(c)
|
||||
say 'd =' Rec2FormC(d)
|
||||
say
|
||||
say 'BASICS'
|
||||
say 'i*i =' crec2form(Csquare(i()))
|
||||
say 'a+b =' crec2form(Cadd(a,b))
|
||||
say 'a-b =' crec2form(Csub(a,b))
|
||||
say 'a*b =' crec2form(Cmul(a,b))
|
||||
say 'a/b =' crec2form(Cdiv(a,b))
|
||||
say 'a^2 =' crec2form(Csquare(a,2))
|
||||
say 'a^5 =' crec2form(Cpow(a,5))
|
||||
say '-a =' crec2form(Cneg(a))
|
||||
say '1/a =' crec2form(Cinv(a))
|
||||
say 'a+b+c+d =' crec2form(Cadd(a,b,c,d))
|
||||
say 'a-b-c-d =' crec2form(Csub(a,b,c,d))
|
||||
say 'a*b*c*d =' crec2form(Cmul(a,b,c,d))
|
||||
say 'a/b/c/d =' crec2form(Cnormal(Cdiv(a,b,c,d)))
|
||||
say 'i*i =' Rec2FormC(SquareC(i()))
|
||||
say 'a+b =' Rec2FormC(AddC(a,b))
|
||||
say 'a-b =' Rec2FormC(SubC(a,b))
|
||||
say 'a*b =' Rec2FormC(MulC(a,b))
|
||||
say 'a/b =' Rec2FormC(DivC(a,b))
|
||||
say 'a^2 =' Rec2FormC(SquareC(a,2))
|
||||
say 'a^5 =' Rec2FormC(PowC(a,5))
|
||||
say '-a =' Rec2FormC(NegC(a))
|
||||
say '1/a =' Rec2FormC(InvC(a))
|
||||
say 'a+b+c+d =' Rec2FormC(AddC(a,b,c,d))
|
||||
say 'a-b-c-d =' Rec2FormC(SubC(a,b,c,d))
|
||||
say 'a*b*c*d =' Rec2FormC(MulC(a,b,c,d))
|
||||
say 'a/b/c/d =' Rec2FormC(Normal(DivC(a,b,c,d)))
|
||||
say
|
||||
say 'FORMULA'
|
||||
say 'a^2-2ab+3c-4ad^4+5 =' ,
|
||||
crec2form(Cadd(Csquare(a),Cmul(-2,a,b),Cmul(3,c),Cmul(-4,a,Cpower(d,4)),5))
|
||||
Rec2FormC(AddC(SquareC(a),MulC(-2,a,b),MulC(3,c),MulC(-4,a,PowerC(d,4)),5))
|
||||
say
|
||||
say 'BONUS'
|
||||
say 'Argument(a) =' Carg(a)+0
|
||||
say 'Conjugate(a) =' crec2form(Cconj(a))
|
||||
say 'Imag(a) =' Cim(a)
|
||||
say 'Modulus(a) =' Cmod(a)+0
|
||||
say 'Polar(a) =' Cpol2form(Cnormal(Crec2pol(a)))
|
||||
say 'Real(a) =' Cre(a)
|
||||
say 'Argument(a) =' ArgC(a)+0
|
||||
say 'Conjugate(a) =' Rec2FormC(ConjC(a))
|
||||
say 'Imag(a) =' ImC(a)
|
||||
say 'Modulus(a) =' ModC(a)+0
|
||||
say 'Polar(a) =' Pol2FormC(Normal(Rec2PolC(a)))
|
||||
say 'Real(a) =' ReC(a)
|
||||
say
|
||||
say 'MORE'
|
||||
say 'Arcsin(a) =' crec2form(Cnormal(Carcsin(a)))
|
||||
say 'Exp(a) =' crec2form(Cnormal(Cexp(a)))
|
||||
say 'Ln(a) =' crec2form(Cnormal(Cln(a)))
|
||||
say 'Sin(a) =' crec2form(Cnormal(Csin(a)))
|
||||
say 'Sqrt(a) =' crec2form(Cnormal(Csqrt(a)))
|
||||
say 'i^i =' crec2form(Cnormal(Cpower(i,i)))
|
||||
say 'Arcsin(a) =' Rec2FormC(Normal(ArcSinC(a)))
|
||||
say 'Exp(a) =' Rec2FormC(Normal(ExpC(a)))
|
||||
say 'Ln(a) =' Rec2FormC(Normal(LnC(a)))
|
||||
say 'Sin(a) =' Rec2FormC(Normal(SinC(a)))
|
||||
say 'Sqrt(a) =' Rec2FormC(Normal(SqRtC(a)))
|
||||
say 'i^i =' Rec2FormC(Normal(PowerC(i,i)))
|
||||
exit
|
||||
|
||||
include Complex
|
||||
include Functions
|
||||
include Constants
|
||||
include Abend
|
||||
include Math
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue