Scientific computing / Computacao cientifica

Spectral statistics / Espectral e estatistica

EN: Stage 3 signals, eigenproblems, distributions and t tests. PT: Etapa 3 de sinais, autoproblemas, distribuicoes e testes t.

01

EN: FFT and inverse transforms

fft(X[,n[,dim]]) and ifft use rustfft along the first nonsingleton dimension (an empty axis counts as nonsingleton); dim is Number 1 or 2. [] keeps the default length; finite integer n in 0..16777216 pads with zeros or truncates. fft2(X) / ifft2(X) transform both axes; resizing requires both m,n, not a single size or []. Inverses normalize by each transformed axis length. Large inverse lanes are scaled by a power of two before rustfft, then normalization and scale recovery are combined to avoid an overflowing unnormalized sum: ifft([1e308,1e308]) retains a finite first value near 1e308.

Finite Number, complex scalar, real Matrix and complex Matrix inputs are accepted; logicals and NaN/Inf are rejected even in data that resizing would discard. Results are always complex matrices, including 1-by-1 and empty outputs. Each dimension, output, FFT buffer and scratch buffer is capped at 16777216 elements; non-power-of-two plans also require next_power_of_two(2*n-1)<=16777216. Results must remain finite; scaling/recovery reject nonfinite or erased nonzero components with Sun:InvalidArgument. This is not universal accuracy or arbitrary precision: subnormal rounding and backend limits remain, and forward FFT does not use this inverse protection. These bounds do not guarantee available memory.

Sun
signal=[1+i,2-i,3,4];
restored=ifft(fft(signal));
disp(all(abs(restored-signal)<1e-10));
image=[1,2;3,4];
disp(all(abs(ifft2(fft2(image))-image)<1e-10));
padded=fft(3,4);
disp(size(padded,1)==4 && size(padded,2)==1 && all(abs(padded-3)<1e-10));
02

PT: FFT e transformadas inversas

fft(X[,n[,dim]]) e ifft usam rustfft no primeiro eixo nao unitario (eixo vazio tambem conta); dim e Number 1 ou 2. [] preserva comprimento padrao; n inteiro finito de 0..16777216 preenche com zeros ou corta. fft2(X) / ifft2(X) operam nos dois eixos; redimensionar exige m,n juntos, nao tamanho unico nem []. Inversas normalizam pelo comprimento de cada eixo. Vetores grandes da inversa recebem escala por potencia de dois antes de rustfft; normalizacao e recuperacao da escala sao combinadas para evitar overflow na soma nao normalizada: ifft([1e308,1e308]) preserva primeiro valor finito proximo de 1e308.

Aceita Number, escalar complexo, Matrix real/complexa finitos; rejeita logicos e NaN/Inf mesmo na parte que seria cortada. Sempre retorna matriz complexa, inclusive 1 por 1 e vazias. Cada dimensao, saida, buffer FFT e scratch tem limite 16777216; planos nao potencia de dois exigem next_power_of_two(2*n-1)<=16777216. Resultado deve ser finito; escala/recuperacao rejeitam componentes nao finitos ou nao zero apagados com Sun:InvalidArgument. Sem precisao universal ou arbitraria: persistem arredondamento subnormal e limites do backend, e FFT direta nao usa esta protecao da inversa. Limites nao garantem memoria disponivel.

Sun
sinal=[1;2;3];
disp(all(abs(ifft(fft(sinal))-sinal)<1e-10));
imagem=[1+i,2;3,4];
disp(all(abs(ifft2(fft2(imagem))-imagem)<1e-10));
eixos=fft([1,2;3,4],[],2);
disp(all(abs(eixos-[3,-1;7,-1])<1e-10));
03

EN: Convolution and filter state

conv2(A,B[,shape]) uses direct convolution, not FFT: default 'full'; 'same' preserves A shape with zero-based crop start floor(size(B)/2); 'valid' uses max(size(A)-size(B)+1,0) per axis. For nonempty output, numel(A)*numel(B) must be <=50000000 even for cropped output. Numeric finite scalars/arrays are accepted, not logicals; output is a real matrix unless either input is complex.

