miércoles, 29 de mayo de 2019

Sistemas realimentados en matlab - feedback


https://www.mathworks.com/help/control/ref/feedback.html

Sistemas realimentados en matlab

feedback

Feedback connection of two models

Syntax

sys = feedback(sys1,sys2)

Description

sys = feedback(sys1,sys2) returns a model object sys for the negative feedback interconnection of model objects sys1 and sys2.
The closed-loop model sys has u as input vector and y as output vector. The models sys1 and sys2 must be both continuous or both discrete with identical sample times. Precedence rules are used to determine the resulting model type (see Rules That Determine Model Type).
To apply positive feedback, use the syntax
sys = feedback(sys1,sys2,+1)
By default, feedback(sys1,sys2) assumes negative feedback and is equivalent to feedback(sys1,sys2,-1).
Finally,
sys = feedback(sys1,sys2,feedin,feedout)
computes a closed-loop model sys for the more general feedback loop.
The vector feedin contains indices into the input vector of sys1 and specifies which inputs u are involved in the feedback loop. Similarly, feedout specifies which outputs y of sys1 are used for feedback. The resulting model sys has the same inputs and outputs as sys1 (with their order preserved). As before, negative feedback is applied by default and you must use
sys = feedback(sys1,sys2,feedin,feedout,+1)
to apply positive feedback.
For more complicated feedback structures, use append and connect.

Examples

Example 1

To connect the plant
G(s)=2s2+5s+1s2+2s+3
with the controller
H(s)=5(s+2)s+10
using negative feedback, type
G = tf([2 5 1],[1 2 3],'inputname','torque',...
                         'outputname','velocity');
H = zpk(-2,-10,5)
Cloop = feedback(G,H)
These commands produce the following result.
Zero/pole/gain from input "torque" to output "velocity":
0.18182 (s+10) (s+2.281) (s+0.2192)
-----------------------------------
 (s+3.419) (s^2 + 1.763s + 1.064)
The result is a zero-pole-gain model as expected from the precedence rules. Note that Cloop inherited the input and output names from G.

Example 2

Consider a state-space plant P with five inputs and four outputs and a state-space feedback controller K with three inputs and two outputs.
P = rss(3,4,5);
K = rss(3,2,3);
To connect outputs 1, 3, and 4 of the plant to the controller inputs, and the controller outputs to inputs 4 and 2 of the plant, use
feedin = [4 2];
feedout = [1 3 4];
Cloop = feedback(P,K,feedin,feedout)

Example 3

You can form the following negative-feedback loops
by
Cloop = feedback(G,1)       % left diagram
Cloop = feedback(1,G)      % right diagram




Métodos multipasos para PVI EDs

http://www.frsn.utn.edu.ar/gie/an/mnedo/



Métodos multipasos
Los métodos multipasos son aquellos que emplean la aproximación obtenida en más de uno de los puntos de la malla precedentes, para determinar la aproximación en el punto siguiente. Se plantean los siguientes métodos:
Ecuaciones rígidas
La rigidez es un problema especial que puede surgir en la solución de ecuaciones diferenciales ordinarias. Un sistema rígido es uno que tiene componentes que cambian rápidamente, junto con componentes de cambio lento. En muchos casos, los componentes de variación rápida son transitorios, desaparecen rápidamente, después de lo cual los componentes de variación lenta son los que dominan la solución. Pero, aunque el fenómeno transitorio existe en sólo un período pequeño, puede determinar el paso del tiempo en la aplicación de un método numérico.
Un claro ejemplo de un problema rígido está dado por un PVI que modeliza un circuito eléctrico, con excitación. La solución está dada por dos partes, una que corresponde a la excitación (solución particular, por el término independiente), y otro a la respuesta libre (solución de la ecuación homogénea).

martes, 28 de mayo de 2019

Leer datos desde un archivo txt en C, leer numeros enteros

Leer datos desde un archivo txt en C
leer numeros enteros

Autor: Alexander Arias
Fecha: 28 de mayo de 2019

descargar desde aquí

1. Crear un archivo clase50.txt
1
2
3
4
5
6
7
8
9
10

2. Leer el archivo, crear un programa clase50.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *archivo;
  char caracteres[100];

  archivo = fopen("clase50.txt","r");
 
  if (archivo == NULL)
  exit(1);
  else
        {
      printf("\nEl contenido del archivo de prueba es \n\n");
      while (feof(archivo) == 0)
      {
  fgets(caracteres,2,archivo);
  printf("%s",caracteres);
      }
            system("PAUSE");
        }
        fclose(archivo);
return 0;
}

3. Leer el archivo y guardar en un vector de numeros enteros, crear un programa clase51.c
#include <stdio.h>
#include <stdlib.h>

int main()
{
  FILE *archivo;
  char caracteres[100];
int i=0;
int v[20];

  archivo = fopen("clase50.txt","r");
 
  if (archivo == NULL)
  exit(1);
  else
        {
      printf("\nEl contenido del archivo de prueba es \n\n");
      while (fscanf(archivo,"%d ",&v[i])==1)
      {
    printf("%d\n", v[i]);
    i++;
}
        system("PAUSE");
        }
        fclose(archivo);
return 0;
}



sábado, 25 de mayo de 2019

Adblock Plus and (a little) more Chrome Chromiun Atom Firefox

Adblock Plus and (a little) more Chrome Chromiun Atom Firefox
ad block announces atom youtube Chromium

https://adblockplus.org/releases/adblock-plus-343-for-chrome-firefox-and-opera-released

Laboratorio Virtual de Análisis Numérico

Laboratorio Virtual de Análisis Numérico
http://www.frsn.utn.edu.ar/gie/an/anlab/

Método de Adams-Moulton de tres pasos


Método de Adams-Moulton de tres pasos
http://www.frsn.utn.edu.ar/gie/an/mnedo/35_multipasos.html



Métodos multipasos
Los métodos estudiados hasta ahora son llamados métodos de un paso, porque la aproximación de la solución en el punto i + 1 de la malla se obtiene con información proveniente de la aproximación obtenida en el punto i. Aunque hay algunos métodos (Runge-Kutta) que utilizan información en puntos interiores del intervalo [ti, ti+1], no la conservan para utilizarla directamente en aproximaciones futuras. Toda la información que emplean se obtiene dentro del subintervalo en que va a aproximarse la solución.
Como, en el momento de calcular la aproximación en el punto ti+1,  la solución aproximada está disponible en los puntos to, t1, …, ti de la malla, antes de obtener la aproximación en ti+1, y como el error |wi – y(ti)| tiende a aumentar con i, parece razonable desarrollar métodos que usen estos datos precedentes más precisos al obtener la solución en ti+1. Se conocen como métodos multipasos a aquellos que emplean la aproximación en más de uno de los puntos de red precedentes para determinar la aproximación en el punto siguiente.

Definición:
Un método multipasos de p pasos para resolver el problema de valor inicial
(1)
es aquel método cuya ecuación de diferencias para obtener la aproximación wn+1 en el punto tn+1 de la malla definida por {tn = a + h n, n = 1, ..., N}, con h = (b-a)/N, puede representarse por medio de la siguiente ecuación, donde p es un entero mayor que 1:
(2)
para n = p-1, p, …, N-1, donde h = (b-a)/N, a0, a1, …, ap, b-1, …, bp son constantes y se especifican los valores iniciales w0 = a0, w1 = a1, w2 = a2, …, wp-1 = ap-1. Se toma generalmente de la condición inicial el valor w0 = a (el dato de la condición inicial) y los demás valores necesarios para iniciar el método se obtienen con un método de Runge-Kutta u otro método de un paso.
Cuando b-1= 0, el método es explícito o abierto, ya que la ecuación (2) da de manera explícita el valor de wn+1 en función de los valores previamente determinados.
Cuando b-1≠ 0, el método es implícito o cerrado, ya que en la ecuación (2), wn+1 se encuentra en ambos lados, quedando especificado sólo implícitamente. En la implementación de un método implícito, se debe resolver la ecuación implícita para wn+1. No es evidente que siempre se pueda resolver esta ecuación, ni que siempre se obtenga una solución única para wn+1. En caso que no se pueda resolver la ecuación, se deberá recurrir a algún método de aproximación de ecuaciones no lineales (Newton, por ejemplo).
Aproximación polinomial
Para relacionar el método de resolución del PVI con la aproximación polinomial, se debe establecer una relación entre los coeficientes. Un polinomio de grado k está determinado de manera única por k+1 coeficientes. El método de resolución del PVI planteado tiene  2 p + 3 coeficientes; por lo tanto, los coeficientes deben ser elegidos de manera que: 
 
2 p + 3 ≥  k + 1
(3)
El orden del método numérico es el grado más alto k de un polinomio en t tal que la solución numérica coincide con la solución exacta. Los coeficientes de la fórmula del método pueden obtenerse eligiendo un conjunto base de funciones {f1, f2, ..., fk} definidas por
(4)
y que resuelvan el conjunto de ecuaciones multipasos
(5)
para todo j = 0, 1, ..., k. (porque si fes solución de la ecuación, entonces fj' = f(t, f), y f(tn-i)= wn-i )
Este método puede aplicarse para derivar varios métodos de resolución numérica de PVI de primer orden.
Consideremos por ejemplo, el caso donde p = 0 y k = 1. Estos valores de p y k satisfacen la ecuación (3) (con el signo >), por lo tanto es posible determinar coeficientes que devuelvan como solución exacta un polinomio de grado 1. El conjunto base  para k = 1 es:
f0(t) = 1,   f1(t) = t 
(6)
cuyas derivadas son:
f0'(t) = 0,   f1'(t) = 1 
(7)
y la ecuación multipasos resulta:
 
(8)
Representando el método multipasos de la ecuación (6) en términos de las funciones base, resultan las siguientes ecuaciones:
 
(9)
Reemplazando en la ecuación (9) la elección de las funciones base realizada en (6), se tienen las ecuaciones:
  
(10)
De la primera ecuación en (10), resulta a0 = 1. Teniendo esto en cuenta, y recordando que h = tn+1 - tn, de la segunda ecuación en (10) tenemos:
  b-1 + b0 = 1
(11)
Esta elección de orden y grado, nos conduce entonces a dos ecuaciones con tres incógnitas:
        a0 = 1
b-1 + b0 = 1
(12)
Eligiendo por ejemplo, a0 = 1, b-1 = 0 y b0 = 1, se obtiene el ya conocido Método de Euler:
 
  wn+1 = wn +h f(wn , tn )
(13)
Otra elección posible sería a0 = 1, b-1 = 1 y b0 = 0. En este caso, se obtiene otro método para aproximar PVI de primer orden:
 
  wn+1 = wn +h f(wn+1 , tn+1)
(14)
En este caso, el método resultante es llamado  generalmente Euler hacia atrás, o Euler implícito, puesto que wn+1está definido por la ecuación (14) en forma implícita:
Si ahora se eligen los valores p = 0 y k = 2, se tiene que 2p + 3 = k + 1. En este caso, los coeficientes pueden ser determinados de manera única.  Eligiendo como funciones base
 
f0(t) = 1,   f1(t) = t, f2(t) = t2 
(15)
sus derivadas son:
f0'(t) = 0,   f1'(t) = 1,  f2'(t) = 2t,
(16)
y la ecuación multipasos, para cada una de ellas, resulta:
 
(17)
que, reemplazando por los valores en (15) y (16), resulta en el sistema:
 
(18)
Haciendo tn = 0, resulta tn+1 = h, por lo tanto, resolviendo el sistema, se tiene la solución única: a0 = 1, b0 = 1/2, b-1 = 1/2, resultando entonces la fórmula:
 
(19)
Esta fórmula de segundo orden, implícita, se llama método trapezoidal. Se llama así ya que el segundo término de la ecuación (19) puede interpretarse como el área bajo un trapezoide. Esta fórmula es considerada de segundo orden, porque  se requiere información en dos puntos: tn y tn+1.
Hasta aquí los ejemplos que se desarrollaron resultaron métodos de un paso.
Según cómo se eligen los coeficientes ai y ben la fórmula (2), resultan distintas fórmulas multipasos. Hay dos grandes familias de métodos, los métodos de Adams y los métodos de Gear. Ambas familias proveen fórmulas de métodos multipasos propiamente dicho,  porque utilizan información en más de un punto previo de la malla.  Veamos ahora los métodos de Adams, los métodos de Gear son utilizados para ecuaciones rígidas, y se describen en la pestaña correspondiente.
Métodos de Adams
La fórmula general de los métodos multipasos está dada por:
 
(20)
Se puede demostrar que esta fórmula da el valor exacto para y(tn+1) cuando y(t) es un polinomio de grado menor o igual a k si se cumplen las siguientes restricciones de exactitud:
 
(21)
Las restricciones de exactitud dadas en (21) suelen ser llamadas restricciones de consistencia. Los métodos numéricos multipasos dados por  (20) que cumplen la condición (21) se dicen "consistentes".Para un polinomio dado de grado k, estas restricciones pueden ser satisfechas por una amplia variedad de posibilidades. Muchas familias de métodos han sido desarrolladas predefiniendo algunas de las relaciones entre los coeficientes.
La familia de los métodos de Adams, por ejemplo,  está definida mediante la asignación del valor 0 a los coeficientes a1, a2, ..., ap de la fórmula (20), quedando sólo el coeficiente a0, que deberá tomar el valor 1 para cumplir con la primera de las restricciones de consistencia (21), y se toma p = k -1,. Así, la fórmula de los métodos de Adams, queda reducida a:
 
(22)
Los métodos de Adams, dados por la fórmula (22), pueden ser clasificados en dos grupos, explícitos o implícitos, según cómo se haga la elección del coeficiente b-1.
La clase de los métodos explícitos de Adams, también llamados métodos de "Adams-Bashforth", se obtiene haciendo b-1 = 0 y los restantes bi, se obtienen aplicando la segunda restricción de consistencia de (21), tomando p = k-1):
 
