Resolución de Problemas de Ajuste de Datos y Modelado Matemático

Problema 1

% PROBLEMA 1 – 2 PARCIAL

clc, clear, close all

% Mínimos cuadrados

x = [3, 4, 10, 15, 20, 30, 40, 50, 60, 75, 90];

y = [25.5, 23.4, 18.2, 14.2, 11, 6.7, 4.1, 2.5, 1.5, 0.7, 0.4];

% Formación de la matriz de coeficientes

n = length(x);

A = zeros(4, 4); % Matriz de coeficientes

A(1, 1) = n;

A(1, 2) = sum(x);

A(1, 3) = sum(x.^2);

A(1, 4) = sum(x.^3);

A(2, 1) = A(1, 2);

A(2, 2) = A(1, 3);

A(2, 3) = A(1, 4);

A(2, 4) = sum(x.^4);

A(3, 1) = A(1, 3);

A(3, 2) = A(1, 4);

A(3, 3) = A(2, 4);

A(3, 4) = sum(x.^5);

A(4, 1) = A(1, 4);

A(4, 2) = A(2, 4);

A(4, 3) = A(3, 4);

A(4, 4) = sum(x.^6);

% Vector de términos independientes

b = zeros(4, 1);

b(1) = sum(y);

b(2) = sum(x .* y);

b(3) = sum(x.^2 .* y);

b(4) = sum(x.^3 .* y);

% Resolución del sistema

% Método de Gauss-Jordan sin pivoteo

M = [A, b]; % Matriz aumentada

% Hacer 1 el pivote M(1, 1)

M(1, 🙂 = M(1, 🙂 / M(1, 1);

% Hacer 0 debajo del pivote en la columna 1

% 0 en la posición (2, 1)

M(2, 🙂 = M(2, 🙂 – M(2, 1) * M(1, :);

% 0 en la posición (3, 1)

M(3, 🙂 = M(3, 🙂 – M(3, 1) * M(1, :);

% 0 en la posición (4, 1)

M(4, 🙂 = M(4, 🙂 – M(4, 1) * M(1, :);

% Hacer 1 el pivote M(2, 2)

M(2, 🙂 = M(2, 🙂 / M(2, 2);

% Hacer 0 arriba y abajo del pivote en la columna 2

% 0 en la posición (1, 2)

M(1, 🙂 = M(1, 🙂 – M(1, 2) * M(2, :);

% 0 en la posición (3, 2)

M(3, 🙂 = M(3, 🙂 – M(3, 2) * M(2, :);

% 0 en la posición (4, 2)

M(4, 🙂 = M(4, 🙂 – M(4, 2) * M(2, :);

% Hacer 1 el pivote M(3, 3)

M(3, 🙂 = M(3, 🙂 / M(3, 3);

% Hacer 0 arriba y abajo del pivote en la columna 3

% 0 en la posición (1, 3)

M(1, 🙂 = M(1, 🙂 – M(1, 3) * M(3, :);

% 0 en la posición (2, 3)

M(2, 🙂 = M(2, 🙂 – M(2, 3) * M(3, :);

% 0 en la posición (4, 3)

M(4, 🙂 = M(4, 🙂 – M(4, 3) * M(3, :);

% Hacer 1 el pivote M(4, 4)

M(4, 🙂 = M(4, 🙂 / M(4, 4);

% Hacer 0 arriba y abajo del pivote en la columna 4

% 0 en la posición (1, 4)

M(1, 🙂 = M(1, 🙂 – M(1, 4) * M(4, :);

% 0 en la posición (2, 4)

M(2, 🙂 = M(2, 🙂 – M(2, 4) * M(4, :);

% 0 en la posición (3, 4)

M(3, 🙂 = M(3, 🙂 – M(3, 4) * M(4, :);

% Solución

coef = M(:, end);

% Coeficientes del polinomio de grado 3

a0 = coef(1);

a1 = coef(2);

a2 = coef(3);

a3 = coef(4);

% Polinomio grado 3

p3 = [a3, a2, a1, a0]; % De mayor a menor grado

% Redefinir el rango para la gráfica de ajuste

xx = [1:0.01:100];

% Evaluar la gráfica de ajuste

yy = polyval(p3, xx);

% Gráficas

% Gráfica de los puntos y la recta

plot(x, y, ‘*r’)

% Gráfica (ajuste)

hold on

grid on

plot(xx, yy, ‘b’)

% Evaluar en 45

r45 = polyval(p3, 45)

fprintf(‘La concentración aproximada a los 45 minutos es %.4f M\n’, r45);

Problema 2

% Inversa sin pivoteo

clc, clear, close all

xi = [0 5 10 15 20 25];

yi = [1 0.55 0.25 0.12 0.06 0.02];

% Cambio de variable

X = xi;

Y = log(yi);

% Obtener B con sistema de ecuaciones

% Sistema de ecuaciones 2×2

n = length(xi); % # datos

AA = [n, sum(X); sum(X), sum(X.^2)]; % Matriz de coeficientes % Las sumatorios son del cambio de variable

BB = [sum(Y); sum(X .* Y)]; % Vector términos independientes

% Resolviendo el sistema de ecuaciones

% Inversa (sin pivoteo)

[f, c] = size(AA);

M = [AA, eye(c)];

for i = 1:1:c % ciclo para hacer uno los pivotes

M(i, 🙂 = M(i, 🙂 / M(i, i);

for j = 1:1:c % Ciclo para hacer ceros

if i ~= j

M(j, 🙂 = M(j, 🙂 – M(j, i) * M(i, :);

end

end

end

% Matriz inversa

inversa = M(:, 3:4)

% Solución

s = inversa * BB

% Cuando es vector solo se coloca el número

A = s(2)

B = s(1)

% Cambio de variable para C

C = exp(B)

% Evaluación

x = 26;

y = C .* exp(A .* x); % Modelo exponencial

% Graficar

% Linealizada

plot(X, Y, ‘dk’); % Datos del modelo linealizado

grid on

hold on

x2 = min(X):0.1:max(X); % Datos del dominio

y2 = A * x2 + B;

plot(x2, y2, ‘b’); % Modelo Linealizado

title(‘Linealizada’);

xlabel(‘X’);

ylabel(‘Y’);

legend(‘Datos’, ‘Modelos’);

% Gráfica exponencial

figure

plot(xi, yi, ‘dr’);

grid on

hold on

x2 = min(xi) – 2:0.1:max(xi) + 3;

y2 = C * exp(A * x2);

plot(x2, y2, ‘g’); % Modelo

plot(x, y, ‘*k’); % Evaluación

title(‘Exponencial’);

xlabel(‘x’);

ylabel(‘y’);

legend(‘Datos’, ‘Modelo’, ‘Evaluación’);

Problema 3

clc, clear, close all

% Variables Independientes

x1 = [1 2 4 2 5 4 2 6 4 6 5 4 6 1 2]; % Horas

x2 = [1 3 5 2 1 1 0 3 4 2 4 4 5 0 1]; % Exámenes preparación

% Variable dependiente

y = [7.6 7.5 8.8 7.2 9.4 9.4 8.8 9.2 9 9.6 9 8.5 9.9 6.2 7.6]; % Calificaciones

% Sistema de ecuaciones

n = length(x1);

A = [n, sum(x1), sum(x2); sum(x1), sum(x1.^2), sum(x1 .* x2); sum(x2), sum(x1 .* x2), sum(x2.^2)]; % Matriz de coeficientes

B = [sum(y); sum(x1 .* y); sum(x2 .* y)]; % Vector puntos independientes

% Inversa

s = inv(A) * B

% Solución

B0 = s(1);

B1 = s(2);

B2 = s(3);

% Evaluación

Horas = 4;

Exam = 2;

C = B0 + B1 * Horas + B2 * Exam;

% Gráficas

plot3(x1, x2, y, ‘ob’); % Datos experimentales

grid on

% Creando el intervalo

X1 = min(x1):1:max(x1);

X2 = min(x2):1:max(x2);

[X1, X2] = meshgrid(X1, X2);

Y = B0 + B1 * X1 + B2 * X2;

hold on

mesh(X1, X2, Y); % Modelo

% Punto

plot3(Horas, Exam, C, ‘dr’); % Evaluación

title(‘Línea Múltiple’);

xlabel(‘Horas’);

ylabel(‘Exámenes’);

zlabel(‘Calificación’);

legend(‘Datos’, ‘Modelo’, ‘Evaluación’);

Problema 4

% Lagrange

clc, clear, close all

xi = [8 10 12 14]; % Variable independiente

yi = [0.0236 0.0475 0.0830 0.1736]; % Variable dependiente

x0 = xi(1); x1 = xi(2); x2 = xi(3); x3 = xi(4);

y0 = yi(1); y1 = yi(2); y2 = yi(3); y3 = yi(4);

syms x

L0 = ((x – x1) * (x – x2) * (x – x3)) / ((x0 – x1) * (x0 – x2) * (x0 – x3));

L1 = ((x – x0) * (x – x2) * (x – x3)) / ((x1 – x0) * (x1 – x2) * (x1 – x3));

L2 = ((x – x0) * (x – x1) * (x – x3)) / ((x2 – x0) * (x2 – x1) * (x2 – x3));

L3 = ((x – x0) * (x – x1) * (x – x2)) / ((x3 – x0) * (x3 – x1) * (x3 – x2));

% Polinomio

P3 = simplify((y0 * L0) + (y1 * L1) + (y2 * L2) + (y3 * L3));

% Evaluación

x = 11.7;

y = vpa(subs(P3, x), 5);

% Graficar

plot(xi, yi, ‘dr’);

grid on

hold on

% Graficar modelo

x2 = min(xi):0.1:max(xi);

y2 = subs(P3, x2);

plot(x2, y2, ‘b’);

title(‘Grado 3’);

xlabel(‘x’);

ylabel(‘y’);

legend(‘Datos experimentales’, ‘Polinomio grado 3’);

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.