You are on page 1of 4

6 EJERCICIOS DE FOR…END

1. Simulación de un sistema dinámico utilizando ecuaciones diferenciales: dx/dt = -x +


sin(t)

% Simulación del sistema dinámico dx/dt = -x + sin(t)


% Usando el método de Euler para resolver la ecuación diferencial

delta_t = 0.1; % Tamaño del paso de tiempo


t = 0:delta_t:10; % Vector de tiempo
x = zeros(size(t)); % Vector para almacenar la solución
x(1) = 0.5; % Condición inicial

for i = 2:length(t)
x(i) = x(i-1) + (-x(i-1) + sin(t(i-1))) * delta_t; % Método de Euler
end

plot(t, x);
xlabel('Tiempo');
ylabel('x');
title('Simulación de dx/dt = -x + sin(t)');

2. Calcula la suma de los 100 primeros números pares (empezando en el 2), utilizando (a)
un bucle for:

suma_for = 0;
for i = 2:2:200 % Empieza en 2 y suma los siguientes 100 números pares
suma_for = suma_for + i;
end
disp(['La suma de los primeros 100 números pares es (con bucle for):
', num2str(suma_for)]);

3. Escribe una M-función function [u]=ProdAb(A,b,n) que reciba como datos de entrada
una matriz cuadrada A de dimensión n, y un vector b de longitud n, y devuelva el
producto Ab calculado elemento a elemento mediante bucles, es decir, sin usar el
producto matricial de MATLAB.

function u = ProdAb(A, b, n)
% Verificar que A sea una matriz cuadrada de tamaño nxn y que b
sea un vector de longitud n
[filasA, columnasA] = size(A);
if filasA ~= n || columnasA ~= n || length(b) ~= n
error('Dimensiones incorrectas. A debe ser una matriz cuadrada
de dimensión n y b un vector de longitud n.');
end

u = zeros(n, 1); % Inicializar el vector resultado u con ceros

% Calcular el producto elemento a elemento


for i = 1:n
suma = 0;
for j = 1:n
suma = suma + A(i, j) * b(j);
end
u(i) = suma;
end
end

4. Calcular el área total determinada por la curva de ecuación y=sen(4ln(x+1)) y el eje OX


entre los puntos de abscisas x=0 y x=9, utilizando bucles.

a = 0; % Punto inicial del intervalo


b = 9; % Punto final del intervalo
n = 10000; % Número de divisiones (mayor número, mayor precisión)

h = (b - a) / n; % Ancho de cada subintervalo

area = 0; % Inicializar el área

for i = 1:n
x0 = a + (i - 1) * h;
x1 = a + i * h;

y0 = sin(4 * log(x0 + 1));


y1 = sin(4 * log(x1 + 1));

area = area + (h / 2) * (y0 + y1); % Aplicar la fórmula del


trapecio
end

disp(['El área aproximada bajo la curva es: ', num2str(area)]);

5. Resolver utilizando el bucle for: Escribir una M-función function FunInterp(f,a,b,n) que
reciba como argumentos de entrada
 f : un handle de una función
 a,b : un intervalo
 n : un número entero positivo n>2
La M-función debe construir una partición regular del intervalo [a,b] con n
puntos ,calcular los valores de la función f en dichos puntos , y calcular y dibujar juntas
en el intervalo [a,b] las gráficas de:
los puntos del soporte ,con marcadores
 El polinomio de interpolación global
 El interpolante lineal a trozos
 El spline cúbico
 La recta de regresión (ajuste mediante un polinomio de grado 1)
 La parábola de regresión (ajuste mediante un polinomio de grado 2) debidamente
identificadas.

% Construir una partición regular del intervalo [a, b] con n puntos


x = linspace(a, b, n);

% Calcular los valores de la función f en los puntos de la


partición
y = f(x);

% Calcular el polinomio de interpolación global


polinomio_interp = polyfit(x, y, n - 1);

% Calcular el interpolante lineal a trozos


interp_lineal = [];
for i = 1:length(x)-1
xi = x(i:i+1);
yi = y(i:i+1);
p = polyfit(xi, yi, 1);
interp_lineal = [interp_lineal, polyval(p, xi)];
end

% Calcular el spline cúbico


spline_cubico = spline(x, y);

% Calcular la recta de regresión (ajuste mediante un polinomio de


grado 1)
recta_regresion = polyfit(x, y, 1);

% Calcular la parábola de regresión (ajuste mediante un


polinomio de grado 2)
parabola_regresion = polyfit(x, y, 2);

% Graficar los resultados


plot(x, y, 'o', 'DisplayName', 'Puntos del soporte');
hold on;
fplot(@(x) polyval(polinomio_interp, x), [a, b], 'DisplayName',
'Polinomio de Interpolación');
plot(x, interp_lineal, 'DisplayName', 'Interpolante Lineal a
Trozos');
fnplt(spline_cubico, 'DisplayName', 'Spline Cúbico');
fplot(@(x) polyval(recta_regresion, x), [a, b], 'DisplayName',
'Recta de Regresión');
fplot(@(x) polyval(parabola_regresion, x), [a, b], 'DisplayName',
'Parábola de Regresión');
hold off;

% Añadir leyenda y etiquetas


legend('Location', 'best');
xlabel('x');
ylabel('f(x)');
title('Interpolación y Regresión');
end

6. Escribe una M-función función[w]=SuperaMedia(v) que reciba como argumento de


entrada un vector v y proporcione como salida otro vector w formado por las
componentes de v que tengan un valor mayor o igual que la media aritmética de todas
las componentes de v. Por ejemplo, si v=(10, 1 ,7 ) , entonces w=(10 ,7) ;si v=(6 ,5 ,6 ,
7), entonces w=(6 ,6 ,7 ). Utiliza el bucle for.

function w = SuperaMedia(v)
% Calcular la media aritmética de las componentes de v
media = mean(v);

% Inicializar un vector w vacío para almacenar las componentes que


superan la media
w = [];

% Iterar sobre el vector v y agregar las componentes mayores o


iguales que la media a w
for i = 1:length(v)
if v(i) >= media
w = [w, v(i)]; % Agregar la componente a w si supera la
media
end
end
end

You might also like