[y,zf]=filter(b,a,x[,zi[,dim]]) uses normalized transposed direct form II, divides coefficients by nonzero a(1), and zero-pads coefficients to order=max(length(a),length(b))-1. b,a are nonempty finite numeric vectors (scalars allowed). y preserves x shape; default axis is the first nonsingleton, explicit dim 1/2. [] means zero state for every channel; nonempty zi must be a vector of exactly order entries and is supported only when x is a vector filtered along its vector axis. zf has x shape with filtered axis replaced by order: row 1-by-order, column order-by-1; matrix channels have independent zero initial states. Complex input/coefficient/zi promotes outputs. Finite intermediates/results and 16777216-element size limits apply. Two positions allow [~,zf] and [y,~]; discards do not bypass argument validation.

Coefficient normalization divides components directly for a real a(1), and uses exponent-scaled division for complex a(1), avoiding squared-magnitude overflow/underflow for large/tiny identity filters. Nonfinite or erased nonzero components during division/scaling raise Sun:InvalidArgument. This does not protect every recurrence product or cancellation, detect every subnormal rounding loss, or provide arbitrary precision.

Sun
disp(all(conv2([1,2,3],[1,2],'same')==[4,7,6]));
[first,state]=filter(2,[2,-1],[1,0]);
[second,last]=filter(2,[2,-1],[0,0],state);
[~,masked]=filter(2,[2,-1],[1,0,0,0]);
disp(all(abs(second-[0.25,0.125])<1e-12) && all(abs(last-masked)<1e-12));
04

PT: Convolucao e estado de filtro

conv2(A,B[,shape]) e convolucao direta, nao FFT: padrao 'full'; 'same' preserva forma de A com inicio de recorte base zero floor(size(B)/2); 'valid' usa max(size(A)-size(B)+1,0) por eixo. Saida nao vazia exige numel(A)*numel(B)<=50000000 mesmo no recorte. Aceita escalares/matrizes numericos finitos, nao logicos; saida matricial real salvo entrada complexa.

[y,zf]=filter(b,a,x[,zi[,dim]]) usa forma direta II transposta normalizada por a(1) nao zero; completa coeficientes com zeros ate ordem=max(length(a),length(b))-1. b,a sao vetores numericos finitos nao vazios, escalares permitidos. y preserva forma de x; primeiro eixo nao unitario ou dim 1/2 explicita. [] inicia cada canal com zero; zi nao vazio deve ser vetor de comprimento ordem, somente para x vetorial no seu eixo. zf substitui esse eixo pela ordem: linha 1 por ordem, coluna ordem por 1; canais matriciais independentes iniciam em zero. Entrada/coeficiente/zi complexo promove saidas. Intermediarios/resultados finitos e limite 16777216. Ate duas posicoes [~,zf] / [y,~]; descarte nao evita validacao.

A normalizacao divide componentes diretamente para a(1) real e usa divisao com escala de expoentes para a(1) complexo, evitando overflow/underflow do modulo ao quadrado em filtros identidade grandes/pequenos. Componentes nao finitos ou nao zero apagados durante divisao/escala geram Sun:InvalidArgument. Isso nao protege todo produto ou cancelamento da recorrencia, nao detecta toda perda por arredondamento subnormal nem fornece precisao arbitraria.

Sun
disp(all(abs(conv2(1+i,[1,2])-complex([1,2],[1,2]))<1e-12));
[saida,estado]=filter([1,i],1,[1;2]);
[~,final]=filter([1,i],1,[3;4],estado);
disp(all(abs(saida-complex([1;2],[0;1]))<1e-12) && abs(final(1)-4*i)<1e-12);
05

EN: Eigenvalues and polynomial roots

eig(A) accepts finite square real/complex MATRIX only: Number and complex scalar are rejected, but [2] and complex([2],[0]) are accepted. One output is an n-by-1 complex column; [V,D] returns complex n-by-n unit-Euclidean-norm eigenvector columns and diagonal eigenvalues. No eigenvalue ordering, eigenvector phase/sign, orthogonality or invertible basis for defective matrices is guaranteed. [~,D] uses eigenvalues only; [V,~] still computes vectors. Empty 0-by-0 yields 0-by-1 or two 0-by-0 matrices. faer general complex Schur/EVD has bounded internal iterations and decomposition failure is an error.

roots(c) accepts a nonempty real/complex coefficient row/column, including Number or complex constant, in descending powers. Leading zeros are stripped; trailing zeros remain roots with multiplicity. A nonzero constant yields a complex 0-by-1 column; empty and all-zero polynomials error. Output is an unordered complex column. eig order and roots degree are capped at 512, including trailing zero roots, even when discarded; excess raises Sun:MatrixSizeLimit. Global scaling, coefficient division and rescaling reject nonfinite results or nonzero components erased by scaling with Sun:InvalidArgument; this is not arbitrary precision or detection of all rounding. Use element-wise residuals below: general complex matrix multiplication is still unsupported.

Sun
[vectors,diagonal]=eig([0,-1;1,0]);
[~,masked]=eig([0,-1;1,0]);
disp(abs(diagonal(1,1)^2+1)<1e-10 && abs(masked(2,2)^2+1)<1e-10);
values=[diagonal(1,1),diagonal(2,2)];
disp(all(abs(-vectors(2,:)-vectors(1,:).*values)<1e-10) && all(abs(vectors(1,:)-vectors(2,:).*values)<1e-10));
values=roots([0,1,-3,2,0,0]);
disp(size(values,1)==4 && size(values,2)==1 && all(abs(values.^2.*(values-1).*(values-2))<1e-8));
disp(isempty(roots(3)));
06

PT: Autovalores e raizes polinomiais

eig(A) exige MATRIZ quadrada real/complexa finita: rejeita Number e escalar complexo; aceita [2] e complex([2],[0]). Uma saida e coluna complexa n por 1; [V,D] retorna matrizes complexas n por n, colunas de autovetores com norma Euclidiana unitaria e diagonal de autovalores. Sem ordem, fase/sinal, ortogonalidade ou base invertivel garantida em matrizes defectivas. [~,D] calcula somente autovalores; [V,~] calcula vetores. Vazia 0 por 0 retorna 0 por 1 ou duas 0 por 0. Schur/EVD complexo geral de faer tem iteracoes internas limitadas; falha de decomposicao e erro.

roots(c) aceita vetor linha/coluna real/complexo nao vazio, inclusive constante Number/complexa, em potencias decrescentes. Remove zeros iniciais; preserva multiplicidades dos zeros finais. Constante nao nula retorna coluna complexa 0 por 1; vazio/todos zero geram erro. Coluna complexa sem ordem. Ordem de eig e grau de roots limitados a 512, incluindo raizes zero finais e saidas descartadas; excesso gera Sun:MatrixSizeLimit. Escala global, divisao de coeficientes e reescala rejeitam resultado nao finito ou componente nao zero apagado por escala com Sun:InvalidArgument; sem precisao arbitraria nem deteccao de todo arredondamento. Multiplicacao matricial complexa geral segue ausente.

Sun
[vetores,diagonal]=eig(complex([2,0;0,3],[1,0;0,-1]));
disp(all(abs(sum(abs(vetores).^2,1)-1)<1e-10));
raizes=roots([1,0,1]);
disp(size(raizes,2)==1 && all(abs(raizes.^2+1)<1e-10));
[~,diagonal]=eig([2]);
disp(abs(diagonal(1)-2)<1e-10);
07

EN: PDF, CDF and inverse queries

normpdf/normcdf/norminv(X[,mu[,sigma]]) default mu=0, sigma=1. tpdf/tcdf/tinv(X,nu), chi2pdf/chi2cdf/chi2inv(X,nu), fpdf/fcdf/finv(X,d1,d2) use statrs. Query X (p for inv) must be Number or real Matrix; return Number or preserve exact matrix shape, including 1-by-1 and empty. Logical and complex queries are rejected. Parameters must be finite Number scalars, not 1-by-1 matrices; no parameter broadcasting. sigma and all degrees of freedom must be positive, not necessarily integers. NaN query propagates only after parameters validate; every non-NaN inverse probability outside [0,1], including infinity, is an error.

PDF at +/-Inf is 0; CDF endpoints are 0/1. For chi2/F, negative queries have PDF/CDF 0 and CDF(0)=0. chi2pdf(0,nu) is Inf / 0.5 / 0 for nu <2 / =2 / >2; fpdf(0,d1,d2) is Inf / 1 / 0 for d1 <2 / =2 / >2. Inverse p=0 is -Inf for normal/t, 0 for chi2/F; p=1 is Inf for all.

Normal queries protect subtraction/scaling, use log-density minus log(sigma), and fused scale/shift for quantiles. Student CDF uses log-magnitude beta tails rather than squaring a huge query; nu=1 uses a Cauchy tail and a specialized inverse. Thus tcdf(-1e200,1)/1e-200 remains near 1/pi. Positive finite F density uses log-beta and stable log-ratios: fpdf(1,200,200) is near 2.817423950462821. Tail symmetry/survival functions, reciprocal F tails and bounded chi-square quantile refinement also improve stability. These are not universal accuracy or arbitrary precision guarantees: extreme gamma/beta evaluations and subnormal rounding still limit results; fcdf and inverse queries still depend on backend accuracy/convergence. Extreme finite parameters/queries may produce Inf, NaN or underflow rather than a universal error guarantee.

Sun
disp(abs(normpdf(0)-1/sqrt(2*pi))<1e-12 && abs(normcdf(norminv(0.975))-0.975)<1e-10);
disp(abs(tpdf(0,1)-1/pi)<1e-12 && abs(tcdf(tinv(0.975,10),10)-0.975)<1e-10);
disp(abs(chi2pdf(2,2)-exp(-1)/2)<1e-12 && abs(chi2cdf(chi2inv(0.95,2),2)-0.95)<1e-10);
disp(abs(fpdf(1,2,2)-0.25)<1e-12 && abs(fcdf(finv(0.95,2,2),2,2)-0.95)<1e-10);
08

PT: Consultas PDF, CDF e inversa

normpdf/normcdf/norminv(X[,mu[,sigma]]) usam mu=0, sigma=1 por padrao. tpdf/tcdf/tinv(X,nu), chi2pdf/chi2cdf/chi2inv(X,nu), fpdf/fcdf/finv(X,d1,d2) usam statrs. Consulta X (p na inversa) exige Number ou Matrix real; retorno Number ou forma matricial exata, inclusive 1 por 1 e vazias. Rejeita consultas logicas/complexas. Parametros sao apenas Number finitos, nao matrizes 1 por 1; sem broadcasting. sigma e graus de liberdade positivos, nao necessariamente inteiros. Consulta NaN propaga apos validar parametros; probabilidade inversa nao NaN fora de [0,1], inclusive infinito, e erro.

PDF em +/-Inf e 0; CDF nos extremos e 0/1. chi2/F negativos tem PDF/CDF 0 e CDF(0)=0. chi2pdf(0,nu) e Inf / 0.5 / 0 para nu <2 / =2 / >2; fpdf(0,d1,d2) e Inf / 1 / 0 para d1 <2 / =2 / >2. Inversa em p=0 retorna -Inf para normal/t e 0 para chi2/F; p=1 retorna Inf em todos.

