Calculadora de número de condição
A API de número de condição recebe uma matriz quadrada e devolve o seu número de condição em norma 2: a razão entre o maior e o menor valor singular da matriz.
Executar grátis
Esse único número mostra quanto um pequeno erro nos seus dados — um arredondamento, um ruído de medição, um coeficiente truncado — pode ser amplificado ao resolver um sistema linear ou inverter a matriz. Um número de condição próximo de 1 significa que o problema é estável; um número grande alerta que a resposta pode estar dominada pelo ruído. O cálculo é feito em uma única passada determinística: a matriz é validada, forma-se A-transposta-A e seus autovalores são obtidos por uma iteração clássica de Jacobi, cujas raízes quadradas são os valores singulares.
O que um número de condição realmente mede
Ao resolver numericamente um sistema Ax = b, você quase nunca trabalha com A e b exatos. Os coeficientes vêm de medições, de cálculos anteriores ou de entradas decimais arredondadas no caminho. O número de condição de A é o fator de amplificação, no pior caso, dessa incerteza: se a entrada muda por uma quantidade relativa épsilon, a solução pode mudar em até kappa vezes épsilon. Com kappa = 10, um erro de um por cento nos dados pode produzir um erro de dez por cento na resposta. Com kappa = 1,000,000, você pode perder seis dos cerca de dezesseis dígitos decimais que um double comporta. O número de condição em norma 2 calculado aqui, kappa_2, é definido pelos valores singulares de A: o maior valor singular sigma_max mede o máximo que a matriz pode esticar um vetor, o menor sigma_min mede o máximo que ela pode encolhê-lo, e a razão entre eles é kappa_2. Uma matriz ortogonal, como uma rotação, tem kappa_2 exatamente 1 — o melhor possível. Uma matriz com linhas linearmente dependentes tem sigma_min = 0 e kappa_2 infinito, e é por isso que esta capacidade rejeita matrizes singulares em vez de imprimir um número enorme e sem sentido.
Como o número é calculado aqui
O algoritmo é determinístico e autocontido, sem biblioteca numérica externa. Primeiro a sua entrada é normalizada: os valores podem ser enviados como um array de linhas ou como texto simples com linhas separadas por quebras de linha ou ponto e vírgula, e valores por vírgulas ou espaços. Cada valor deve ser um número finito, todas as linhas devem ter o mesmo comprimento e a matriz deve ser quadrada — uma matriz 2 por 3 não tem número de condição nesse sentido, então a solicitação é rejeitada com um erro claro que nomeia o campo culpado. Em seguida, o código forma a matriz simétrica G = A^T A e extrai seus autovalores com a iteração cíclica clássica de Jacobi: uma sequência fixa de rotações planas que zeram as entradas fora da diagonal uma a uma até a matriz ficar diagonal na precisão de trabalho. Como a ordem das rotações, a convenção de sinais e o limite de varreduras são fixos, a mesma matriz produz sempre a mesma resposta, bit a bit. Os autovalores de G são os quadrados dos valores singulares de A, portanto suas raízes quadradas dão sigma_max e sigma_min, e a razão, arredondada para doze casas decimais para uma saída estável, é o número de condição retornado. Matrizes cujo menor valor singular fica abaixo de um piso numérico escalonado — aproximadamente kappa_2 acima de dez bilhões — são reportadas como numericamente singulares, porque a dupla precisão não consegue distingui-las honestamente de uma matriz com deficiência de posto.
Como ler o resultado e usá-lo bem
A resposta oferece quatro coisas: o número de condição em si, sigma_max, sigma_min e uma mensagem em linguagem clara que classifica a matriz. Considere bem condicionada qualquer kappa abaixo de cerca de 10 — os resolvedores diretos vão se comportar bem. Entre cem e um milhão, planeje uma perda visível de precisão e prefira algoritmos estáveis: decomposição QR ou LU com pivoteamento parcial, em vez de formar uma inversa explícita, que eleva ao quadrado o erro do cálculo que a alimenta. Acima de um milhão, a leitura honesta é que a resposta depende mais do ruído dos seus dados do que do resolvedor, e a medida correta costuma ser reescalar o problema, regularizá-lo ou rever se a matriz do modelo é a adequada. Dois hábitos práticos valem a pena: verifique o número de condição antes de culpar um resolvedor por uma resposta ruim, porque uma matriz mal condicionada produz respostas erradas com código correto; e compare números de condição entre formulações, porque o mesmo problema físico escrito com outras unidades ou funções de base pode diferir em ordens de grandeza em kappa. O mesmo código que roda aqui executa grátis no seu navegador nesta página, então você pode colar uma matriz e ver o resultado antes de pagar US$ 0,002 por solicitação para automatizá-lo.
Casos de uso
Verificar um sistema linear antes de resolver
Estime quantos dígitos da solução você pode confiar antes de rodar uma decomposição LU ou QR sobre coeficientes medidos.
Diagnosticar uma regressão que não converge
Uma matriz de projeto quase colinear aparece como um número de condição enorme de X-transposta-X muito antes de o resolvedor falhar.
Comparar discretizações do mesmo problema
Duas formulações de elementos finitos ou de funções de base de um mesmo modelo físico podem diferir em ordens de grandeza no condicionamento; escolha a estável.
Perguntas frequentes
Quanto custa?
US$ 0,002 por solicitação. Também é grátis executar no seu navegador nesta página.
Por que minha matriz foi rejeitada como singular?
Porque o seu menor valor singular é numericamente zero, o que torna o número de condição infinito. Isso também cobre matrizes tecnicamente invertíveis, mas com deficiência de posto em dupla precisão (kappa acima de cerca de dez bilhões).
Por que a matriz precisa ser quadrada?
O número de condição em norma 2, kappa_2 = sigma_max / sigma_min, é definido pelos valores singulares de uma matriz de coeficientes quadrada. Para problemas retangulares de mínimos quadrados, condicione em vez disso a matriz quadrada X-transposta-X.
Como posso enviar a matriz?
Como um array de linhas numéricas de igual comprimento, ou como texto com linhas separadas por quebras de linha ou ponto e vírgula e valores por vírgulas ou espaços. As duas formas dão resultados idênticos.
Qual tamanho de matriz ela aceita?
Até 32 por 32, com valores absolutos de entrada de até 1e12. O cálculo é aritmética exata em dupla precisão com uma iteração de Jacobi determinística.
O resultado é reproduzível?
Sim. A iteração de Jacobi usa ordem de rotações, convenção de sinais e limite de varreduras fixos, de modo que a mesma entrada produz sempre a mesma saída, arredondada para doze casas decimais.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/math/condition-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"matrix":[[2,1],[1,2]]}'const res = await fetch("https://api.kit.forhosting.com/math/condition-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"matrix": [
[
2,
1
],
[
1,
2
]
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/condition-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"matrix": [
[
2,
1
],
[
1,
2
]
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/condition-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"matrix":[[2,1],[1,2]]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"matrix":[[2,1],[1,2]]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/condition-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"matrix": [
[
2,
1
],
[
1,
2
]
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.condition_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_rows | 32 |
max_cols | 32 |
max_abs | 1000000000000 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |