Está en la página 1de 3

function linealizacionEcuacion()

% Solicitar al usuario que ingrese los vectores x e y


x = input('Ingrese el vector x (con corchetes y separado por comas): ');
y = input('Ingrese el vector y (con corchetes y separado por comas): ');

% Solicitar al usuario que ingrese la opción deseada


opcion = input('Ingrese la opción deseada (exponencial, potencias o
raizcrecimiento): ', 's');

switch opcion
case 'exponencial'
% Linealización de la ecuación exponencial (y = a0 * exp(a1*x))
% Aplicamos logaritmo natural a ambos lados de la ecuación para
linealizarla
% log(y) = log(a0) + a1*x
% Ahora la ecuación es lineal: Y = A0 + A1*X, donde Y = log(y), A0 =
log(a0), A1 = a1
Y = log(y);
X = x;
% Usamos regresión lineal para encontrar los coeficientes A0 y A1
coeficientes = polyfit(X, Y, 1);
A0 = coeficientes(2);
A1 = coeficientes(1);
% Imprimimos los resultados
fprintf('Ecuación linealizada (log(y) = A0 + A1*x):\n');
fprintf('A0 = %f\n', A0);
fprintf('A1 = %f\n', A1);

% Solicitar al usuario un valor de x


valor_x = input('Ingrese un valor de x para calcular y: ');
% Calcular el valor correspondiente de y utilizando la ecuación
linealizada
valor_y = exp(A0 + A1 * valor_x);
% Mostrar el valor calculado de y
fprintf('El valor calculado de y para x = %f es: %f\n', valor_x,
valor_y);

case 'potencias'
% Linealización de la ecuación de potencias (y = a0 * x^a1)
% Tomamos logaritmo a ambos lados de la ecuación para linealizarla
% log(y) = log(a0) + a1*log(x)
% Ahora la ecuación es lineal: Y = A0 + A1*X, donde Y = log(y), X =
log(x), A0 = log(a0), A1 = a1
Y = log(y);
X = log(x);
% Usamos regresión lineal para encontrar los coeficientes A0 y A1
coeficientes = polyfit(X, Y, 1);
A0 = coeficientes(2);
A1 = coeficientes(1);
% Imprimimos los resultados
fprintf('Ecuación linealizada (log(y) = A0 + A1*log(x)):\n');
fprintf('A0 = %f\n', A0);
fprintf('A1 = %f\n', A1);

% Solicitar al usuario un valor de x


valor_x = input('Ingrese un valor de x para calcular y: ');
% Calcular el valor correspondiente de y utilizando la ecuación
linealizada
valor_y = exp(A0 + A1 * log(valor_x));
% Mostrar el valor calculado de y
fprintf('El valor calculado de y para x = %f es: %f\n', valor_x,
valor_y);

case 'raizcrecimiento'
% Linealización de la ecuación de raíz de crecimiento (y = a0 * (x /
(a1 + x)))
% Transformación de la ecuación
y_prime = 1 ./ y;
x_prime = 1 ./ x;
% Usamos regresión lineal para encontrar los coeficientes de la
nueva ecuación lineal
coeficientes = polyfit(x_prime, y_prime, 1);
A0 = 1 / coeficientes(2);
A1 = coeficientes(1) * A0;
% Imprimimos los resultados
fprintf('Ecuación linealizada (1/y = A0 + A1*(1/x)):\n');
fprintf('A0 = %f\n', A0);
fprintf('A1 = %f\n', A1);

% Solicitar al usuario un valor de x


valor_x = input('Ingrese un valor de x para calcular y: ');
% Calcular el valor correspondiente de y utilizando la ecuación
original
valor_y = A0 * (valor_x / (A1 + valor_x));
% Mostrar el valor calculado de y
fprintf('El valor calculado de y para x = %f es: %f\n', valor_x,
valor_y);

otherwise
disp('Opción no válida. Por favor, elige entre ''exponencial'',
''potencias'' o ''raizcrecimiento''.')
return; % Salir de la función si la opción no es válida
end

% Graficar la función original y la función linealizada


graficar(x, y, valor_x, valor_y);
end

function graficar(x, y, valor_x, valor_y)


% Graficar los datos originales y el valor calculado
figure;
plot(x, y, 'ro', 'DisplayName', 'Datos Originales');
hold on;
% Graficar el valor calculado
plot(valor_x, valor_y, 'gx', 'DisplayName', 'Valor Calculado');
xlabel('x');
ylabel('y');
title('Gráfica de la Función Original y Valor Calculado');
legend;
grid on;
% Eliminar la línea azul (opcional)
legend('Location', 'best');
end

También podría gustarte