(23)
En forma matricial, el sistema dado en (23) resulta:
 
(24)
Seleccionando el valor de k deseado (y consecuentemente, el orden p que es igual a k-1) y resolviendo el sistema (24), se obtienen los restantes coeficientes bi de la fórmula (23), para obtener la fórmula de el método de Adams-Bashforth de orden p.
La versión implícita de los métodos de Adams, llamados métodos de "Adams-Moulton", se obtiene con b-1  0 y los restantes bi, se obtienen aplicando la segunda restricción de consistencia de (21) (p = k-2):
 
(25)
En forma matricial, el sistema dado en (25) resulta:
 
(26)
Seleccionando el valor de k deseado (y consecuentemente, el orden p que es igual a k-1) y resolviendo el sistema (26) se obtienen los restantes coeficientes bi de la fórmula (25), para obtener la fórmula de el método de Adams-Moulton de orden p.
Se dan a continuación los métodos de Adams-Bashforth de cuatro pasos, y el de Adams-Moulton de tres pasos.

Método de Adams-Bashforth de cuatro pasos
Se calculan los valores iniciales w0 = a0, w1 = a1, w2 = a2, w3 = a3 (con el método de Runge-Kutta), y se aplica la fórmula:
(27)
Se deja como ejercicio verificar, resolviendo el sistema dado en (24) para p = 4, los coeficientes de la ecuación (27).
Puede demostrarse que el error local de truncamiento |w– y(ti)| en el método de Adams-Bashforth de cuatro pasos está dado por la expresión:
(28)
para algún μi∈[ti-3, ti+1]. Es decir, este método es  del orden de h4.
Se muestra a continuación el pseudocódigo del algoritmo de este método. Los parámetros de entrada de este algoritmo son: los extremos del intervalo inicial a y b, el valor de la condición inicial, a, y la cantidad de puntos a considerar en la malla, N.
Método de Adams-Moulton de tres pasos
Se calculan los valores iniciales w0 = a0, w1 = a1, w2 = a2 (con el método de Runge-Kutta), y se aplica la fórmula:
(29)
Se deja como ejercicio verificar los coeficientes de la fórmula (29), resolviendo el sistema de ecuaciones dado en (26).
Puede demostrarse que el error local de truncamiento |w– y(ti)| en el método de Adams-Moulton de tres pasos está dado por la expresión:
 
(30)
para algún μi∈[ti-2, ti+1]. Es decir, este método también es  del orden de h4. Por ello se comparan siempre los resultados de aplicar el método de Adams-Bashford de n + 1 pasos, contra el método de Adams-Moulton de n pasos.
Se muestra a continuación el pseudocódigo del algoritmo de este método.
Este método requiere menos puntos y tiene la misma precisión que el anterior, pero tiene la dificultad de tener que resolver en cada paso una ecuación, que puede ser no lineal, en cuyo caso se deberá aplicar un método de aproximación de soluciones de ecuaciones no lineales.
Ejemplo
Consideremos el siguiente problema de valor inicial:
 
y' =  y - t2 + 1,    0  ≤  t  ≤  2, y(0) = 0,5
(31)
Se aplicarán los métodos de Adams-Bashforth de cuatro pasos (A-B) y el de Adams-Moulton de tres pasos (A-M), ambos con tamaño de paso h = 0,2 para la malla en el dominio [0, 2]. Con este tamaño de paso, la malla de puntos resulta:
 
ti = 0,2.i, para i = 0, ..., 10.
(32)
 El método de A-B aplicado a este problema, siendo f(t,y) = y - t2 + 1 y tomando ti = 0,2 i, tiene por ecuación de diferencias:
 
(33)
Análogamente, El método de A-M aplicado a este problema, con la misma expresión para f(t,y) y los mismos valores para los ti, tiene por ecuación de diferencias:
 
(34)
Se ve claramente aquí que el método de A-M tiene por ecuación de diferencias una expresión implícita para wi+1. Se puede despejar en este caso la incógnita wi+1, para obtener la ecuación:
 
(35)
Los resultados que se obtuvieron aplicando estas ecuaciones, se muestran en la siguiente tabla. Los valores exactos provienen de la solución exacta del PVI, y(t) = (t+1)2 - 0,5 et. No tiene sentido mostrar la comparación de estos valores en forma gráfica, por la gran precisión de los resultados obtenidos, que hace que los errores sean del orden de 10-3.

Tabla 1
En el ejemplo, el método implícito de Adams-Moulton dio mejores resultados que el método explícito de Adams-Bashforth del mismo orden. Generalmente ocurre esto, pero los métodos implícitos tienen la debilidad intrínseca de que primero deben convertir algebraicamente el método en una representación explícita de wi+1. Este procedimiento no siempre es posible, como ocurre por ejemplo en el siguiente problema elemental de valor inicial:
 
(36)
Dado que f(t)= ey, el método de Adams-Moulton de tres pasos tiene como ecuación de diferencia la siguiente:
 
(37)
y de esta ecuación no se puede despejar wi+1. Para resolver la ecuación (37), se deberá aplicar algún método numérico.
Método predictor-corrector
En la práctica, los métodos multipasos implícitos no se emplean como se mostró aquí. Se utilizan para mejorar las aproximaciones obtenidas con métodos explícitos. La combinación de un método explícito con uno implícito recibe el nombre de método predictor-corrector: El método explícito predice una aproximación, y el método implícito la corrige.
Consideremos el siguiente método de cuarto orden para resolver un problema de valor inicial. El primer paso consiste en calcular los valores iniciales w0, w1,w2 y w3 para el método de Adams-Bashforth de cuatro pasos. Para ello, se puede usar el método de Runge-Kutta. El siguiente paso consiste en calcular una primer aproximación w4(0) en el punto t4 de la malla usando como predictor el método de Adams-Bashforth:
 
(38)
Luego, se mejora esta aproximación utilizando el método de Adams-Moulton de tres pasos como corrector, introduciendo el valor de w4(0) en el lado derecho:
 
(39)
En este procedimiento, la única nueva evaluación de la función que se necesita calcular es f(t4, w4(0)) en la ecuación del corrector. El resto de las evaluaciones de f ya habían sido calculadas para la aproximación anterior.
Luego, se utiliza el valor w4(1) como aproximación de y(t4), y se repite la técnica que consiste en utilizar como predictor el método de Adams-Bashforth y como corrector el de Adams-Moulton para obtener w5(0) y w5(1), las aproximaciones inicial y mejorada de y(t5), y así sucesivamente.
A continuación se presenta el pseudocódigo del método predictor-corrector de Adams de cuatro pasos.
Ejemplo
Dado el problema de valor inicial del ejemplo anterior:
 
y ‘ = y - t2 +1, 0 ≤ t ≤ 2, y(0) = 0,5
(40)
aplicamos ahora el método predictor-corrector de Adams dado en las fórmulas (38) y (39), habiendo aplicado previamente Runge-Kutta para determinar los valores de arranque para el predictor-corrector, y se obtuvieron los valores que se muestran en la siguiente tabla. En la misma se listan también los valores correspondientes de la solución exacta, y el error de truncamiento local.

Tabla 2
Se puede ver, comparando los resultados mostrados en las tablas 1 y 2, que el método predictor-corrector mejora los resultados obtenidos con el método de Adams-Bashforth.

Adams-Moulton Method

https://www.mathworks.com/matlabcentral/fileexchange/63034-adams-bashforth-moulton-method
Numerical Methods (single step and multi step) for solving First Order Ordinary Differential Equations. 
Methods included: 
1. Euler's Method 
2. Heun's Method 
3. Fourth Order Runge Kutta methods 
4. Adams-Bashforth Method 
5. Adams-Moulton Method 
These methods are commonly used for solving IVP, a first order Initial Value Problem (IVP) is defined as a first order differential equation together with specified initial condition at t=t₀: 
y' = f(t,y) ; t0 ≤ t ≤ b with y(t₀) = y₀
There exist several methods for finding solutions of differential equations.


%% Adams-Bashworth-Moulton Predictor, corrector and other methods
%% initialization
%%
syms x y
% Range of x
xspan=[2,3];
% Step size
h=0.1
% Initial values
y0=3, x0=2
y(1)=y0;x(1)=x0;
% No. of steps
steps=(xspan(2)-xspan(1))/h;
%% Define f(x,y)
%%
f= @(x,y)x*(y-x);
%% Exact Solution
%%
[Xe,Yexact]=ode45(f,xspan,y0);
Xe=Xe(1:4:end);
Yexact=Yexact(1:4:end);
Exact_Sol=vpa([Xe Yexact],5)
%% Euler's Method
%%
for j=2:steps+1
x(j,1)=x(j-1)+h;
y(j,1)=y(j-1,1)+h*f(x(j-1,1),y(j-1,1));
end
euler=vpa([x y],5)
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
%% Heun's Method
%%
for j=2:steps+1
x(j,1)=x(j-1)+h;
k1(j-1,1)=h*f( x(j-1), y(j-1) );
k2(j-1,1)=h*f( x(j-1)+h, y(j-1)+k1(j-1));
y(j,1)=y(j-1)+0.5*(k1(j-1)+k2(j-1));
end
heuns=vpa([x y],5)
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
%% RK 4th order method
%%
for j=2:steps+1
x(j,1)=x(j-1)+h;
k1(j-1,1)=h*f( x(j-1), y(j-1) );
k2(j-1,1)=h*f( x(j-1)+h/2, y(j-1)+0.5*k1(j-1) );
k3(j-1,1)=h*f( x(j-1)+h/2, y(j-1)+0.5*k2(j-1) );
k4(j-1,1)=h*f( x(j-1)+h, y(j-1)+k3(j-1) );
y(j,1)=y(j-1)+(1/6)*(k1(j-1)+2*k2(j-1)+2*k3(j-1)+k4(j-1));
end
rk4=vpa([x y],5)
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
%% Adam-Bashworth predictor
%%
for k=5:steps+1
x(k,1)=x(k-1)+h;
y(k,1)=y(k-1) +(h/24)*( -9*f(x(k-4),y(k-4)) +37*f(x(k-3),y(k-3))...
-59*f(x(k-2),y(k-2)) +55*f(x(k-1),y(k-1)));
end
p=y;
Adam_Bashworth=vpa([x p],5)
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
%% Adam-Moulton corrector
%%
for k=5:steps+1
x(k,1)=x(k-1)+h;
y(k,1)=y(k-1) +(h/24)*( f(x(k-3),y(k-3)) -5*f(x(k-2),y(k-2))...
+19*f(x(k-1),y(k-1)) +9*f(x(k),p(k)));
end
Adam_Moulton=vpa([x y],5)
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
%%
% Created by- Bhartendu Thakur, Machine Learning & Computing


Adams-Bashworth-Moulton Predictor, corrector and other methods

initialization

syms x y
% Range of x
xspan=[2,3];
% Step size
h=0.1
h = 0.1000
% Initial values
y0=3, x0=2
y0 = 3
x0 = 2
y(1)=y0;x(1)=x0;
% No. of steps
steps=(xspan(2)-xspan(1))/h;

Define f(x,y)

f= @(x,y)x*(y-x);

Exact Solution

[Xe,Yexact]=ode45(f,xspan,y0);
Xe=Xe(1:4:end);
Yexact=Yexact(1:4:end);
Exact_Sol=vpa([Xe Yexact],5)
Exact_Sol = 
2.02.12.22.32.42.52.62.72.82.93.03.03.21643.47263.78144.16114.63665.24326.03067.06968.461810.354

Euler's Method

for j=2:steps+1
x(j,1)=x(j-1)+h;
y(j,1)=y(j-1,1)+h*f(x(j-1,1),y(j-1,1));
end
euler=vpa([x y],5)
euler = 
2.02.12.22.32.42.52.62.72.82.93.03.03.23.4313.70184.02424.41414.89265.48866.24167.20528.4537
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
mse = 2.5235

Heun's Method

for j=2:steps+1
x(j,1)=x(j-1)+h;
k1(j-1,1)=h*f( x(j-1), y(j-1) );
k2(j-1,1)=h*f( x(j-1)+h, y(j-1)+k1(j-1));
y(j,1)=y(j-1)+0.5*(k1(j-1)+k2(j-1));
end
heuns=vpa([x y],5)
heuns = 
2.02.12.22.32.42.52.62.72.82.93.03.03.21553.47013.77654.15224.62165.21865.99097.00638.361410.195
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
mse = 0.20447

RK 4th order method

for j=2:steps+1
x(j,1)=x(j-1)+h;
k1(j-1,1)=h*f( x(j-1), y(j-1) );
k2(j-1,1)=h*f( x(j-1)+h/2, y(j-1)+0.5*k1(j-1) );
k3(j-1,1)=h*f( x(j-1)+h/2, y(j-1)+0.5*k2(j-1) );
k4(j-1,1)=h*f( x(j-1)+h, y(j-1)+k3(j-1) );
y(j,1)=y(j-1)+(1/6)*(k1(j-1)+2*k2(j-1)+2*k3(j-1)+k4(j-1));
end
rk4=vpa([x y],5)
rk4 = 
2.02.12.22.32.42.52.62.72.82.93.03.03.21643.47263.78144.16114.63655.24316.03057.06948.461510.353
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
mse = 0.00066539

Adam-Bashworth predictor

for k=5:steps+1
x(k,1)=x(k-1)+h;
y(k,1)=y(k-1) +(h/24)*( -9*f(x(k-4),y(k-4)) +37*f(x(k-3),y(k-3))...
-59*f(x(k-2),y(k-2)) +55*f(x(k-1),y(k-1)));
end
p=y;
Adam_Bashworth=vpa([x p],5)
Adam_Bashworth = 
2.02.12.22.32.42.52.62.72.82.93.03.03.21643.47263.78144.16054.63485.23956.02387.05768.441310.319
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
mse = 0.042467

Adam-Moulton corrector

for k=5:steps+1
x(k,1)=x(k-1)+h;
y(k,1)=y(k-1) +(h/24)*( f(x(k-3),y(k-3)) -5*f(x(k-2),y(k-2))...
+19*f(x(k-1),y(k-1)) +9*f(x(k),p(k)));
end
Adam_Moulton=vpa([x y],5)
Adam_Moulton = 
2.02.12.22.32.42.52.62.72.82.93.03.03.21643.47263.78144.16114.63655.24286.02977.06758.457510.345
% Mean Square Error
mse = vpa(norm(Yexact-y,2),5)
mse = 0.0097564
% Created by- Bhartendu Thakur, Machine Learning & Computing