Karmaşık bir gücü hesaplayın


10

Yıkık

Herhangi bir x ve y girdisi verildiğinde , karmaşık bir işlem gerçekleştirin ve karşılık gelen bir sonucu yazdırın.

Programınız nasıl çalışmalı

  1. Z = x + yi biçiminde x ve y girdisi verildiğinde , z i- z'yi bulun

  2. Z i-z'nin mutlak gerçek değeri mutlak hayali kısımdan büyükse, gerçek kısmı yazdırın; tersi tersi. Her iki değer de eşitse, değerlerden birini yazdırın.

Misal

x: 2
y: 0

Bu nedenle:

z = 2
z^(i-z) ~= 0.192309 + 0.159740i

Gerçek kısım hayali kısımdan daha büyük bir mutlak değere sahip olduğundan, program geri döner

0.192309

Daha fazla örnek

z = 1+i >> 0.5
z = i >> 1
z = 0.5 >> 1.08787
z = -2+8i >> 2.22964E7
z = -10i >> 3.13112E7

10
Profesyonel ipucu: bonuslardan kurtulun!
Stewie Griffin


7
Karmaşık sayıların karmaşık bir güce yükseltilmesi süreksizdir ve kullanılan dal kesimine bağlıdır. Bunu belirtebilir misiniz? Herhalde herkes sadece yerleşik matematik işlemlerini kullanacak ve muhtemelen hepsi aynı konvansiyonu kullanacak.
xnor

2
"Büyük", maksimum değeri seçmek yerine (en çok varsaydıklarından) en büyük mutlak değere sahip değeri seçmek anlamına mı gelir? Bunun için bir test örneği -2+ikullanılabilir ( z^(i-z)=3-4iyani 3>-4vs abs(-4)>abs(3)).
Jonathan Allan

5
"Mutlak değer" açıklaması / değişikliği cevapların çoğunu geçersiz kılmıştır.
xnor

Yanıtlar:


7

Jöle , 8 11 bayt

Cevabı değiştirerek cevabı güncellediği için Johnathan Allan'a teşekkür ederiz.

ı_*@µĊ,ḞAÞṪ

Çevrimiçi deneyin!

ı_*@        z^(i-z)
    µ       new monadic link
     Ċ,Ḟ    pair real and imaginary parts
        AÞṪ sort by absolute value and take last value

Bunu yapın ı_*@µĊ,ḞAÞṪve tek geçerli girişe sahip olabilirsiniz (mutlak terimlerle maksimum değeri gerektirecek değişiklik göz önüne alındığında, örneğin, yerine -2+1jdöndürür ). -4.03.0
Jonathan Allan


5

Mathematica, 21 22 bayt

Edit: 3 btyes tasarrufu için JungHwan Min teşekkürler

Max@ReIm[#^(I-#)]&

Bağımsız değişken olarak karmaşık bir sayı bekleyen saf işlev. Kesin bir sayı geçilirse, kesin bir sayı döndürülür (örn. 1/2Verir Sqrt[2] Cos[Log[2]]). Mutlak değerin kullanılması gerektiğini belirtmek için çözümümü gönderdikten sonra sorun spesifikasyonu düzenlendi. Bunun için gelebileceğim en iyi şey, MaximalBy[ReIm[#^(I-#)],Abs][[1]]&ya da Last@MaximalBy[Abs]@ReIm[#^(I-#)]&her iki 34bayt.


1
Maxkafa olması gerekmez. Girdi ne kadar derin olursa olsun maksimum değeri döndürür List(örneğin Max[1, {2, {3}}]döndürür 3). Ayrıca, soru sadece değerleri yazdırmak belirtir, bu yüzden ihtiyacınız olacağını sanmıyorum N: Max@ReIm[#^(I-#)]&işe yarayacak.
JungHwan Min

3

Oktav , 29 bayt

@(z)max(real(z^(i-z)./[1 i]))

Bu anonim bir işlevi tanımlar. MATLAB'de de çalışır.

Çevrimiçi deneyin!

açıklama

Element-wise ./sayısının z^(i-z)diziye bölünmesi [1 i]ve gerçek parçanın alınması, gerçek ve hayali parçalarının bulunduğu bir dizi verir z^(i-z).


3

MATL , 10 bayt

Jy-^&ZjhX>

Çevrimiçi deneyin! Veya tüm test senaryolarını doğrulayın .

açıklama

Girişi -2+8iörnek olarak ele alalım.

J     % Push i (imaginary unit)
      % STACK: i
y     % Implicit input. Duplicate from below
      % STACK: -2+8i, i, -2+8i
-     % Subtract
      % STACK: -2+8i, 2-7i
^     % Power
      % STACK: 3168271.58+22296434.47i
&Zj   % Real and imaginary parts
      % STACK: 3168271.58, 22296434.47
h     % Concatenate
      % STACK: [3168271.58 22296434.47]
X>    % Maximum. Implicitly display
      % STACK: 22296434.47

2

TI-BASIC, 40 , 32 , 31 29 bayt

@Conor O'Brien sayesinde bir bayt kaydetti

Z^(i-Z→A                   #Perform operation, store as A, 8 bytes
:real(A)>imag(A            #Test if real part is greater than imaginary, 9 bytes
:Ansreal(A)+imag(Anot(Ans  #Determine output and print, 12 bytes

Girdiyi Zdeğişken üzerinde karmaşık bir sayı olarak alır .

TI-BASIC kendi kodlamasını kullanır, burada bulabilirsiniz .



1

Perl 6 , 24 bayt

{($_**(i-$_)).reals.max}

$_muhtemelen karmaşık bir argüman; $_ ** (i - $_)hesaplanacak ifadedir; gerçek ve hayali parçaların bir listesini döndüren .realsbir Complexyöntemdir; ve sonunda .maxikisinden daha büyük olanı döndürür.


1

C (GCC), 9379 + 4 ( -lm) = 97 83 bayt

@Ceilingcat sayesinde 14 bayt tasarruf edildi!

float f(_Complex z){z=cpow(z,csqrt(-1)-z);return cimag(z)>creal(z)?cimag(z):z;}

Üstbilgiyi complex.heklemek ¯ \ _ (ツ) _ / ¯ değerinden daha uzun

Çevrimiçi deneyin!


Neden +4 bayt? Ben 3 saymak, -, l, ve m.
Rɪᴋᴇʀ

@Riker Normal derleme olan gcc file.c -o exeuzay,: Bu bayrak 4 bayt ekler, böylece -, lve m. (En azından derlerken saydığım bu.)
17'de

@ ceilingcat oh bunun mümkün olduğunu bilmiyordum. Teşekkürler!
betseg



1

TI-Basic, 19 16 bayt

Ans^(i-Ans
max(real(Ans),imag(Ans

real(ve imag(iki baytlık simgelerdir.

Çalıştır 5+3i:prgmNAME( 5+3iargüman NAMEolarak, program adı olarak)


0

R, 38 bayt

pryr::f({z=z^(1i-z);max(Re(z),Im(z))})

Anonim işlev. Bir (muhtemelen) karmaşık sayı alır z, belirtilen gücü alır, ve daha sonra geri döner maxve ReAl ve Imaginary parça.


0

Aksiyom, 60 bayt

f(z:Complex Float):Float==(y:=z^(%i-z);max(real(y),imag(y)))

test kodu ve sonuçları; diğer emsal versiyonunu takip ediyorum ...

(28) -> [[k,f(k)] for k in [1+%i,%i,1,-2+8*%i,-10*%i]]
   (28)
   [[1.0 + %i,0.5], [%i,1.0], [1.0,1.0],
    [- 2.0 + 8.0 %i,22296434.4737098688 53],
    [- 10.0 %i,31311245.9804955291 66]]

0

C # - 189 Bayt

double f(double x, double y){double r,t,m,c;r=Math.Sqrt(x*x+y*y);t=Math.Atan2(y,x);m=Math.Pow(r,-x)*Math.Exp(y*t-t);c=Math.Cos((1-y)*Math.Log(r)-t*x);return m*(2*c*c<1?Math.Sqrt(1-c*c):c);}

Okunabilir:

double f(double x, double y){
double r, t, m, c;
r = Math.Sqrt(x * x + y * y);
t = Math.Atan2(y, x);
m = Math.Pow(r, -x) * Math.Exp(y * t - t);
c = Math.Cos((1 - y) * Math.Log(r) - t * x);
return m * (2 * c * c < 1 ? Math.Sqrt(1 - c * c) : c); }

Açıklama: Herhangi bir Karmaşık kitaplık kullanılmamasına karar verildi.

z=x+beny=rebentzben-z=(rebent)(-x+ben(1-y))=r-xrben(1-y)e-xbentet(y-1)=r-xet(y-1)eben((1-y)ln(r)-xt) (gibi rben=ebenln(r))

Bu eşit olsun mebenbir nerede

m=r-xet(y-1)
bir=(1-y)ln(r)-xt

Sonra (zben-z)=mmarulbir ve (zben-z)=mgünahbir

Maksimum mutlak değer, marulbir ve günahbir terimleri, bunların eşit olması 12 (dolayısıyla test 2c2<1).

Belirtildiği gibi, karmaşık bir üsse yükseltmek belirli bir dal kesiminin seçilmesine bağlıdır (ör. z=1 olabilirdi ebenπ veya e3benπ - bunu ben gerçek bir parçası verir e-π veya e-3π ancak, sırasıyla, sadece t[0,2π) soru başına.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.