Cálculo de Matrices de Rigidez y Masas
Cálculo de Matrices
/* Estilos para la tabla */
table {
border-collapse: collapse;
width: 100%; /* O ajustar según sea necesario */
}
td, th {
border: 1px solid black;
padding: 5px;
text-align: center; /* Centrar texto en celdas */
}
const inputForm = document.getElementById('input-form');
const resultsDiv = document.getElementById('results');
// Function to create a number input with label
function createNumberInput(label) {
const input = document.createElement('input');
input.type = 'number';
input.placeholder = label;
input.name = label; // Assign a unique name for easier value retrieval
return input;
}
// Function to create a table with headers and rows
function createTable(data) {
if (!data || data.length === 0) {
throw new Error('No hay datos para mostrar en la tabla.');
}
const table = document.createElement('table');
const headerRow = document.createElement('tr');
// Create table headers
Object.keys(data[0]).forEach(key => {
const th = document.createElement('th');
th.textContent = key;
headerRow.appendChild(th);
});
table.appendChild(headerRow);
// Create table rows
data.forEach(item => {
const row = document.createElement('tr');
Object.values(item).forEach(value => {
const td = document.createElement('td');
td.textContent = value;
row.appendChild(td);
});
table.appendChild(row);
});
return table;
}
// Function to calculate the determinant of a 3x3 matrix
function calculateDeterminant(matrix) {
return (
matrix[0] * (matrix[4] * matrix[8] - matrix[5] * matrix[7]) -
matrix[1] * (matrix[3] * matrix[8] - matrix[5] * matrix[6]) +
matrix[2] * (matrix[3] * matrix[7] - matrix[4] * matrix[6])
);
}
// Function to calculate lambda and matrices A
function calculate() {
// Get matrix K and mass values from form
const kValues = Array.from(inputForm.querySelectorAll('input[name^="K"]')).map(input => parseFloat(input.value));
const massValues = Array.from(inputForm.querySelectorAll('input[name^="Mass"]')).map(input => parseFloat(input.value));
// Validate input
if (kValues.length !== 9 || massValues.length !== 3 || kValues.some(isNaN) || massValues.some(isNaN)) {
alert('Por favor, ingrese valores numéricos válidos para todas las entradas de la matriz K y las masas.');
return;
}
try {
// Calculate and show the determinant of matrix K
const kDeterminant = calculateDeterminant(kValues);
const kDeterminantResult = document.createElement('p');
kDeterminantResult.textContent = `Determinante de K: ${kDeterminant.toFixed(2)}`; // Show with 2 decimal places
resultsDiv.innerHTML = ''; // Clear previous results
resultsDiv.appendChild(kDeterminantResult);
// Calculate lambda (only diagonal elements)
const lambda = [];
for (let i = 0; i < 3; i++) {
const kIndex = i * 4; // K[i][i] corresponds to K[0][0], K[1][1], K[2][2]
if (massValues[i] === 0) throw new Error('División por cero en el cálculo de lambda.');
lambda.push(kValues[kIndex] / massValues[i]);
}
// Show partial results for lambda
const lambdaTable = createTable(lambda.map(l => ({ Lambda: l })));
resultsDiv.appendChild(lambdaTable);
// Calculate matrices A[z] = K with modified diagonal elements
const A = [];
for (let z = 0; z < 3; z++) {
const A_z = [...kValues]; // Start with a copy of K
// Modify diagonal elements
for (let i = 0; i < 3; i++) {
A_z[i * 3 + i] = kValues[i * 3 + i] - lambda[z] * massValues[i]; // Update diagonal
}
A.push(A_z);
}
// Show results for matrices A[0], A[1], A[2] and their determinants
for (let z = 0; z < 3; z++) {
const ATable = createTable([
{ Col1: A[z][0], Col2: A[z][1], Col3: A[z][2] },
{ Col1: A[z][3], Col2: A[z][4], Col3: A[z][5] },
{ Col1: A[z][6], Col2: A[z][7], Col3: A[z][8] },
]);
resultsDiv.appendChild(document.createElement('h3')).textContent = `Matriz A[${z}]:`;
resultsDiv.appendChild(ATable);
// Calculate and show the determinant
const determinant = calculateDeterminant(A[z]);
const determinantResult = document.createElement('p');
determinantResult.textContent = `Determinante de A[${z}]: ${determinant.toFixed(2)}`; // Show with 2 decimal places
resultsDiv.appendChild(determinantResult);
}
} catch (error) {
alert(`Error en los cálculos: ${error.message}`);
}
}
// Function to create the form dynamically
function createForm() {
const kLabel = document.createElement('label');
kLabel.textContent = 'Valores de K:';
inputForm.appendChild(kLabel);
// Create inputs for matrix K
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
const input = createNumberInput(`K${i + 1}${j + 1}`);
inputForm.appendChild(input);
}
}
const massLabel = document.createElement('label');
massLabel.textContent = 'Masas:';
inputForm.appendChild(massLabel);
// Create inputs for masses
for (let i = 0; i < 3; i++) {
const input = createNumberInput(`Mass${i + 1}`);
inputForm.appendChild(input);
}
}
// Add a button to initiate calculations
const calculateButton = document.createElement('button');
calculateButton.textContent = 'Calcular';
calculateButton.onclick = calculate;
inputForm.appendChild(calculateButton);
// Create the form on page load
createForm();
Comentarios
Publicar un comentario