Language reference
Scientific computing / Computacao cientifica
EN: Stage 1 statistics, calculus and sampling. PT: Etapa 1 de estatistica, calculo e amostragem.
EN: Covariance and correlation
cov(A[,0|1]) and corrcoef(A) return square matrices: observations are rows and variables are columns. A row or column vector is one variable and returns a 1-by-1 MATRIX, not a Number. cov uses max(N-1,1) by default or with 0, and max(N,1) with 1. A scalar second argument equal to 0 or 1 selects normalization, not paired data; use the third argument to disambiguate a scalar pair.
cov(x,y[,0|1]) and corrcoef(x,y) flatten equal-element-count arrays in column-major order into two variables and return 2-by-2 matrices. Real numeric and logical samples are accepted, not complex. No omit-NaN or rows policy exists: a nonfinite column contaminates only pairs involving that column; unaffected column pairs remain valid. corrcoef returns NaN for constant columns, including their diagonal; it has no normalization flag.
Both cov and corrcoef raise Sun:InvalidArgument if an original nonzero value divided by its column scale underflows to zero before centering. For example, cov([1e308,1e-308,0],[0,1,-1]) now raises an explicit error instead of returning a spurious zero; corrcoef rejects the same inputs. This is not arbitrary precision or detection of all rounding.
A = [1,2;2,4;3,6];
C = cov(A);
disp(all(abs(C-[1,2;2,4])<1e-12));
disp(all(size(cov([1,2,3]))==[1,1]));
disp(all(abs(cov(A,1)-C*(2/3))<1e-12));
R = corrcoef([1,2,NaN;2,4,1;3,6,2]);
disp(abs(R(1,2)-1)<1e-12 && R(1,3)~=R(1,3));
constant = corrcoef([7,7,7]);
disp(all(constant~=constant));PT: Covariancia e correlacao
cov(A[,0|1]) e corrcoef(A) retornam matrizes quadradas com observacoes nas linhas e variaveis nas colunas. Vetor linha ou coluna representa uma variavel e retorna MATRIZ 1 por 1, nao Number. cov usa max(N-1,1) por padrao ou com 0 e max(N,1) com 1. Segundo argumento escalar igual a 0 ou 1 seleciona normalizacao; para um par escalar ambiguo, informe o terceiro argumento.
cov(x,y[,0|1]) e corrcoef(x,y) vetorizam arrays com igual numero de elementos em ordem por colunas e retornam 2 por 2. Aceitam amostras numericas reais e logicas, nao complexas. Nao ha politica omit-NaN/rows: uma coluna nao finita contamina apenas pares daquela coluna; os demais pares continuam validos. corrcoef retorna NaN para colunas constantes, inclusive na diagonal, e nao aceita normalizacao.
Tanto cov quanto corrcoef geram Sun:InvalidArgument se um valor original nao zero dividido pela escala da coluna sofre underflow para zero antes da centragem. Por exemplo, cov([1e308,1e-308,0],[0,1,-1]) agora gera erro explicito em vez de retornar zero espurio; corrcoef rejeita as mesmas entradas. Isso nao garante precisao arbitraria nem deteccao de todo arredondamento.
A = [1,3;2,4];
x = [1,2,3,4];
C = cov(A,x);
disp(all(abs(C-(5/3)*ones(2,2))<1e-12));
disp(all(abs(corrcoef(A,x)-ones(2,2))<1e-12));
R = corrcoef([1,7;2,7;3,7]);
disp(abs(R(1,1)-1)<1e-12 && R(1,2)~=R(1,2) && R(2,2)~=R(2,2));EN: Polynomial fitting
p=polyfit(x,y,n) returns only a 1-by-(n+1) row of coefficients in descending powers. Samples must be nonempty finite real or logical vectors of equal length, and n must be a nonnegative integer smaller than the sample count. The Vandermonde matrix must have full numerical column rank; rank deficiency is an error, not a warning or a best-effort fit. There are no S or mu outputs and no centering/scaling struct contract.
p = polyfit([0,1,2,3],[1,6,17,34],2);
disp(all(size(p)==[1,3]) && all(abs(p-[3,2,1])<1e-10));PT: Ajuste polinomial
p=polyfit(x,y,n) retorna somente uma linha 1 por (n+1) de coeficientes em potencias decrescentes. Amostras devem ser vetores reais ou logicos finitos, nao vazios e de mesmo comprimento; n e inteiro nao negativo menor que o numero de amostras. A matriz de Vandermonde deve ter posto numerico completo nas colunas; posto deficiente gera erro, nao aviso nem ajuste parcial. Nao existem saidas S ou mu nem contrato de structs de centralizacao/escala.
p = polyfit([0;1;2],[2;5;8],1);
disp(all(size(p)==[1,2]) && all(abs(p-[3,2])<1e-10));EN: Gradient and spacing
gradient(F) preserves the input shape. A vector follows its own axis; a matrix returns dx across columns first and optional dy across rows. A vector's second output is zeros of the same shape. Endpoints use one-sided differences; interiors use the central secant (F(i+1)-F(i-1))/(x(i+1)-x(i-1)), including nonuniform coordinates, not a three-point quadratic formula.
gradient(F,h) uses finite nonzero scalar spacing (negative is allowed); a vector may instead use finite strictly increasing coordinates of matching length. Matrices accept one global scalar or gradient(F,hx,hy), where each axis uses scalar spacing or matching coordinates. Vectors do not accept two spacing arguments. Scalar inputs remain scalar; these routines operate on real data, not complex arrays.
[dx,dy] = gradient([1,3,7;4,6,10],2,3);
disp(all(abs(dx-[1,1.5,2;1,1.5,2])<1e-12));
disp(all(abs(dy-ones(2,3))<1e-12));
g = gradient([0,1,9],[0,1,3]);
disp(all(abs(g-[1,3,4])<1e-12));PT: Gradiente e espacamento
gradient(F) preserva a forma. Vetor segue seu proprio eixo; matriz retorna dx pelas colunas primeiro e dy opcional pelas linhas. A segunda saida de vetor contem zeros na mesma forma. Extremos usam diferencas unilaterais; interiores usam secante central (F(i+1)-F(i-1))/(x(i+1)-x(i-1)), inclusive em coordenadas nao uniformes, nao formula quadratica de tres pontos.
gradient(F,h) usa passo escalar finito nao nulo, inclusive negativo. Vetor pode usar coordenadas finitas crescentes estritas do mesmo comprimento. Matriz aceita um escalar global ou gradient(F,hx,hy), com passo escalar ou coordenadas correspondentes a cada eixo. Vetor nao aceita dois espacamentos. Entrada escalar permanece escalar; dados complexos nao sao aceitos.
[g,z] = gradient([0;1;9],[0,1,3]);
disp(all(size(g)==[3,1]) && all(abs(g-[1;3;4])<1e-12));
disp(all(size(z)==[3,1]) && all(z==0));
disp(all(gradient([0,2,4],-2)==[-1,-1,-1]));EN: Trapezoidal integration and migration
trapz(Y[,dim]) and trapz(X,Y[,dim]) reduce dimension 1 or 2, defaulting to the first non-singleton dimension. X is a finite scalar step (zero or negative allowed) or a finite coordinate vector matching the reduced axis; trapz coordinates need not increase. With two arguments, a second Number equal to 1 or 2 means dim, not Y: use three arguments for ambiguous X,Y calls.
Default vector integration returns a Number. With explicit dim and matrix Y, the result remains a MATRIX, even 1-by-1, preserving the non-reduced axis: dimension 1 gives 1-by-cols and dimension 2 gives rows-by-1. Scalar Y stays scalar. This replaces the old one-axis/no-spacing description.
A = [1,2,3;4,5,6];
disp(all(trapz(A,1)==[2.5,3.5,4.5]));
disp(all(trapz(A,2)==[4;10]));
disp(trapz(0.5,[1,2,3])==2);
disp(all(size(trapz([1,2,3],2))==[1,1]));PT: Integracao trapezoidal e migracao
trapz(Y[,dim]) e trapz(X,Y[,dim]) reduzem dimensao 1 ou 2; o padrao e a primeira dimensao nao unitaria. X e passo escalar finito, inclusive zero ou negativo, ou vetor finito de coordenadas correspondente ao eixo; as coordenadas de trapz nao precisam crescer. Com dois argumentos, segundo Number igual a 1 ou 2 significa dim, nao Y; use tres argumentos para X,Y ambiguos.
Integracao vetorial padrao retorna Number. Com dim explicita e Y matriz, a saida continua MATRIZ, inclusive 1 por 1, preservando o eixo nao reduzido: dimensao 1 produz 1 por colunas e dimensao 2 produz linhas por 1. Y escalar continua escalar. Esta extensao substitui a descricao antiga sem eixo/passo explicito.
A = [1,2,3;4,5,6];
disp(all(trapz([0,1,3],A,2)==[6.5;15.5]));
disp(trapz([1;2;3])==4);
disp(all(size(trapz([1;2;3],1))==[1,1]));
disp(all(trapz(0,A,1)==[0,0,0]));EN: Interpolation, nearest and extrapolation
interp1(Y,Xq) uses implicit X=1:length(Y); interp1(X,Y,Xq) uses finite strictly increasing real X matching at least two real vector samples. An optional method is 'linear' (default) or 'nearest'; nearest midpoint ties select the right node. Scalar queries return a Number; real matrix queries preserve shape. Complex queries are rejected; NaN queries always return NaN.
Outside the domain the default is NaN. A final scalar fill or 'extrap' requires an explicit method in either form: interp1(X,Y,Xq,'nearest',0) or interp1(Y,Xq,'linear','extrap'). Linear extrapolation extends the endpoint secant; nearest extrapolation uses the endpoint sample. This replaces the old linear-only description; other methods are not implemented.
x = [0,2,4]; y = [0,20,40];
disp(interp1(x,y,1,'nearest')==20);
outside = interp1(x,y,-1);
disp(outside~=outside);
disp(interp1(x,y,-1,'linear',99)==99);
disp(interp1(x,y,-1,'linear','extrap')==-10);
missing = interp1(x,y,NaN,'nearest',0);
disp(missing~=missing);PT: Interpolacao e extrapolacao
interp1(Y,Xq) usa X implicito 1:length(Y); interp1(X,Y,Xq) exige X real finito crescente estrito e pelo menos duas amostras vetoriais reais correspondentes. Metodo opcional 'linear' e padrao; 'nearest' resolve empate no ponto medio pelo no direito. Consulta escalar retorna Number; matriz real preserva a forma. Consultas complexas sao rejeitadas; consulta NaN sempre retorna NaN.
Fora do dominio o padrao e NaN. Fill escalar final ou 'extrap' exige metodo explicito em ambas as formas. Extrapolacao linear prolonga a secante do extremo; nearest usa a amostra extrema. A extensao substitui a descricao antiga limitada a linear; outros metodos nao estao implementados.
Q = [0,1.5;2,3];
V = interp1([10,20],Q,'nearest','extrap');
disp(all(size(V)==size(Q)) && all(V==[10,20;20,20]));
disp(interp1([10,20],0,'linear',-1)==-1);EN: Histogram bins and outputs
histcounts(X[,nbins|edges]) returns [N,E,B]: N counts and E edges are row matrices; B preserves shape(X), even for scalar X as a 1-by-1 matrix. B uses 1-based bin indices, or 0 outside the edges or for NaN. Bins are left-closed/right-open except the last right edge is inclusive. An explicit edge vector has at least two strictly increasing entries without NaN and may include infinite endpoints.
Automatic edges use 10 uniform bins by default or a positive finite integer nbins. They ignore nonfinite samples for both limits and counts, use 0..1 when no finite samples exist, and expand constant v by max(abs(v)/2,0.5), clamped to finite limits. Unrepresentable distinct finite uniform edges are an error; use fewer bins or explicit edges. There are no normalization modes or extra outputs.
X = [0,1,2;3,NaN,4];
[N,E,B] = histcounts(X,[0,2,4]);
disp(all(N==[2,3]) && all(E==[0,2,4]));
disp(all(size(B)==size(X)) && all(B==[1,1,2;2,0,2]));
[N,E,B] = histcounts([NaN,Inf,-Inf]);
disp(all(size(N)==[1,10]) && all(N==0));
disp(E(1)==0 && E(11)==1 && all(B==0));PT: Bins e saidas do histograma
histcounts(X[,nbins|edges]) retorna [N,E,B]: N contagens e E bordas sao matrizes linha; B preserva a forma de X, inclusive escalar como matriz 1 por 1. B usa indices baseados em 1; fora das bordas ou NaN recebe 0. Intervalos incluem a borda esquerda e excluem a direita, exceto a ultima borda inclusiva. Vetor explicito exige ao menos duas bordas crescentes estritas sem NaN e pode conter extremos infinitos.
Bordas automaticas usam 10 bins uniformes por padrao ou nbins inteiro positivo finito. Ignoram nao finitos nos limites e contagens, usam 0..1 sem amostras finitas e expandem constante v por max(abs(v)/2,0.5), limitado aos extremos finitos. Bordas uniformes finitas distintas irrepresentaveis geram erro; use menos bins ou bordas explicitas. Sem modos de normalizacao nem saidas extras.
[N,E,B] = histcounts([2,2],2);
disp(all(E==[1,2,3]) && all(N==[0,2]) && all(B==2));
[N,E,B] = histcounts([-Inf,-1,0,Inf,NaN],[-Inf,0,Inf]);
disp(all(N==[2,2]) && all(B==[1,1,2,2,0]));
[N,E,B] = histcounts([-1,0,2,3],[0,1,2]);
disp(all(B==[0,1,2,0]));EN: Execution boundaries
All seven functions are available in the interpreter and Sun Studio; use sun run. A pure single-output call is allowed in supported parfor bodies with indexed writes to preallocated real outputs; multiple assignment remains forbidden in parfor, including gradient and histcounts. LLVM rejects these calls without automatic interpreter fallback; native runtime ABI support is not added.
Stage 1 adds no new value types. Stage 4 adds scalar structs, cell arrays, maps, tables and bounded data/file APIs: /language/data-and-files. N-D arrays remain absent. Stage 3 adds FFT, conv2, filter, eig, roots, normal/t/chi-square/F distributions and ttest/ttest2; see /language/spectral-statistics. Advanced signal processing, generalized eigenproblems and broader distributions/inference remain absent. Stage 2 implements fzero, fminbnd, fminsearch, integral, ode45 and ode23; see /language/numerical-solvers. These six effectful solvers are forbidden in parfor. Stage 5 adds bounded sparse storage, pcg/gmres, symmetric dense-bounded eigs, fsolve, lsqnonneg, stiff ODE ode15s (BDF, not MATLAB NDF) and linprog: /language/sparse-advanced-solvers. All 11 new calls are blocked in parfor and LLVM. fmincon, events, dense solution structs and infinite-bound integration remain absent. Existing logical/complex values do not imply that every numerical routine accepts them. The published subset is not full MATLAB compatibility.
output = zeros(1,2);
parfor index = 1:2
p = polyfit([0,1,2],[1,3,5],1);
output(index) = p(1);
end
disp(all(abs(output-2)<1e-10));PT: Limites de execucao
As sete funcoes estao no interpretador e no Sun Studio; use sun run. Chamada pura de uma saida e permitida em parfor suportado com escritas indexadas em saidas reais prealocadas; atribuicao multipla permanece proibida em parfor, inclusive gradient e histcounts. LLVM rejeita chamadas sem fallback automatico para o interpretador; nao foi adicionado suporte na ABI nativa.
Etapa 1 nao adiciona tipos. Etapa 4 adiciona structs escalares, cell arrays, mapas, tabelas e APIs limitadas de dados/arquivos: /language/data-and-files. Arrays N-D continuam ausentes. Etapa 3 adiciona FFT, conv2, filter, eig, roots, distribuicoes normal/t/chi-quadrado/F e ttest/ttest2; veja /language/spectral-statistics. Sinais avancados, autoproblemas generalizados e mais distribuicoes/inferencia seguem ausentes. Etapa 2 implementa fzero, fminbnd, fminsearch, integral, ode45 e ode23; veja /language/numerical-solvers. Esses seis solvers com efeitos sao proibidos em parfor. Etapa 5 adiciona esparsos limitados, pcg/gmres, eigs simetrico denso limitado, fsolve, lsqnonneg, EDOs rigidas ode15s (BDF, nao NDF MATLAB) e linprog: /language/sparse-advanced-solvers. Todas as 11 chamadas novas bloqueadas em parfor/LLVM. fmincon, eventos, structs de solucao densa e integracao com limites infinitos continuam ausentes. Valores logicos/complexos existentes nao significam suporte em toda rotina numerica. O subconjunto nao equivale a compatibilidade MATLAB completa.
output = zeros(1,2);
parfor index = 1:2
counts = histcounts([0,1,2],[0,1,2]);
output(index) = counts(2);
end
disp(all(output==2));