Métodos Iterativos para Ecuaciones Lineales
Métodos Iterativos para Ecuaciones Lineales
FACULTAD DE INGENIERIA DE
PRODUCCION Y SERVICIOS
ESCUELA PROFESIONAL DE
INGENIERIA ELECTRICA
CURSO:
Métodos Numéricos Grupo “C”
TEMA:
Trabajo de Investigación Formativa N° 02
ALUMNOS:
⮚ Aguirre Sacsi, Luis Fernando
⮚ Ancco Panihuara, Aldo Javier
⮚ Arenas Huallpa, Andy Shelton
⮚ Galindo Oviedo, Joseph Alfredo
⮚ Villalba Torres, Jenfred Paul
Docente:
Mg. Bidder Sabino Calapuja Sambrano
AREQUIPA – PERÚ
2024
TRABAJO DE INVESTIGACIÓN FORMATIVA N° 02
I. PARTE II:
A. SISTEMAS DE ECUACIONES LINEALES MEDIANTE MÉTODOS ITERATIVOS
1. MÉTODO DE JACOBI
=
Segunda iteracion k=2 usando el vector hallado:
Iteraciones del 0 al 6
Iteración
0.30000 -1.12500 -1.11375 -1.06469 -0.9882 -0.99087 -
0.99705
1.50000 2.36250 3.23125 3.11047 3.02393 2.98241 2.99292
6.37500 5.88759 5.20781 4.88484 4.99240 4.99402 5.00888
Tolerancia 1.73557 1.10310 0.34829 0.12915 0.06631 0.01922
Iteraciones del 7 al 12
Iteración
-1.00107 -1.00063 -1.00011 -0.99991 -0.99996 -1.00000
2.99951 3.00128 3.00041 2.99997 2.99991 2.99998
5.00339 4.99992 4.99936 4.99982 5.00003 5.00004
Tolerancia 0.00947 0.00392 0.00116 0.00023 0.000007
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 10*x + y + 2*z = 3, introduce: "10*x + y + 2*z ==
11".');
disp('Nota: Usa "==" en lugar de "=" para definir la ecuación.');
syms x y z;
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
n = length(b);
x = x0;
x_new = zeros(size(x0));
for k = 1:max_iterations
for i = 1:n
sum_ = 0;
for j = 1:n
if j ~= i
sum_ = sum_ + A(i, j) * x(j);
end
end
x_new(i) = (b(i) - sum_) / A(i, i);
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n',
max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2),
x_new(3));
end
Iteración x y z
1 0.30000 1.50000 6.37500
2 -1.12500 2.36250 5.88759
3 -1.11375 3.23125 5.20781
4 -1.06469 3.11047 4.88484
5 -0.98821 3.02393 4.99240
6 -0.99705 2.98241 4.99402
7 -1.00107 2.99951 5.00339
8 -1.00063 3.00128 4.99992
9 -1.00011 3.00041 4.99936
10 -0.99991 2.99997 4.99982
11 -0.99996 2.99991 5.00003
12 -1.00000 2.99998 5.00004
Resolver:
Despejar
interacción 1
● x=y=z=0
interacción 2
● x=1.1 y=1 z=1
1.1
interacción 3
● x=1.1 y=1.32 z=1
1.132
interacción 4
● x=1.132 y=1.32 z=1.022
interacción 5
● x=1.1298 y=1.3286 z=1.0188
interacción 6
● x=1.13098 y=1.32784 z=1.01988
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
n = length(b);
x = x0;
x_new = zeros(size(x0));
for k = 1:max_iterations
for i = 1:n
sum_ = 0;
for j = 1:n
if j ~= i
sum_ = sum_ + A(i, j) * x(j);
end
end
x_new(i) = (b(i) - sum_) / A(i, i);
end
x = x_new;
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
Iteración x y z
1 1.10000 1.00000 1.00000
2 1.10000 1.32000 0.99000
3 1.13300 1.31900 1.02200
4 1.12970 1.32880 1.01860
5 1.13102 1.32780 1.01991
6 1.13079 1.32820 1.01968
Convergencia alcanzada en 6 iteraciones.
PASO 2
Dar un valor a las y despejar en cada ecuación.
PASO 3
Reemplazar y repetir hasta llegar al error deseado.
Iteración 1
Iteración 2
Iteración 3
Iteración 4
Iteración 5
Calculamos el error:
Iteración 6
Calculamos el error:
Respuesta
RESPUESTA EN MATLAB:
Sistema en forma matricial:
A = [25.0000 -0.9000 -0.3000 3.7000 -7.6000 -0.7000 0.9000 0.4000 -7.9000]
b = [24.5000-17.5000-56.8000]
Iteración x1 x2 x3
1 0.98000 2.30263 7.18987
2 1.14908 2.11745 7.66550
3 1.14824 2.15601 7.42787
...
1.- Inicializar las variables x,y,z con valores arbitarios (por ejwmplo ,x=0,y=0,z=0).
2.- calcular los nuevos valores de x,y,z utilizando las nuevas formullas
3.-repetir el paso 2 hasta que se alcance la convergencia (es decir, hasta que los valores
x,y,z dejen cde cambiar significativamente)
Iteración 1
Iteración 2
Iteración 3
Convergencia
Después de varias iteraciones ,los valores de x,y,z convergen a:
X=2.0625
Y=0.7875
Z=3.21875
Código en MAATLAB
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 10*x - y + z = 11, introduce: "10*x - y + z == 11".');
disp('Nota: Usa "==" en lugar de "=" para definir la ecuación.');
syms x y z;
% Definir las ecuaciones de acuerdo con el sistema dado
eq1 = '2*x + 3*y - z == 5'; % Ecuación 1: 2x + 3y - z = 5
eq2 = 'x - 2*y + 4*z == -2'; % Ecuación 2: x - 2y + 4z = -2
eq3 = '3*x + y + 2*z == 7'; % Ecuación 3: 3x + y + 2z = 7
% Convertir las ecuaciones a formato simbólico
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
% Convertir el sistema de ecuaciones a su forma matricial
[A, b] = equationsToMatrix([eq1, eq2, eq3], [x, y, z]);
disp('Sistema en forma matricial:');
disp('A = ');
disp(A);
disp('b = ');
disp(b);
% Configurar los parámetros de tolerancia e iteraciones
tolerance = input('Introduce la tolerancia (ejemplo: 1e-3): ');
max_iterations = input('Introduce el número máximo de iteraciones: ');
x0 = zeros(size(b)); % Por defecto comienza en [0, 0, 0]
n = length(b);
x = x0;
x_new = zeros(size(x0));
fprintf('Iteración\t x\t\t y\t\t z\n');
% Método iterativo (Método de Gauss-Seidel)
for k = 1:max_iterations
for i = 1:n
sum_ = 0;
for j = 1:n
if j ~= i
sum_ = sum_ + A(i, j) * x(j);
end
end
x_new(i) = (b(i) - sum_) / A(i, i);
end
% Mostrar los resultados de cada iteración
fprintf('%d\t\t %.5f\t %.5f\t %.5f\n', k, x_new(1), x_new(2), x_new(3));
% Verificar la convergencia
if norm(x_new - x, inf) < tolerance
fprintf('Convergencia alcanzada en %d iteraciones.\n', k);
break;
end
% Actualizar el valor de x para la siguiente iteración
x = x_new;
end
% Si no se alcanza la convergencia
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
2. MÉTODO DE GAUSS-SEIDEL
2da iteración:
3ra iteración:
4ta iteración:
5ta iteración:
Resolver mediante Gauss Seidel: Aproximar el sistema de ecuaciones; con vector inicial
(-6,3,4)
Solución:
La diagonal principal debe cumplir satisfactoriamente con el criterio de convergencia o
diagonal dominante, para ello:
Iteracion
0 -6 3 4 ---------------------
1 -4.833 3.922 -3.911 1.49670
2 -5.27037 4.15259 4.12938 0.53546
… … … … …
11 -5.44647 4.03577 4.38572 0.00016
12 -5.44646 4.03572 4.28573 0.00005
syms x y z;
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
for k = 1:max_iterations
x_new = x; % Copiar valores actuales para actualizarlos
for i = 1:n
sum1 = A(i, 1:i-1) * x_new(1:i-1); % Suma de los valores actualizados
sum2 = A(i, i+1:n) * x(i+1:n); % Suma de los valores previos
x_new(i) = (b(i) - sum1 - sum2) / A(i, i);
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
interación x y z
1 -6 3 4
2 -4.833 3.922 -3.911
3 -5.27037 4.15259 4.12938
4 -6.21415 5.18342 -2.17774
5 -7.45121 6.18920 4.27758
6 -6.21415 6.12493 4.29912
7 -6.12411 6.61221 4.31012
8 -5.82414 5.81242 4.31901
9 -5.44648 4.61214 4.33251
10 -5.44647 4.12312 4.35012
11 -5.44646 4.03577 4.38572
12 -5.44646 4.03572 4.28573
Resolver:
Despejar
Iteración 1:
● x=y=z=0
Iteración 2:
● x=1.75 y=2.08333 z=-1.96667
Iteración 3:
● x=2.7625 y=2.09306 z=-2.17111
Iteración 4:
● x=2.81604 y=2.07683 z=-2.17857
Iteración 5:
● x=2.81385 y=2.07485 z=-2.17774
=-2.17758
usando el código :
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 4*x - y + z = 7, ingresa: "4*x - y + z == 7".');
disp('Nota: Usa "==" en lugar de "=" para las ecuaciones.');
syms x y z;
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
for k = 1:max_iterations
x_new = x; % Copiar valores actuales para actualizarlos
for i = 1:n
sum1 = A(i, 1:i-1) * x_new(1:i-1); % Suma de los valores actualizados
sum2 = A(i, i+1:n) * x(i+1:n); % Suma de los valores previos
x_new(i) = (b(i) - sum1 - sum2) / A(i, i);
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
interación x y z
1 1.75000 2.08333 -1.96667
2 2.76250 2.09306 -2.17111
3 2.81604 2.07683 -2.17857
4 2.81385 2.07485 -2.17774
5 2.81315 2.07476 -2.17758
1.- calcular el nuevo valor de z utilizando la tercera ecuación y los nuevos valores de x y y
Se repiten los pasos 2 y 4 hasta que los valores de x,y,z dejen de cambiar significativamente
Iteración 1
Iteracion 2
Iteracion 3
Código en MATLAB
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 4*x - y + z = 7, ingresa: "4*x - y + z == 7".');
disp('Nota: Usa "==" en lugar de "=" para las ecuaciones.');
syms x y z;
% Definir las ecuaciones del sistema
eq1 = '3*x + 2*y - z == 10'; % Ecuación 1: 3x + 2y - z = 10
eq2 = 'x - 3*y + 2*z == -5'; % Ecuación 2: x - 3y + 2z = -5
eq3 = '2*x + y + 4*z == 7'; % Ecuación 3: 2x + y + 4z = 7
% Convertir las ecuaciones a formato simbólico
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
% Extraer la matriz de coeficientes y el vector de términos independientes
[A, b] = equationsToMatrix([eq1, eq2, eq3], [x, y, z]);
disp('Sistema en forma matricial:');
disp('A = ');
disp(A);
disp('b = ');
disp(b);
% Solicitar parámetros del usuario
tolerance = input('Introduce la tolerancia (ejemplo: 1e-3): ');
max_iterations = input('Introduce el número máximo de iteraciones: ');
x0 = zeros(size(b)); % Solución inicial [0, 0, 0]
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
% Método iterativo de Gauss-Seidel
for k = 1:max_iterations
x_new = x; % Copiar valores actuales para actualizarlos
for i = 1:n
sum1 = A(i, 1:i-1) * x_new(1:i-1); % Suma de los valores actualizados
sum2 = A(i, i+1:n) * x(i+1:n); % Suma de los valores previos
x_new(i) = (b(i) - sum1 - sum2) / A(i, i);
end
% Mostrar los resultados de cada iteración
fprintf('%d\t\t %.5f\t %.5f\t %.5f\n', k, x_new(1), x_new(2), x_new(3));
% Verificar la convergencia
if norm(x_new - x, inf) < tolerance
fprintf('Convergencia alcanzada en %d iteraciones.\n', k);
break;
end
x = x_new; % Actualizar para la siguiente iteración
end
% Si no se alcanza la convergencia
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
3. MÉTODO DE RELAJACIÓN
Con solucion (3,4,-5)t, determine las ecuaciones para el método SOR con =1.25 y
Para k=1
Para k=2
Para k=3
Para k=4
Para k=5
Para k=6
Usando:
Para
Para
Para
syms x y z;
try
eq1 = input('Ecuación 1: ', 's');
eq2 = input('Ecuación 2: ', 's');
eq3 = input('Ecuación 3: ', 's');
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
for k = 1:max_iterations
x_new = x;
for i = 1:n
sum1 = A(i, 1:i-1) * x_new(1:i-1);
sum2 = A(i, i+1:n) * x(i+1:n);
x_new(i) = (1 - omega) * x(i) + (omega / A(i, i)) * (b(i) - sum1 - sum2);
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
interación x y z
1 -0.45000 5.25000 -4.29751
2 1.65000 4.36120 5.67211
3 1.97251 4.05412 5.95512
Resolver:
Despejar
Iteración 1:
● x=y=z=0
Iteración 2:
● x=0.75 y=1.13281 z=-0.6543
Iteración 3
● x=0.92749 y=0.83057 z=-0.61065
Iteración 4
● x=0.8021 y=0.85418 z=-0.58432
Iteración 5
● x=0.83606 y=0.86831 z=-0.59586
Usando el código
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 10*x - 2*y + z = 6, escribe: "10*x - 2*y + z == 6".');
disp('Nota: Usa "==" en lugar de "=" para las ecuaciones.');
syms x y z;
try
eq1 = input('Ecuación 1: ', 's');
eq2 = input('Ecuación 2: ', 's');
eq3 = input('Ecuación 3: ', 's');
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
x0 = zeros(size(b));
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
for k = 1:max_iterations
x_new = x;
for i = 1:n
sum1 = A(i, 1:i-1) * x_new(1:i-1);
sum2 = A(i, i+1:n) * x(i+1:n);
x_new(i) = (1 - omega) * x(i) + (omega / A(i, i)) * (b(i) - sum1 - sum2);
end
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
Iteración x y z
1 0.75000 1.13281 -0.65430
2 0.92749 0.83057 -0.61065
3 0.80210 0.85418 -0.58432
4 0.83606 0.86831 -0.59586
5 0.83254 0.86133 -0.59384
METODO DE RELAJACION
Repetir los pasos 2 y 4 hasta que se alcance la convergencia (los residuos sean menores
que un valor umbral)
Iteración 1=
R1=10-2*0-3*0+0=10
R2=-5-0+2*0-4*0=-5
R3=12-3*0-0-2*0=12
Iteración 2=
R1=10-2*-5-3*-2.5+(-6)=10
R2=-5-(-5)+2*(-2.5)-4*(-6)=13
R3=12-3*(-5)-(-2.5)-2(-6)=30.5
Convergencia
Después de varias iteraciones, los residuos se vuelven menores que un valor umbral (por
ejemplo 0.01).en este caso la convergencia se alcanza después de 5 iteraciones
Solución
X=-6.75
Y=-4
Z=-21.25
Código en MATLAB
disp('Introduce las ecuaciones en forma simbólica.');
disp('Ejemplo: Para la ecuación 10*x - 2*y + z = 6, escribe: "10*x - 2*y + z == 6".');
disp('Nota: Usa "==" en lugar de "=" para las ecuaciones.');
syms x y z;
try
% Definir las ecuaciones del sistema
eq1 = '2*x + 3*y - z == 10'; % Ecuación 1: 2x + 3y - z = 10
eq2 = 'x - 2*y + 4*z == -5'; % Ecuación 2: x - 2y + 4z = -5
eq3 = '3*x + y + 2*z == 12'; % Ecuación 3: 3x + y + 2z = 12
% Convertir las ecuaciones a formato simbólico
eq1 = str2sym(eq1);
eq2 = str2sym(eq2);
eq3 = str2sym(eq3);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
% Extraer la matriz de coeficientes y el vector de términos independientes
[A, b] = equationsToMatrix([eq1, eq2, eq3], [x, y, z]);
disp('Sistema en forma matricial:');
disp('A = ');
disp(A);
disp('b = ');
disp(b);
% Solicitar parámetros del usuario
tolerance = input('Introduce la tolerancia (ejemplo: 1e-3): ');
max_iterations = input('Introduce el número máximo de iteraciones: ');
omega = input('Introduce el factor de relajación (ejemplo: 1.25): ');
x0 = zeros(size(b)); % Inicialización de la solución (vector cero)
n = length(b);
x = x0;
fprintf('Iteración\t x\t\t y\t\t z\n');
% Método iterativo de Gauss-Seidel con relajación (Método de SOR)
for k = 1:max_iterations
x_new = x; % Copiar valores actuales para actualizarlos
for i = 1:n
% Sumar los productos de los coeficientes anteriores y las soluciones previas
sum1 = A(i, 1:i-1) * x_new(1:i-1);
sum2 = A(i, i+1:n) * x(i+1:n); % Sumar los productos de los coeficientes posteriores y
las soluciones anteriores
% Actualización de la variable en la posición i, con el factor de relajación
x_new(i) = (1 - omega) * x(i) + (omega / A(i, i)) * (b(i) - sum1 - sum2);
end
% Mostrar resultados de cada iteración
fprintf('%d\t\t %.5f\t %.5f\t %.5f\n', k, x_new(1), x_new(2), x_new(3));
% Verificar si se ha alcanzado la convergencia
if norm(x_new - x, inf) < tolerance
fprintf('Convergencia alcanzada en %d iteraciones.\n', k);
break;
end
x = x_new; % Actualizar la solución para la siguiente iteración
end
% Si no se alcanza la convergencia
if k == max_iterations
fprintf('El método no convergió después de %d iteraciones.\n', max_iterations);
else
fprintf('La solución aproximada es: [%.5f, %.5f, %.5f]\n', x_new(1), x_new(2), x_new(3));
end
Calcular el vector
Solución:
Se quiere resolver el sistema de ecuaciones del tipo
La funcion:
Y la matriz jacobi:
La aproximación inicial es calculamos:
syms x y;
try
f1 = str2sym(eq1);
f2 = str2sym(eq2);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
for k = 1:max_iter
x0 = x0 + delta(1);
y0 = y0 + delta(2);
if k == max_iter
fprintf('El método no convergió después de %d iteraciones.\n', max_iter);
else
fprintf('Solución aproximada: x = %.5f, y = %.5f\n', x0, y0);
end
Gráfica:
2. Resolver
Calcular el vector
Solución:
Se quiere resolver el sistema de ecuaciones del tipo
La funcion:
Y la matriz jacobi:
syms x y;
try
f1 = str2sym(eq1);
f2 = str2sym(eq2);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
for k = 1:max_iter
x0 = x0 + delta(1);
y0 = y0 + delta(2);
if k == max_iter
fprintf('El método no convergió después de %d iteraciones.\n', max_iter);
else
fprintf('Solución aproximada: x = %.5f, y = %.5f\n', x0, y0);
end
iteración x y
1 0.50000 0.25000
2 0.486463 0.233773
3 0.486405 0.233725
4 0.486405 0.233725
5 0.486405 0.233725
3. Resolver
Punto inicial:
Tolerancia:
Entonces, .
Calcular el Jacobiano :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
–
Entonces, el Jacobiano es:
Iteración 2
Nuevo punto:
1. Evaluación de :
Entonces, .
2. Calcular el Jacobiano :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
3. Resolver :
4. Actualizar el valor de :
Iteración 3
Nuevo punto:
1. Evaluación de :
Entonces, .
2. Calcular el Jacobiano :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
3. Resolver : Calculamos:
4. Actualizar el valor de :
Iteración 4
Nuevo punto:
1. Evaluación de :
Entonces, .
2. Calcular el Jacobiano :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
3. Resolver : Calculamos:
4. Actualizar el valor de :
Iteración 5
Nuevo punto:
1. Evaluación de :
Entonces, .
Calcular el Jacobiano :
– Derivada parcial de respecto a :
– Derivada parcial de respecto a :
Resolver : Calculamos:
Actualizar el valor de :
4. Resolver
Interacción 1
xo=1 yo=1
Interacción 2
xo=-1.16396 yo=4.16395
Interacción 3
xo=-4.05675 yo=1.59097
Interacción 4
xo=-2.45881 yo=0.95503
Interacción 5
xo=-1.89193 yo=0.86597
syms x y;
try
f1 = str2sym(eq1);
f2 = str2sym(eq2);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
for k = 1:max_iter
x0 = x0 + delta(1);
y0 = y0 + delta(2);
if k == max_iter
fprintf('El método no convergió después de %d iteraciones.\n', max_iter);
else
fprintf('Solución aproximada: x = %.5f, y = %.5f\n', x0, y0);
end
Iteración x y
1 -1.16395 4.16395
2 -4.05668 1.59100
3 -2.45878 0.95504
4 -1.89192 0.86597
5 -1.81769 0.83803
5. Resolver
Interacción 1
xo=1.5 yo=1.5
Interacción 2
xo=1.3125 yo=1.3125
Interacción 3
xo=1.3028 yo=1.3028
syms x y;
try
f1 = str2sym(eq1);
f2 = str2sym(eq2);
catch
error('Error al interpretar las ecuaciones. Verifica que estén escritas correctamente.');
end
J = jacobian([f1, f2], [x, y]);
for k = 1:max_iter
x0 = x0 + delta(1);
y0 = y0 + delta(2);
if k == max_iter
fprintf('El método no convergió después de %d iteraciones.\n', max_iter);
else
fprintf('Solución aproximada: x = %.5f, y = %.5f\n', x0, y0);
end
iteración x y
1 1.31250 1.31250
2 1.30280 1.30280
3 1.30278 1.30278
Convergencia alcanzada en 3 iteraciones.
6. Resolver
Tabla de valores
n x f(x) df/dx xnuevo
1 50 120148.738 7303.965 33.5502
2 33.5502 35613.9146 3245.114 22.57558
3 22.57558 10552.6525 1440.833 15.25158
4 15.25158 3127.65671 638.9284 10.35642
5 10.35642 925.539025 282.7443 7.08301
6 7.08301 275.975897 125.8719 4.890495
7 4.890495 81.8191088 55.36601 3.412709
8 3.412709 25.4235583 23.32544 2.32276
9 2.32276 8.43998522 9.211525 1.406518
10 1.406518 3.03200855 3.472346 0.53333
11 0.53333 0.69121397 2.581121 0.265534
12 0.265534 -0.0632663 3.11434 0.285849
13 0.285849 -0.0005437 3.061156 0.286027
14 0.286027 -4.049E-08 3.0607 0.286027
15 0.286027 0 3.0607 0.286027
16 0.286027 0 3.0607 0.286027
Solución
X=0.286027
Código en MATLAB
disp('Introduce la ecuación no lineal en forma simbólica.');
disp('Ejemplo: Para la ecuación x^3 - 2x^2 + 3x - 1 + sin(x) = 0, escribe: "x^3 - 2*x^2 + 3*x -
1 + sin(x)"');
syms x;
try
% Solicitar la ecuación en formato simbólico
eq1 = input('Ecuación 1 (f1): ', 's');
f1 = str2sym(eq1); % Convertir la cadena a una expresión simbólica
catch
error('Error al interpretar la ecuación. Verifica que esté escrita correctamente.');
end
% Calcular la derivada de la función (para el método de Newton-Raphson)
f1_prime = diff(f1, x);
% Convertir las funciones y su derivada a funciones de MATLAB
F = matlabFunction(f1, 'Vars', {x});
F_prime = matlabFunction(f1_prime, 'Vars', {x});
% Solicitar el valor inicial
x0 = input('Introduce el valor inicial para x: ');
7. Resolver
Solución
X=1.41539
Código en MATLAB
disp('Introduce la ecuación no lineal en forma simbólica.');
disp('Ejemplo: Para la ecuación x^2 - 3x + 2 + exp(-x) = 0, escribe: "x^2 - 3*x + 2 + exp(-x)"');
syms x;
try
% Solicitar la ecuación en formato simbólico
eq1 = input('Ecuación 1 (f1): ', 's');
f1 = str2sym(eq1); % Convertir la cadena a una expresión simbólica
catch
error('Error al interpretar la ecuación. Verifica que esté escrita correctamente.');
end
% Calcular la derivada de la función (para el método de Newton-Raphson)
f1_prime = diff(f1, x);
% Convertir las funciones y su derivada a funciones de MATLAB
F = matlabFunction(f1, 'Vars', {x});
F_prime = matlabFunction(f1_prime, 'Vars', {x});
% Solicitar el valor inicial
x0 = input('Introduce el valor inicial para x: ');
% Solicitar la tolerancia y el número máximo de iteraciones
tol = input('Introduce la tolerancia (ejemplo: 1e-3): ');
max_iter = input('Introduce el número máximo de iteraciones: ');
fprintf('Iteración\t x\n');
% Método de Newton-Raphson
for k = 1:max_iter
F_eval = F(x0); % Evaluar la función en x0
F_prime_eval = F_prime(x0); % Evaluar la derivada en x0
% Actualización de la variable x
delta = -F_eval / F_prime_eval; % Fórmula de Newton-Raphson
x0 = x0 + delta; % Nueva aproximación
8. Resolver
Mediante el Metodo de Newton Rhapson, para sistemas, determine una iteración
utilizando
Sabiendo
que
Interacción 1
Para i=0
9. Resolver: Encontrar una buena aproximación a una raíz de la siguiente función
usando el método de Newton Raphson . Tomar como partida x=1
Sabemos que si
Hallando la
1ra iteración:
2da iteración:
3ra iteración:
4ta iteración:
5ta iteración:
Iteración 0 1 2 3
x 0 1 2 3
Y -1 6 31 18
Valores de la tabla
Reordenando:
En forma matricicial y resolviendo el sistema por el Metodo de gauss – jordán
Se obtiene:
Finalmente:
Reemplazando:
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
A = zeros(n);
for i = 1:n
for j = 1:n
A(i, j) = x(i)^(j-1);
end
end
coef = A \ y';
Solucion:
Coeficientes del polinomio cúbico:
9.333 37.000 -20.667 -1
Solución:
Matricialmente:
Resolviendo
x =130, I=6.50Amp
SOLUCION EN MATLAB:
% Datos de entrada
x = [100, 120, 140, 160]; % Tensión en V
y = [5, 6, 7, 8]; % Corriente en A
% Matriz de Vandermonde
A = vander(x);
% Resolver el sistema lineal A * coef = y
coef = A \ y';
% Evaluar el polinomio en x = 130
x_eval = 130;
current_at_130 = polyval(coef, x_eval);
% Mostrar resultados
disp('Coeficientes del polinomio cúbico:');
disp(coef');
disp(['Corriente cuando la tensión es 130 V: ', num2str(current_at_130), ' A']);
SOLUCION:
Coeficientes del polinomio cúbico:
-2.5093e-20 9.9476e-18 5.0000e-02 5.4401e-14
Resolver:
(1,1),(2,4),(3,9). Evalúa en x=2.5
N=2
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
A = zeros(n);
for i = 1:n
for j = 1:n
A(i, j) = x(i)^(j-1);
end
end
coef = A \ y';
P(x)=2+3*(x-1)+2*(x-1)*(x-2)+1*(x-1)(x-2)(x-3)
P(x)=2+3*(x-1)+2*(x-1)*(x-2)+1*(x-1)(x-2)(x-3)
P(x)=2+3x-3+2*(x-1)*(x-2)+1*(x-1)(x-2)(x-3)
P(x)=2+3x-3+2*(x^2-2x-x+2)+(x-1)(x-2)(x-3)
P(x)=2+3x-3+2*(x^2-2x-x+2)+(x-1)(x-2)(x-3)
P(x)=2+3x-3+2*(x^2-3x+2)+(x-1)(x-2)(x-3)
P(x)=-1+3x+2*(x^2-3x+2)+(x-1)(x-2)(x-3)
P(x)=-1+3x+2x^2-6x+4+(x-1)(x-2)(x-3)
P(x)=-1+3x+2x^2-6x+4+(x^2-2x-x+2)(x-3)
P(x)=-1+3x+2x^2-6x+4+(x^2-3x+2)(x-3)
P(x)=-1+3x+2x^2-6x+4+(x^3-3x^2+2x-3x^2+9x-6)
P(x)=-1+3x+2x^2-6x+4+(x^3-6x^2+11x-6)
P(x)=-1+3x+2x^2-6x+4+x^3-6x^2+11x-6
P(x)=x^3-4x^2+8x-6
Código en MATLAB
% Definición del polinomio P(x) = x^3 - 4x^2 + 8x - 6
fprintf('Interpolación polinómica para el polinomio P(x) = x^3 - 4x^2 + 8x - 6\n');
% Definir los puntos de evaluación manualmente para interpolar
n = 4; % Número de puntos
x = [1, 2, 3, 4]; % Puntos de x para la interpolación (puedes cambiar estos puntos si lo
deseas)
y = x.^3 - 4*x.^2 + 8*x - 6; % Puntos correspondientes de y usando P(x)
% Matriz del sistema de ecuaciones
A = zeros(n);
for i = 1:n
for j = 1:n
A(i, j) = x(i)^(j-1); % Construir la matriz de coeficientes
end
end
% Resolver el sistema de ecuaciones para obtener los coeficientes
coef = A \ y';
% Mostrar el polinomio interpolador
fprintf('\nEl polinomio interpolador es:\n');
syms X;
P = 0;
for i = 1:n
if coef(i) ~= 0
fprintf('%+.4f*X^%d ', coef(i), i-1);
end
P = P + coef(i) * X^(i-1); % Construir el polinomio
end
fprintf('\n\n');
% Evaluar el polinomio interpolador en un valor de x
x_eval = input('Introduce el valor de x a evaluar: ');
y_eval = double(subs(P, X, x_eval));
fprintf('El valor interpolado en x = %.4f es y = %.4f\n', x_eval, y_eval);
% Graficar el polinomio y los puntos originales
x_plot = linspace(min(x), max(x), 100); % Crear puntos para la gráfica
y_plot = double(subs(P, X, x_plot)); % Evaluar el polinomio en estos puntos
% Graficar
plot(x, y, 'ro', 'MarkerSize', 8, 'LineWidth', 2); hold on;
plot(x_plot, y_plot, 'b-', 'LineWidth', 2);
xlabel('x'); ylabel('f(x)');
title('Interpolación Polinómica');
legend('Puntos originales', 'Polinomio Interpolador');
grid on;
Interpolación polinómica
x -2 0 2 3
y=g(x) -4 0 4 21
Resolviendo
Ecuacion polinómica:
CODIGOS EN MATLAB
%Datos de ingreso
%valores en "x" obtenidos de los datos
x=[-2 0 2 3];
%valores en "y" obtenidos de los datos
y=[-4 0 4 21];
% Matriz de Vandermonde
A = vander(x);
% Resolver el sistema lineal A * coef = y
coef = A \ y';
% Evaluar el polinomio en cualquier valor de "x", por ejemplo 5
x_eval = 5;
current_at_5 = polyval(coef, x_eval);
% Mostrar resultados
disp('Coeficientes del polinomio cúbico:');
disp(coef');
B. INTERPOLACIÓN DE LAGRANGE
Obtener el polinomio interpolador para cierta funcion:
x = zeros(1, n);00
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
P_eval = 0;
syms X;
P = 0;
for i = 1:n
L_i = 1;
for j = 1:n
if i ~= j
L_i = L_i * (X - x(j)) / (x(i) - x(j));
end
end
P = P + y(i) * L_i;
-(1/12)*x^3 + (20/12)*x^2 – 1
Grafica de la funcion:
Resolver: Dados los valores pares puntos: (-2,0); (0,6); (2.2) y (4,8) ; evaluar f(-1)
PASO 1
Escribimos la fórmula de interpolación por Lagrange.
PASO 2
Ubicamos nuestros puntos.
PASO 3
Empezamos a reemplazar los puntos en la fórmula hallando las
PASO 4
Reemplazamos y en la fórmula.
PASO 5
Simplificamos en polinomio y graficamos para comprobar los puntos.
PASO 6
Evaluar f (-1)
PROGRAMACION:
Código en MATLAB
% Datos de entrada
x = [-2, 0, 2, 4]; % Coordenadas en x
y = [0, 6, 2, 8]; % Coordenadas en y
% Método de Lagrange
n = length(x); % Número de puntos
for i = 1:n
% Calcular el término de Lagrange L_i(x)
L_i = 1;
for j = 1:n
if j ~= i
L_i = L_i * (x_eval - x(j)) / (x(i) - x(j));
end
end
% Sumar el término L_i * y_i al polinomio
f_eval = f_eval + L_i * y(i);
end
% Mostrar el resultado
fprintf('El valor de f(%f) es aproximadamente %f\n', x_eval, f_eval);
El valor de f(-1.000000) es aproximadamente 5.500000
Frecuencia de
Capacitancia (CCC,
resonancia (fff,
μF)
kHz)
2 1.2
4 0.85
6 0.65
8 0.55
PASO 1
Escribimos la fórmula de interpolación por Lagrange.
PASO 2
Ubicamos nuestros puntos.
PASO 3
Empezamos a reemplazar los puntos en la fórmula hallando las .
PASO 4
Reemplazamos y en la fórmula.
PASO 5
Simplificamos en polinomio y graficamos para comprobar los puntos.
PASO 6
Evaluar P (5)
SOLUCION EN MATLAB:
% Paso 1: Datos iniciales
x = [2, 4, 6, 8]; % Capacitancia (μF)
y = [1.2, 0.85, 0.65, 0.55]; % Frecuencia de resonancia (kHz)
% Paso 2: Inicialización de Lagrange
syms X; % Declarar una variable simbólica para el polinomio
n = length(x); % Número de puntos
P = 0; % Inicializar el polinomio de Lagrange
% Paso 3: Construir el polinomio de Lagrange
for i = 1:n
L_i = 1; % Inicializar el término base de L_i
for j = 1:n
if j ~= i
L_i = L_i * (X - x(j)) / (x(i) - x(j)); % Producto de términos
end
end
P = P + y(i) * L_i; % Construir el polinomio
end
% Simplificar el polinomio
P = simplify(P);
RESPUESTA:
Polinomio de Lagrange
P(x): -(1/960)*X^3 + (1/32)*X^2 - (1/3)*X + 7/6
Potencia de carga
Eficiencia (%)
(kW)
10 88
20 92
30 93.5
40 94
PASO 1
Escribimos la fórmula de interpolación por Lagrange.
PASO 2
Ubicamos nuestros puntos.
PASO 3
Empezamos a reemplazar los puntos en la formula hallando las
PASO 4
Reemplazamos y en la formula.
PASO 5
Simplificamos en polinomio y graficamos para comprobar los puntos.
PASO 6
Evaluar P (25)
RESPUESTA:
Construcción de L_i(x):
L_0(x): -((X - 20)*(X - 30)*(X - 40))/6000
L_1(x): ((X - 10)*(X - 30)*(X - 40))/2000
L_2(x): -((X - 10)*(X - 20)*(X - 40))/2000
L_3(x): ((X - 10)*(X - 20)*(X - 30))/6000
Polinomio de Lagrange P(x): 1/4000*X^3 - 11/400*X^2 + 21/20*X + 80
P(25) = 92.97 %
PASO 1
Escribimos la fórmula de interpolación por Lagrange.
PASO 2
Ubicamos nuestros puntos.
PASO 3
Empezamos a reemplazar los puntos en la fórmula hallando las .
PASO 4
Reemplazamos y en la fórmula.
PASO 5
Simplificamos en polinomio y graficamos para comprobar los puntos.
SOLUCION EN MATLAB:
lagrange_interpolacion
Número de puntos: 4
x(1): -1
y(1): 1
x(2): 0
y(2): -1
x(3): 2
y(3): 2
x(4): 3
y(4): 2
Introduce el valor de x para evaluar el polinomio: 1
El polinomio de interpolación de Lagrange es:
-(5/12)*x^3 + (19/12)*x^2 - 1
PASO 1
Escribimos la fórmula de interpolación por Lagrange.
PASO 2
Ubicamos nuestros puntos.
PASO 3
Empezamos a reemplazar los puntos en la fórmula hallando las
PASO 4
Reemplazamos y en la fórmula.
PASO 5
Simplificamos en polinomio y graficamos para comprobar los puntos.
RESPUESTA DE MATLAB:
Número de puntos: 4
f(1): 50
Zc(f_1): 45
f(2): 60
Zc(f_2): 40
f(3): 70
Zc(f_3): 38
f(4): 90
Zc(f_4): 30
Introduce el valor de x para evaluar el polinomio: 65
Resolver: (1,1)(4,2)(6,3.5)(7,5)
+3.5* +5*
-7*
+5*
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
P_eval = 0;
syms X;
P = 0;
for i = 1:n
L_i = 1;
for j = 1:n
if i ~= j
L_i = L_i * (X - x(j)) / (x(i) - x(j));
end
end
P = P + y(i) * L_i;
P(x)=2*L1(X)+4*L2(X)+6*L3(X)+8*L4(X)
DONDE
Simplificando la expresión
P(x)=2*L1(X)+4*L2(X)+6*L3(X)+8*L4(X)
P(x)=
Código en MATLAB
% Definición del polinomio P(x) = X^3 - 5X^2 + 10X - 2
fprintf('Interpolación polinómica para el polinomio P(x) = X^3 - 5X^2 + 10X - 2\n');
% Definir los puntos de evaluación manualmente para interpolar
n = 4; % Número de puntos
x = [1, 2, 3, 4]; % Puntos de x para la interpolación (puedes cambiar estos puntos si lo
deseas)
y = x.^3 - 5*x.^2 + 10*x - 2; % Puntos correspondientes de y usando P(x)
% Matriz del sistema de ecuaciones
A = zeros(n);
for i = 1:n
for j = 1:n
A(i, j) = x(i)^(j-1); % Construir la matriz de coeficientes
end
end
% Resolver el sistema de ecuaciones para obtener los coeficientes
coef = A \ y';
% Mostrar el polinomio interpolador
fprintf('\nEl polinomio interpolador es:\n');
syms X;
P = 0;
for i = 1:n
if coef(i) ~= 0
fprintf('%+.4f*X^%d ', coef(i), i-1);
end
P = P + coef(i) * X^(i-1); % Construir el polinomio
end
fprintf('\n\n');
% Evaluar el polinomio interpolador en un valor de x
x_eval = input('Introduce el valor de x a evaluar: ');
y_eval = double(subs(P, X, x_eval));
fprintf('El valor interpolado en x = %.4f es y = %.4f\n', x_eval, y_eval);
% Graficar el polinomio y los puntos originales
x_plot = linspace(min(x), max(x), 100); % Crear puntos para la gráfica
y_plot = double(subs(P, X, x_plot)); % Evaluar el polinomio en estos puntos
% Graficar
plot(x, y, 'ro', 'MarkerSize', 8, 'LineWidth', 2); hold on;
plot(x_plot, y_plot, 'b-', 'LineWidth', 2);
xlabel('x'); ylabel('f(x)');
title('Interpolación Polinómica');
legend('Puntos originales', 'Polinomio Interpolador');
grid on;
Reemplazamos y en la fórmula.
Simplificamos en polinomio y graficamos para comprobar los puntos.
Código en MATLAB
function ecuacion=mlagrange(xi,fxi)
n=length(xi);
syms x;
for i=1:n
Li=1;
for j=1:n
if j~=i
Li=Li*((x-xi(j))/(xi(i)-xi(j)));
end
end
L(i)=Li;
end
ecuacion=0;
for i=1:n
ecuacion=L(i)*fxi(i)+ecuacion;
end
ecuacion=simplify(expand(ecuacion));
end
ecuacion =
(9*x)/2 - (5*x^2)/2 + 1
1 2 3 4
120 94 75 62
Reemplanzado:
Para i=x=3.5
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
DD = zeros(n, n);
DD(:,1) = y';
for j = 2:n
for i = 1:n-j+1
DD(i,j) = (DD(i+1,j-1) - DD(i,j-1)) / (x(i+j-1) - x(i));
end
end
syms X;
P = y(1);
for k = 2:n
term = 1;
for m = 1:k-1
term = term * (X - x(m));
end
P = P + DD(1,k) * term;
end
El valor interpolado en x = es y =
Evaluar en x=2.5
x 1 2 3 4
F(x) 2 4 10 18
Bo=2
B1=2
B2=2
B3=-1/3
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
DD = zeros(n, n);
DD(:,1) = y';
for j = 2:n
for i = 1:n-j+1
DD(i,j) = (DD(i+1,j-1) - DD(i,j-1)) / (x(i+j-1) - x(i));
end
end
syms X;
P = y(1);
for k = 2:n
term = 1;
for m = 1:k-1
term = term * (X - x(m));
end
P = P + DD(1,k) * term;
end
Resolver.- Encontrar el polinomio de interpolación que pase por los puntos (1,2),(2,4),(3,6) y
(4,8)
Calculando las diferencias divididas
Luego aplicamos la fórmula de interpolación de newton
P(x)=2+(x-1)*2+(x-1)*(x-2)*0+(x-1)*(x-2)*(x-3)*0
% Graficar
plot(x, y, 'ro', 'MarkerSize', 8, 'LineWidth', 2); hold on;
plot(x_plot, y_plot, 'b-', 'LineWidth', 2);
xlabel('x'); ylabel('f(x)');
title('Interpolación Polinómica');
legend('Puntos originales', 'Polinomio Interpolador');
grid on;
Resolver: Hallar el polinomio de interpolación que pase por los puntos (-1,4),(0,1) y (2,-1)
El polinomio esta dado por:
Pn(x)=d0+d1(x-x0)+d2(x-x0)(x-x1)+d3(x-x0)(x-x1)(x-x2)+… +dn(x-x0)(x-x1)(x-x2)…(x-xn)
Hallando
X0 X1 x2
x -1 0 2
y 4 1 -1
d0 4
d1
d2
Pn(x)=d0+d1(x-x0)+d2(x-x0)(x-x1)+d3(x-x0)(x-x1)(x-x2)+… +dn(x-x0)(x-x1)(x-x2)…(x-xn)
P2(x)= d0+d1(x+1)+d2(x+1)(x)
P2(x)= 4+(-3)(x+1)+(2/3)(x+1)(x)
P2(x)= (1/3)-(7/3)x+(2/3)x2
COMANDO MATLAB
de la ecución
para cada
a partir de la ecuación
para cada
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
x = zeros(1, n);
y = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
end
Resolver: Encontrar la función interpolada que pase por los puntos (0,1),(1,3),(2,5) y (3,7)
Puntos de control
Código en MATLAB
fprintf('Método de interpolación spline cúbico para el polinomio f(x) = x^2 + 2x + 1\n');
E. INTERPOLACIÓN HERMITE
0 0
0 0
1/4 1
1/4 1
Ahora:
x = zeros(1, n);
y = zeros(1, n);
dy = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
dy(i) = input(sprintf('f''(%d): ', i));
end
m = 2 * n;
z = zeros(1, m);
Q = zeros(m, m);
for i = 1:n
z(2 * i - 1) = x(i);
z(2 * i) = x(i);
Q(2 * i - 1, 1) = y(i);
Q(2 * i, 1) = y(i);
Q(2 * i, 2) = dy(i);
if i > 1
Q(2 * i - 1, 2) = (Q(2 * i - 1, 1) - Q(2 * i - 2, 1)) / (z(2 * i - 1) - z(2 * i - 2));
end
end
for j = 3:m
for i = j:m
Q(i, j) = (Q(i, j - 1) - Q(i - 1, j - 1)) / (z(i) - z(i - j + 1));
end
end
p = Q(1, 1);
prod_term = 1;
for i = 2:m
prod_term = prod_term * (x_eval - z(i - 1));
p = p + Q(i, i) * prod_term;
end
for i = 1:100
xi = x_plot(i);
y_plot(i) = Q(1, 1);
prod_term = 1;
for j = 2:m
prod_term = prod_term * (xi - z(j - 1));
y_plot(i) = y_plot(i) + Q(j, j) * prod_term;
end
end
Interpolación Hermite
x F(x) F(x)'
1 2 0.5
2 3 0.3
3 1.5 -0.2
x=1.5
P.D.D
0.5
S.D.D
0.5
=-0.7
1.8
1.3
T.D.D
-1.2
-0.55
3.1
C.D.D
0.325
1.825
Q.D.D
x = zeros(1, n);
y = zeros(1, n);
dy = zeros(1, n);
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = input(sprintf('y(%d): ', i));
dy(i) = input(sprintf('f''(%d): ', i));
end
m = 2 * n;
z = zeros(1, m);
Q = zeros(m, m);
for i = 1:n
z(2 * i - 1) = x(i);
z(2 * i) = x(i);
Q(2 * i - 1, 1) = y(i);
Q(2 * i, 1) = y(i);
Q(2 * i, 2) = dy(i);
if i > 1
Q(2 * i - 1, 2) = (Q(2 * i - 1, 1) - Q(2 * i - 2, 1)) / (z(2 * i - 1) - z(2 * i - 2));
end
end
for j = 3:m
for i = j:m
Q(i, j) = (Q(i, j - 1) - Q(i - 1, j - 1)) / (z(i) - z(i - j + 1));
end
end
p = Q(1, 1);
prod_term = 1;
for i = 2:m
prod_term = prod_term * (x_eval - z(i - 1));
p = p + Q(i, i) * prod_term;
end
for i = 1:100
xi = x_plot(i);
y_plot(i) = Q(1, 1);
prod_term = 1;
for j = 2:m
prod_term = prod_term * (xi - z(j - 1));
y_plot(i) = y_plot(i) + Q(j, j) * prod_term;
end
end
Resolver.- Encontrar la función que pase por los puntos (0,1),(1,3) y (2,5)
Y que también satisfaga las condiciones de derivadas f`(0)=2 y f`(2)=4
Puntos de interpolación
Primero definimos los puntos de interpolación
Condiciones de derivada
Luego definimos las condiciones de derivada
f`(0)=2 y f`(2)=4
funciones de hermite
calculamos las funciones de hermite
Código en MATLAB
fprintf('Método de interpolación de Hermite para el polinomio f(x) = x^3 - 2x^2 + 3x + 1\n');
% Definir los puntos de evaluación manualmente para interpolar
n = 3; % Número de puntos
x = zeros(1, n);
y = zeros(1, n);
dy = zeros(1, n);
% Introducir puntos y derivadas
for i = 1:n
x(i) = input(sprintf('x(%d): ', i));
y(i) = x(i)^3 - 2*x(i)^2 + 3*x(i) + 1; % f(x) = x^3 - 2x^2 + 3x + 1
dy(i) = 3*x(i)^2 - 4*x(i) + 3; % f'(x) = 3x^2 - 4x + 3
end