Saltar al contenido

Resolver Ecuaciones No Lineales en Matlab

En esta entrada va a aprender detalladamente como Resolver Ecuaciones No Lineales en Matlab, podrás ver vários ejemplos y descargar los códigos para que lo pongas en práctica.

Antes de comenzar, te invito a que le des un vistazo a nuestro curso gratuito de Matlab para ingenieros desde cero.

Y que te suscribas al canal si deseas seguir aprendiendo a programar en este potente software de ingeniería.

Ecuaciones No Lineales en Matlab

Matlab nos permite solucionar ecuaciones no lineales de una forma muy simple de forma numérica.

Si nos enfrentamos a un problema que sea NO lineal (o sea que hayan operaciones entre las variables como: x^2,sin⁡(x), xy, e^z) Podemos recurrir al comando fzero o fsolve.

  • fzero: Encuentra las raíces de una función no lineal (una ecuación)
  • fsolve: soluciona el sistema de varias ecuaciones no lineales.

Raíces de Ecuaciones No Lineales en Matlab

El comando fzero es utilizado para encontrar la raíz de una ecuación no lineal más cercana del punto inicial establecido.

Esta función también permite encontrar dicha raíz dentro de un intervalo preestablecido, siempre y cuando ese intervalo presente un cambio de signo.

La sintaxis de la función fzero en matlab es la siguiente:

x = fzero(@(x)función, x0);

Donde:

  • x: Es la raíz encontrada por la función fzero (resultado)
  • función: Ecuación NO LINEAL en formato: función anónima o función definida.
  • x0: Punto inicial o Intervalo con cambio de signo

Es importante destacar que este comando, como su nombre lo indica, solo consigue detectar el punto por donde la ecuación matemática pasa por el origen.

Ejemplo de fzero en Matlab

Resolver los dos siguientes ejemplos usando el fzero. El segundo ejemplo por ser un polinomio, puede usarse directamente la función roots.

  1. x^2+2ln(x)-cos(x)=5
  2. x^6+3x^5-41x^4-87x^3+400x^2+444x-720=0

Solución 1

clc
clear
close all

%Crea la función anónima con la ecuación no lineal
fa1 = @(x) x.^2 + 2*log(x) - cos(x) - 5;

%Creo un vector x linealmente espaciado
x = linspace(0.01,3,100);
%Evaluo la función
y = fa1(x);

%Creo un vector x linealmente espaciado
x = linspace(0.01,3,100);
%Evaluo la función
y = fa1(x);

plot(x,y),grid

x0 = 1; %punto inicial
x = fzero(fa1,x0)

Solución 2

clc
clear
close all

%Creo un vector x linealmente espaciado
x = linspace(-6.1,5.1,100);
%Evaluo la función
y = f(x);

x0 = 1; %punto inicial
x = fzero(@f,x0)

%Solución cuando es un polinomio no lineal
roots([1 3 -41 -87 400 444 -720])


function y = f(x)
    y = x.^6+3*x.^5-41*x.^4-87*x.^3+400*x.^2+444*x-720;
end
AYUDA Y DOCUMENTACIÓN MATLAB
Ayuda y Documentación en MATLAB
MATLAB para INICIANTES
Ambiente de MATLAB
Numeros Complejos Matlab
Numeros Complejos en Matlab

Resolver Sistema de Ecuaciones No Lineales en Matlab

La forma típica de organizar este sistema de ecuaciones no lineales, es igualar cada una de las ecuaciones a cero, dejando el sistema de la siguiente forma:

f(x)=0

Cada una de las incógnitas o variables de la ecuación, deberán ser almacenadas en un vector.

Por ejemplo, si se tiene el siguiente sistema:

3𝑥^2+3𝑦^2−2𝑧=4\\𝑥𝑦+𝑧=2\\𝑥+𝑦−2𝑧=−3

Se iguala todo a cero:

3𝑥^2+3𝑦^2−2𝑧−4=0\\𝑥𝑦+𝑧−2=0\\𝑥+𝑦−2𝑧+3=0

Las incógnitas x, y, z se asignan en un vector de nombre cualquiera dentro de matlab. Por ejemplo un vector llamado x:

x=\begin{bmatrix}
x\\ 
y\\ 
z
\end{bmatrix}\rightarrow 
\begin{matrix}
x(1)\\ 
x(2)\\ 
x(3)
\end{matrix}

Sustituimos en la ecuación original, para poder hacer que matlab consiga solucionar el sistema de ecuaciones no lineales.

3𝑥(1)^2+3𝑥(2)^2−2𝑥(3)−4=0\\𝑥(1)𝑥(2)+𝑥(3)−2=0\\𝑥(1)+𝑥(2)−2𝑥(3)+3=0

fsolve en Matlab

La sintaxis de la función fsolve es:

x = fsolve(@(x)función, x0);

Donde:

  • x: es el resultado de la solución del sistema de ecuaciones no lineal
  • función: Ecuación NO LINEAL en formato: función anónima o función definida.
  • x0: Punto inicial, vector con el mismo número de incógnitas.

Ejemplo fsolve en Matlab

Solucionar el siguiente sistema de ecuaciones no lineales:

3x_1 - cos(x_2x_3)-\frac{1}{2}=0
x_1^2-625x_2^2=0
e^{-x_1x_2}+20x_3=-\frac{10\pi-3}{3}
clc
clear
close all

%Función Anónima
F = @(x) [3*x(1)-cos(x(2)*x(3))-1/2;
         x(1)^2-625*x(2)^2;
         exp(-x(1)*x(2))+20*x(3)+(10*pi - 3)/3];
     
     
%Solución del sistema de ecuaciones no lineales
x0 = [0;0;0]; %Condicion Inicial

x = fsolve(F,x0)

x = fsolve(@fun,x0)
     

%Usando función definida
function y = fun(x)
    %Se escriben las 3 ecuaciones no lineales
    e1 = 3*x(1)-cos(x(2)*x(3))-1/2;
    e2 = x(1)^2-625*x(2)^2;
    e3 = exp(-x(1)*x(2))+20*x(3)+(10*pi - 3)/3;
    
    %Concatena las 3 ecuaciones en el vector de salida
    y=[e1,e2,e3];
end

Descargar Códigos


Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

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.

Comentarios (7)

hola me da error
‘fsolve’ requires Optimization Toolbox.

Error in ejerc1 (line 14)
x = fsolve(F,x0)

Responder

Hola Joanna, ese error es porque no tienes instalado el toolbox de optimización de Matlab. Debes instalarlo para poder usar la función fsolve.

Responder

Buenas tardes
Me ha parecido muy bien sus videos en referencia al curso de MATLAB. Sin embargo el link para descargar los «live script», pareciera que está roto, ya que no descarga.

Responder

Gracias Galo por el comentário, he arreglado el link del live script. Saludos!!

Responder

Gracias.

Responder

Muchas gracias por tu trabajo, es un excelente trabajo.

Responder

De nada Luis, que bueno que te ha servido la información. Saludos y muchos éxitos!

Responder