Consultas normais protegem subtracao/escala, usam log-densidade menos log(sigma) e escala/deslocamento fundidos nos quantis. CDF t usa caudas beta pelo log-modulo em vez do quadrado de consulta enorme; nu=1 usa cauda de Cauchy e inversa especializada. Assim tcdf(-1e200,1)/1e-200 permanece proximo de 1/pi. Densidade F em consulta positiva finita usa log-beta e log-razoes estaveis: fpdf(1,200,200) fica proximo de 2.817423950462821. Simetria/funcao de sobrevivencia, cauda F reciproca e refinamento limitado do quantil chi-quadrado tambem melhoram estabilidade. Sem garantia de precisao universal ou arbitraria: avaliacoes gamma/beta extremas e arredondamento subnormal ainda limitam resultados; fcdf e inversas seguem dependentes da precisao/convergencia do backend. Parametros/consultas finitos extremos podem produzir Inf, NaN ou underflow, sem garantia universal de erro.

Sun
consulta=[0,1;2,3];
probabilidade=normcdf(consulta);
disp(all(size(probabilidade)==size(consulta)) && abs(norminv(0.5,10)-10)<1e-12);
disp(abs(normpdf(0)-1/sqrt(2*pi))<1e-12 && abs(tcdf(tinv(0.75,1),1)-0.75)<1e-10 && abs(tpdf(0,1)-1/pi)<1e-12);
disp(abs(chi2pdf(2,2)-exp(-1)/2)<1e-12 && abs(chi2cdf(chi2inv(0.95,2),2)-0.95)<1e-10);
disp(abs(fpdf(1,2,2)-0.25)<1e-12 && abs(fcdf(finv(0.95,2,2),2,2)-0.95)<1e-10);
nanconsulta=normcdf(NaN);
disp(nanconsulta~=nanconsulta && norminv(0)==-Inf && chi2inv(0,2)==0 && finv(1,2,2)==Inf);
09

EN: Two-sided t tests

[h,p]=ttest(x[,mu[,alpha]]) tests mean mu (default 0); [h,p]=ttest2(x,y[,alpha]) is independent-sample Welch, not pooled/equal-variance or paired. Each sample must be a real Matrix row/column vector with at least two finite entries; sample lengths may differ. mu and alpha are finite Number scalars; alpha defaults to 0.05 and must satisfy strictly 0<alpha<1. One output is Bool h=(p<alpha), not p; second is Number p. At most two positions, including [~,p] and [h,~]; no CI/stats outputs, tails/options structs or missing-data omission.

Zero computed standard error has defined constants: equal means give p=1,h=false; different means p=0,h=true. Anchored/scaled compensated moments and hypot protect many extreme samples, including opposite 1e308 constants. Tail evaluation uses log(abs(delta))-log(standard_error) instead of forming a potentially overflowing t ratio or its square; Welch degrees of freedom use normalized error weights. For ttest([0,1e-200],1), p/1e-200 remains near 1/pi, matching ttest([0,1],1e200) after rescaling. A nonfinite final probability raises Sun:InvalidArgument. Extreme beta evaluation and subnormal rounding limits remain; this does not guarantee universal accuracy, detection of every rounding/underflow, or arbitrary-precision inference.

Sun
[reject,probability]=ttest([1,2,3,4,5]);
disp(reject && abs(probability-0.013235599563682695)<1e-10);
[~,probability]=ttest2([1,2,3,4,5],[2,4,6,8,10]);
disp(abs(probability-0.10753119493062718)<1e-10);
[reject,probability]=ttest([3,3],3);
disp(!reject && probability==1);
10

PT: Testes t bilaterais

[h,p]=ttest(x[,mu[,alpha]]) testa media mu (padrao 0); [h,p]=ttest2(x,y[,alpha]) e Welch para amostras independentes, nao variancia igual nem pareado. Cada amostra exige Matrix real vetorial em linha/coluna com ao menos dois valores finitos; tamanhos podem diferir. mu e alpha sao Number finitos; alpha padrao 0.05, estritamente 0<alpha<1. Uma saida e Bool h=(p<alpha), nao p; segunda e Number p. Ate duas posicoes, [~,p] / [h,~]; sem CI/stats, caudas/structs de opcoes ou omissao de ausentes.

Erro padrao calculado zero tem constantes definidas: medias iguais p=1,h=false; diferentes p=0,h=true. Momentos ancorados/escalados compensados e hypot protegem muitas amostras extremas, inclusive constantes opostas 1e308. A cauda usa log(abs(delta))-log(standard_error) em vez de formar razao t ou seu quadrado com possivel overflow; graus de liberdade Welch usam pesos de erro normalizados. Em ttest([0,1e-200],1), p/1e-200 permanece proximo de 1/pi, concordando com ttest([0,1],1e200) apos reescala. Probabilidade final nao finita gera Sun:InvalidArgument. Persistem limites de beta extremo e arredondamento subnormal; sem garantia de precisao universal, deteccao de todo arredondamento/underflow ou inferencia de precisao arbitraria.

Sun
[rejeita,probabilidade]=ttest([1;2;3;4;5],3);
disp(!rejeita && probabilidade==1);
[~,probabilidade]=ttest2([1e308,1e308],[-1e308,-1e308]);
disp(probabilidade==0);
[rejeita,~]=ttest([1,2,3,4,5],0,0.01);
disp(!rejeita);
11

EN: Execution and remaining limits

All 22 Stage 3 builtins are pure single-output expressions allowed in parfor, subject to existing loop restrictions and real output buffers; complex intermediate results do not enable complex parfor output storage. Multiple assignment remains forbidden inside parfor, even with ~. All 22 are rejected by native LLVM compilation, with no interpreter fallback or new C ABI; use sun check and sun run or the Studio interpreter. check validates syntax, not numeric domains or backend convergence.

RuntimeHost cancellation does not interrupt internal rustfft/faer/statrs or direct signal backend work unless checked outside those calls; no prompt internal cancellation, time or memory guarantee is made. Bounds remain validated when outputs are discarded. Advanced signal processing, generalized eigenproblems, mature complex linear algebra, more distributions/inference and N-D arrays remain absent. Stage 5 adds bounded real sparse storage and real symmetric eigs using a DENSE reduction of order <=512, not scalable Krylov eigs: /language/sparse-advanced-solvers. General complex eig remains dense-only. Stage 4 adds scalar structs and bounded data/file types: /language/data-and-files. Stage 1: /language/scientific-computing; Stage 2: /language/numerical-solvers. Engine builds may lag these contracts: check builtins() in your executable.

Sun
output=zeros(1,2);
parfor index=1:2
    spectrum=fft([1,2]);
    output(index)=real(spectrum(1));
end
disp(all(output==3));
12

PT: Execucao e limites restantes

Os 22 builtins da etapa 3 sao expressoes puras de uma saida permitidas em parfor, sujeitos as restricoes existentes e buffers de saida reais; intermediarios complexos nao habilitam armazenamento de saida complexo. Atribuicao multipla segue proibida em parfor, inclusive com ~. Os 22 sao rejeitados na compilacao LLVM nativa, sem fallback interpretado nem nova ABI C; use sun check e sun run ou interpretador Studio. check valida sintaxe, nao dominios numericos nem convergencia.

Cancelamento de RuntimeHost nao interrompe trabalho interno rustfft/faer/statrs ou backend direto de sinais, salvo verificacoes fora dessas chamadas; sem promessa de cancelamento interno imediato, tempo ou memoria. Limites sao validados mesmo com descarte. Sinais avancados, autoproblemas generalizados, algebra complexa madura, mais distribuicoes/inferencia e arrays N-D seguem ausentes. Etapa 5 adiciona esparsos reais limitados e eigs real simetrico por reducao DENSA de ordem <=512, nao eigs Krylov escalavel: /language/sparse-advanced-solvers. eig complexo geral continua apenas denso. Etapa 4 adiciona structs escalares e tipos limitados de dados/arquivos: /language/data-and-files. Etapa 1: /language/scientific-computing; etapa 2: /language/numerical-solvers. Executavel pode estar atras destes contratos: consulte builtins().

Sun
saida=zeros(1,2);
parfor indice=1:2
    saida(indice)=normcdf(0);
end
disp(all(saida==0.5));

Sun is proprietary software under experimental development. Documentation scope: Sun 0.6 development snapshot.