Manual de Teoria y Codigos de Metodos Numericos 2° A PDF
Manual de Teoria y Codigos de Metodos Numericos 2° A PDF
Manual de Teoria y Codigos de Metodos Numericos 2° A PDF
Chiapas
Facultad de Ingeniería
Ingeniería Civil
Programación
(1) Dado que r (la raíz buscada) está en una de las dos mitades del
intervalo [an, bn], la distancia del punto medio del intervalo a r debe ser
menor o igual que la mitad de la longitud del intervalo.
(2) Por la igualdad demostrada en (*)
Ventajas y desventajas:
Orden de convergencia
Comprobación de la convergencia
4
Es imprescindible establecer un criterio de parada para que el algoritmo
detenga las iteraciones cuando haya obtenido una aproximación
suficientemente precisa
Como el objetivo es resolver f(x)=0, el valor xn debería verificar que:
Así, el proceso iterativo producirá puntos Pi= (xi; f(xi)) hasta que el último
punto Pn se encuentre en la banda horizontal comprendida entre las rectas de
ecuaciones y=ε e y=-ε.
5
A continuación mostramos la interfaz del programa, para luego la programación
en builder C++, para poder encontrar lo raíz de una función f(x) cualquiera.
6
Después de haber realizado varias iteraciones llegamos a la raíz aproximada
como se muestra en la interfaz.
7
Esta programación nos ayudara a encontrar una sola raíz real de un polinomio
en caso de que exista y para ya no seguir haciendo laboriosos procedimientos
en esta interfaz es muy útil porque solo introducimos el polinomio y después de
unas cuantas iteraciones nos dice la raíz. En caso de que este método no
funcione hay muchos tipos de métodos para encontrar una raíz de un
polinomio.
Códigos de programación:
8
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm2 *Form2;
#include <math.h>
inicio,k,y,por;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
//hablitando grafica
Button1->Enabled=true;
a=Edit1->Text.ToDouble();
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
p=Edit6->Text.ToDouble();
q=Edit7->Text.ToDouble();
h=Edit8->Text.ToDouble();
t=Edit9->Text.ToDouble();
j=Edit10->Text.ToDouble();
Fx1=a*(pow(p,4))+b*(pow(p,3))+c*(pow(p,2))+d*p+e;
Edit11->Text=AnsiString(Fx1);
Fx2=a*(pow(q,4))+b*(pow(q,3))+c*(pow(q,2))+d*q+e;
Edit12->Text=AnsiString(Fx2);
Fx3=a*(pow(h,4))+ b*(pow(h,3))+c*(pow(h,2))+d*h+e;
10
Edit13->Text=AnsiString(Fx3);
Fx4=a*(pow(t,4))+b*(pow(t,3))+c*(pow(t,2))+d*t+e;
Edit14->Text=AnsiString(Fx4);
Fx5=a*(pow(j,4))+b*(pow(j,3))+c*(pow(j,2))+d*j+e;
Edit15->Text=AnsiString(Fx5);
//---------------------------------------------------------------------------
l=Edit16->Text.ToDouble();
Fxl=a*(pow(l,4))+b*(pow(l,3))+c*(pow(l,2))+d*l+e;
m=Edit17->Text.ToDouble();
Fxm=a*(pow(m,4))+b*(pow(m,3))+c*(pow(m,2))+d*m+e;
r=(l+m)/2;
Edit18->Text=AnsiString(r);
Fr=a*(pow(r,4))+b*(pow(r,3))+c*(pow(r,2))+d*r+e;
Label15->Caption=AnsiString(r);
Label13->Caption=AnsiString(i);
i++;
11
//---------------------------------------------------------------------------
prod=Fxl*Fr;
Edit19->Text=AnsiString(prod);
por=((m-l)/m)*100;
Edit20->Text=AnsiString(por);
if(prod >0 ){
Edit16->Text="";
Edit16->Text=AnsiString(r);
if(prod <0){
Edit17->Text="";
Edit17->Text=AnsiString(r);
//---------------------------------------------------------------------------
Form3->Show();
Form3->Canvas->Pen->Color=clGreen;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(0,350);
Form3->Canvas->LineTo(1300,350);
12
Form3->Canvas->PenPos=TPoint(650,0);
Form3->Canvas->LineTo(650,700);
for(x=-30;x<=30;x++){
Form3->Canvas->PenPos=TPoint(650+x*10,355);
Form3->Canvas->LineTo(650+x*10,345);
for(y=-30;y<=30; y++){
Form3->Canvas->PenPos=TPoint(645,350+y*10);
Form3->Canvas->LineTo(655,350+y*10);
Form3->Canvas->Pen->Color=clYellow;
Form3->Canvas->Pen->Width=2;
x=-650;
Form3->Canvas->PenPos=TPoint(650+x,350-
10*(a*pow(x/10,4)+b*pow(x/10,3)+c*pow(x/10,2)+d*x/10+e));
for(x=-650;x<=650;x++){
Form3->Canvas->LineTo(650+x,350-
10*(a*pow(x/10,4)+b*pow(x/10,3)+c*pow(x/10,2)+d*x/10+e));
//---------------------------------------------------------------------------
a=0;
b=0;
c=0;
13
d=0;
e=0;
p=0;
q=0;
r=0;
h=0;
t=0;
j=0;
Fx1=0;
Fx2=0;
Fx3=0;
Fx4=0;
Fx5=0;
Fr=0;
i=1
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
14
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
Edit20->Text="";
Label13->Caption="";
Label15->Caption="";
Label16->Caption="";
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
15
Còdigo de programaciòn:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm3 *Form3;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
16
2. Método de Newton - Raphson
17
Conocida como la fórmula de Newton Raphson.
CASOS ESPECIALES.
o Cuando son raíces múltiples, las del polinomio.
o Cuando la derivada de la función es muy complicada de resolver.
o Cuando existe divergencia en el método.
18
o Cuando se encuentran un punto crítico o de inflexión, debido a al valor
inicial X, donde se tendría una división por cero, o debido a la naturaleza
de la función.
Ea = | (Xi-Xi-1/
Xi)* 100|
VENTAJAS.
Robustez y
velocidad al encontrar la
raíz
No trabaja en
intervalos, sino en
iteraciones.
Su indicador de efectividad es la repetición de cifras (convergencia).
DESVENTAJAS.
Lenta convergencia debida a la naturaleza de una función en particular.
19
Cuando un punto de inflexión, ƒ (xn) = 0, ocurre en la cercanía de una
raíz.
No existe un criterio general de convergencia.
Tener un valor suficientemente cercano a la raíz.
Apoyarse de herramientas gráficas.
Conocimiento del problema físico.
Evaluación de la derivada.
Interfaz propuesta.
Interfaz 1:
Botón “ENTRAR”.
Interfaz 2:
Botón “CALCULAR RAÍZ”.
20
Lee los valores de x4, x3, x2, x y la constante, el
valor inicial propuesto para nuestra raíz y el
número de iteraciones que realizara el programa.
Calcula la derivada de la función ƒ (xn) según
los valores propuestos en las primeras casillas, dentro de una estructura “for”,
evalúa a ƒ (xn) y a ƒ´ (xn) con el valor inicial, si uno de ellas es = 0 el programa
cargara un error en una venta y determinara que la función diverge (debido a
diversos puntos de inflexión de ƒ (xn)) y no es posible implementar el método,
en caso de que no sea así y ƒ´ (xn) ≠ 0 el proceso continua y calcula la
ecuación de 1 en 1, valor por valor.
21
Radio Button 3 “GRAFICA MEGA ZOOM”
Cierra la interfaz 2, sin guardar ningún dato, para asi poder a ingresar
nuevamente a él, mediante la interfaz 1.
ALGORITMO.
22
13. Imprimir los resultados.
CÓDIGO DE PROGRAMACIÓN.
UNIT 1.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit8.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
23
void fastcall TForm1::Button1Click(TObject *Sender)
Form2->Show();
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
UNIT 2.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
24
#include "Unit7.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
double a, b, c, d, e, xn, it, da, db, dc, dd, de,x,y; double xn1, re, err, n, s,fx, dfx,
y1,y2,y3,y4,y5,y6,y7 ;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Close();
25
//---------------------------------------------------------------------------
// Programando Reset
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Label10->Caption="";
RadioGroup1->Enabled=false;
Button2->Enabled=false;
RadioGroup1->ItemIndex=-1;
Edit1->SetFocus();
//---------------------------------------------------------------------------
26
//Habilitar Graficas y Tabla de Iteraciones
RadioGroup1->Enabled=true;
Button2->Enabled=true;
a=Edit1->Text.ToDouble();
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
xn=Edit6->Text.ToDouble();
it=Edit7->Text.ToDouble();
//Derivada de la función
da=a*4;
db=b*3;
dc=c*2;
dd=d;
de=0;
Form3->Memo1->Clear();
Form3->Memo2->Clear();
27
Form3->Memo3->Clear();
Form3->Memo4->Clear();
Form3->Memo5->Clear();
Form3->Memo6->Clear();
Form3->Memo7->Clear();
RadioGroup1->Enabled=true;
Button2->Enabled=true;
for(n=1;n<=it;n++)
y4=a*pow(xn,4);
y3=b*pow(xn,3);
y2=c*pow(xn,2);
y1=d*xn;
fx=y4+y3+y2+y1+e;
28
Form3->Memo3->Lines->Add(fx);//Enviando resultados de la funcion al Memo3.
y5=da*pow(xn,3);
y6=db*pow(xn,2);
y7=dc*xn;
dfx=y5+y6+y7+dd;
if(dfx==0){
Form7->Show();
else{
// Calculando xn
Form3->Memo2->Lines->Add(xn);//Enviando xn al Memo2
//Calculando la división
s=fx/dfx;
29
Form3->Memo5->Lines->Add(s);//Enviando el cociente al Memo5.
//calculando xn+1
xn1= xn- s;
err=((xn1-xn)/xn1)*100;
if (err<1&&err>-1)
//Escribiendo la raiz
Label10->Caption=AnsiString(xn);
xn=xn1;
//---------------------------------------------------------------------------
30
{
//Mostrando tabulación
Form3->Show();
//---------------------------------------------------------------------------
// Grafica Normal
if(RadioGroup1->ItemIndex==0)
Form4->Show();
Form4->Canvas->Pen->Color=clBlack;
Form4->Canvas->Pen->Width=1;
Form4->Canvas->PenPos=TPoint(0,350);
Form4->Canvas->LineTo(1300,350);
Form4->Canvas->PenPos=TPoint(650,0);
Form4->Canvas->LineTo(650,700);
for(x=-65;x<=65;x++)
{
31
Form4->Canvas->PenPos=TPoint(650+x*10,355);
Form4->Canvas->LineTo(650+x*10,345);
for(y=-35;y<=35;y++)}
Form4->Canvas->PenPos=TPoint(645,350+y*10);
Form4->Canvas->LineTo(655,350+y*10);
Form4->Canvas->Pen->Color=clBlue;
Form4->Canvas->Pen->Width=2;
x=-650;
Form4->Canvas->PenPos=TPoint(650+x,350-10*(a*pow(x/10,4)
+b*pow(x/10,3)+c*pow(x/10,2)+d*x/10+e));
for(x=-650;x<=650;x++)
Form4->Canvas->LineTo(650+x,350-10*
(a*pow(x/10,4)+b*pow(x/10,3)+c*pow(x/10,2)+d*x/10+e));
// Grafica ZOOM
if(RadioGroup1->ItemIndex==1)
32
Form5->Show();
Form5->Canvas->Pen->Color=clBlack; Form5->Canvas->Pen->Width=1;
Form5->Canvas->PenPos=TPoint(0,350);
Form5->Canvas->LineTo(1300,350);
Form5->Canvas->PenPos=TPoint(650,0);
Form5->Canvas->LineTo(650,700);
for(x=-32;x<=32;x++)
Form5->Canvas->PenPos=TPoint(650+x*20,355);
Form5->Canvas->LineTo(650+x*20,345);
for(y=-17;y<=17;y++)
Form5->Canvas->PenPos=TPoint(645,350+y*20);
Form5->Canvas->LineTo(655,350+y*20);
Form5->Canvas->Pen->Color=clBlue;
Form5->Canvas->Pen->Width=2;
x=-650;
Form5->Canvas->PenPos=TPoint(650+x,350-20*
(a*pow(x/20,4)+b*pow(x/20,3)+c*pow(x/20,2)
+d*x/20+e));
33
for(x=-650;x<=650;x++)
Form5->Canvas->LineTo(650+x,350-
20*(a*pow(x/20,4)+b*pow(x/20,3)+c*pow(x/20,2)
+d*x/20+e));
//Grafica MEGAZOOM
if(RadioGroup1->ItemIndex==2)
Form6->Show();
Form6->Canvas->Pen->Color=clBlack;
Form6->Canvas->Pen->Width=1;
Form6->Canvas->PenPos=TPoint(0,350);
Form6->Canvas->LineTo(1300,350);
Form6->Canvas->PenPos=TPoint(650,0);
Form6->Canvas->LineTo(650,700);
for(x=-16;x<=16;x++)
Form6->Canvas->PenPos=TPoint(650+x*40,355);
Form6->Canvas->LineTo(650+x*40,345);
34
for(y=-8;y<=8;y++)
Form6->Canvas->PenPos=TPoint(645,350+y*40);
Form6->Canvas->LineTo(655,350+y*40);
Form6->Canvas->Pen->Color=clBlue;
Form6->Canvas->Pen->Width=2;
x=-650;
Form6->Canvas->PenPos=TPoint(650+x,350-
40*(a*pow(x/40,4)+b*pow(x/40,3)+c*pow(x/40,2)
+d*x/40+e));
for(x=-650;x<=650;x++)
Form6->Canvas->LineTo(650+x,350-
40*(a*pow(x/40,4)+b*pow(x/40,3)+c*pow(x/40,2)
+d*x/40+e));
//---------------------------------------------------------------------------
UNIT 3.
//---------------------------------------------------------------------------
35
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
//Botón cerrar
Close();
//--------------------------------------------------------------------------
UNIT 4.
//---------------------------------------------------------------------------
#include <vcl.h>
36
#pragma hdrstop
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
//Botón cerrar
Close();
//---------------------------------------------------------------------------
UNIT 5.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit5.h"
//---------------------------------------------------------------------------
37
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
//Botón cerrar
Close();
//---------------------------------------------------------------------------
UNIT 6.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
38
fastcall TForm6::TForm6(TComponent* Owner)
: TForm(Owner)
//---------------------------------------------------------------------------
//Botón cerrar
Close();
//------------------------------------------------------------------------
UNIT 7.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit7.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
}
39
//---------------------------------------------------------------------------
UNIT 8.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit8.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
//Botón cerrar
Close();
//---------------------------------------------------------------------------
40
3. Método de Ferrari: Solución de
ecuaciones de cuarto grado.
Una ecuación de cuarto grado o ecuación cuartica con una incógnita es una
ecuación algebraica que se puede poner bajo la forma canónica: donde a, b, c,
d y e (siendo) son números que pertenecen a un cuerpo, usualmente a los
reales o los complejos. Sea K un cuerpo, donde se pueden extraer raíces
cuadradas y cúbicas (y por lo tanto también de cuarto orden, pues equivale a
extraer raíces cuadradas dos veces seguidas). En este cuerpo, es posible
factorizar por todo a, y la identidad siguiente es válida:
41
Resolución algebraica de la ecuación general de cuarto grado:
1. SOLUCIÓN ALGEBRAICA
2. RESOLVENTE DE FERRARI
3. CUBICA DE FERRARI
4. Ya obtenida la cúbica...
5. DONDE:
a₁= (-b)
a₂=(ac-4d)
a₃=4bd-a²d-c²
T=√R-√Q³-R²
Q=3a₂-a₁²/9
R=9a₁a₂-27a₃-2a₁³
S=√R+√Q³-R²
X₁=S+T-(1/3)a₁
e=√(a²/4)-b+y
• Si e≠0 utilizar:
f=ay-2c/e
• Si e=0 utilizar:
f=√(y²/4)-d
43
9. De las dos ecuaciones dadas anteriormente de "f" y "e". Obtenemos
dos ecuaciones cuadráticas.
x²+(a/2-e)x+(y/2)-f)
x²+(a/2+e)x+(y/2+f)
x=-b/2a(-b^2-4ac)^1/2
PROGRAMA:
44
Acciones por Botón
Formulario 1:
Botón “Entrar”:
Botón “Salir”:
Línea de Programación:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
: TForm(Owner) { }
//---------------------------------------------------------------------------
Form2->Show();
//---------------------------------------------------------------------------
Close();
45
//---------------------------------------------------------------------------
Botón “Raíces”:
El botón lee los datos que ingresamos y realiza una serie de pasos para que
nos encuentre las raíces del polinomio que estamos buscando y nos ponga los
resultados en los componentes Edit que programamos anteriormente.
Botón “Regresar”:
46
Línea de Programación:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
#include <stdio.h>
double A,B,C,D,E,a,b,c,d,a1,a2,a3,q1,q2,q3,r1,r2,r3,r4,Q,R,S,s1,s2,s3,s4,s5;
double t1,t2,t3,t4,t5,T,y,e1,e2,e,f1,f2,f3,f,u1,u,v1,v,w1,w,z1,z,g1,g2,g3,g,i;
double x1,x2,x3,x4,y1,y2,y3,y4,Dis1,Dis2,Dis3,Dis4,Q1,R1,j,j2,o,o2,M,M1,M2,M3;
double M4,M5,M6,N,o1,o3;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
A=Edit1->Text.ToDouble();
B=Edit2->Text.ToDouble();
C=Edit3->Text.ToDouble();
D=Edit4->Text.ToDouble();
E=Edit5->Text.ToDouble();
47
if(A!=0)
a=B/A;
b=C/A;
c=D/A;
d=E/A;
a1=-b;
a2=(a*c)-(4*d);
a3=(4*b*d)-((a*a)*d)-(c*c);
q1=a1*a1;
q2=3*a2;
q3=q1-q2;
Q=q3/9;
r1=2*(a1*a1*a1);
r2=9*(a1*a2);
r3=27*a3;
r4=r1-r2+r3;
R=r4/54;
Q1=Q*Q*Q;
R1=R*R;
if(R1<Q1)
j=sqrt(Q1);
j2=R/j;
o=acos(j2);
o1=sqrt(Q);
o2=o/3;
o3=a1/3;
y=(-2*o1*cos(o2))-(o3);
48
e1=(a*a)/4;
e2=abs(e1-b+y);
e=sqrt(e2);
else
M1=abs(R);
M2=R1-Q1;
M3=sqrt(M2);
M4=M1+M3;
M5=1/3;
M6=pow(M4,M5);
M=(-1*(R))*M6;
if(M==0)
N=0;
else
N=Q/a1;
y=(M+N)-(a1/3);
e1=(a*a)/4;
e2=abs(e1-b+y);
e=sqrt(e2);
if(e!=0)
f1=a*y;
f2=2*c;
f3=f1-f2;
49
f=f3/e;
i=1;
u1=a/2;
u=u1-e;
v1=y/2;
v=v1-f;
w1=a/2;
w=w1+e;
z1=y/2;
z=z1+f;
Dis1=(u*u)-(4*i*v);
if(Dis1==0)
x1=-u/2*i;
x2=x1;
y1=0;
y2=0;
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
if(Dis1>0)
x1=-u/2*i+sqrt(Dis1)/(2*i);
x2=-u/2*i-sqrt(Dis1)/(2*i);
y1=0;
y2=0;
50
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
if(Dis1>0&&u!=0)
x1=-u/2*i;
x2=-u/2*i;
y1=sqrt(-Dis1)/(2*i);
y2=-sqrt(-Dis1)/(2*i);
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
if(Dis1<0&&u==0)
x1=0;
x2=x1;
y1=sqrt(-Dis1)/(2*i);
y2=-sqrt(-Dis1)/(2*i);
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
Dis2=(w*w)-(4*i*z);
if(Dis2==0)
x3=-w/2*i;
x4=x3;
y3=0;
y4=0;
51
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(Dis2>0)
x3=-w/2*i+sqrt(Dis2)/(2*i);
x4=-w/2*i-sqrt(Dis2)/(2*i);
y3=0;
y4=0;
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(Dis2>0&&w!=0)
x3=-w/2*i;
x4=-w/2*i;
y3=sqrt(-Dis2)/(2*i);
y4=-sqrt(-Dis2)/(2*i);
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(Dis2<0&&w==0)
x3=0;
x4=x1;
y3=sqrt(-Dis2)/(2*i);
y4=-sqrt(-Dis2)/(2*i);
Edit10->Text=AnsiString(x3);
52
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(e==0)
g1=y*y;
g2=g1/4;
g3=g2-d;
g=sqrt(g3);
i=1;
u1=a/2;
u=u1-e;
v1=y/2;
v=v1-g;
w1=a/2;
w=w1+e;
z1=y/2;
z=z1+g;
Dis3=(u*u)-(4*i*v);
if(Dis3==0)
x1=-u/2*i;
x2=x1;
y1=0;
y2=0;
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
53
Edit9->Text=AnsiString(y2);
if(Dis3>0)
x1=-u/2*i+sqrt(Dis3)/(2*i);
x2=-u/2*i-sqrt(Dis3)/(2*i);
y1=0;
y2=0;
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
if(Dis3>0&&u!=0)
x1=-u/2*i;
x2=-u/2*i;
y1=sqrt(-Dis3)/(2*i);
y2=-sqrt(-Dis3)/(2*i);
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
if(Dis3<0&&u==0)
x1=0;
x2=x1;
y1=sqrt(-Dis3)/(2*i);
y2=-sqrt(-Dis3)/(2*i);
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(y1);
Edit8->Text=AnsiString(x2);
Edit9->Text=AnsiString(y2);
54
}
Dis4=(w*w)-(4*i*z);
if(Dis4==0)
x3=-w/2*i;
x4=x3;
y3=0;
y4=0;
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(Dis4>0)
x3=-w/2*i+sqrt(Dis4)/(2*i);
x4=-w/2*i-sqrt(Dis4)/(2*i);
y3=0;
y4=0;
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
if(Dis4>0&&w!=0)
x3=-w/2*i;
x4=-w/2*i;
y3=sqrt(-Dis4)/(2*i);
y4=-sqrt(-Dis4)/(2*i);
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
55
}
if(Dis4<0&&w==0)
x3=0;
x4=x1;
y3=sqrt(-Dis4)/(2*i);
y4=-sqrt(-Dis4)/(2*i);
Edit10->Text=AnsiString(x3);
Edit11->Text=AnsiString(y3);
Edit12->Text=AnsiString(x4);
Edit13->Text=AnsiString(y4);
else
if(A==0)
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
56
4. Método de Müller
f n ( x) a0 a1 x a2 x 2 ....... an x n
f 2 ( x) a( x x2 ) 2 b( x x2 ) c Ec.1
57
FIG 1 FIG. 2
Ejemplo: el polinomio
f(x) = x2 + x - 12
x2 + x - 12 = 0 Igualando a cero.
(x + 4)(x - 3) = 0 Factorizando.
x=-4 Solución 1
x=3 Solución 2
58
¡NOTA!
RAICES REALES
Como las raíces de un polinomio hacen que este valga cero, en unplano
cartesiano esto lo identificamos como las intersecciones de la gráfica del
polinomio con el eje de las X (abscisas). Esto es, los puntos en donde cruza la
gráfica al eje horizontal tienen como abscisa la raíz del polinomio graficado.
f(x)= - 1, 2 y f(x) = (x +
x3 - 4 3 1) (x - 2) (x
- 3)
x2 + x
+6
59
f(x)= - 2, - 1, f(x) = (x +
x4 - 5 1 y 2 1) (x + 2) (x
- 1) (x - 2)
x2 + 4
Ejemplo:
60
La cual coincide con f(x) excepto en x=-2. Las raíces involucradas en esta
función son:
Raíces de p(x) = 0, 3,
Raíces de q(x) = -1, 1.
Observe la Figura 3.Las raíces de p(x) señalan los puntos en que f intercepta
el eje de las x mientras que las raíces de q(x) indican asíntotas de la función.
f(x)
FIG. 3
RAICES IMAGINARIAS
61
y = xxx-4xx+5x y
y = xxx-4xx+5x y
Las raíces de la
función son:
X= 0, x=2+i, x=2-i
x
x
y = x^(3)+x y
y = x^(3)+x
Las raíces de la
función son:
X= 0, x=i, x=-i x
𝑓(𝑥0 ) = ?
𝑓(𝑥1 ) = ?
𝑓(𝑥2 ) = ?
ℎ0 =?
ℎ1 =?
𝑑0 =?
𝑑1 =?
63
−2𝑐 −2𝑐
𝑥3 − 𝑥2 = -Despejando- 𝑥3 = 𝑥2 +
𝑏± 𝑏 2 −4𝑎𝑐 𝑏± 𝑏 2 −4𝑎𝑐
Se escoge 𝑏 + 𝑏 4 − 4𝑎𝑐
Si no, se escoge: 𝑏 − 𝑏 2 − 4𝑎𝑐
𝑥3 −𝑥2
𝐸𝑎 = . 100 %[Fórmula para calcular el margen de error]
𝑥3
VENTAJA
DESVENTAJA
En el método de Müller se escoge el signo que coincida con el
signo de “b”, esta elección proporciona como resultado el
denominador más grande, lo que dará la raíz estimada más cercana a
x2. Una vez que se determinó x3 el proceso se repite, esto trae de que
un valor es descartado.
64
Si sólo se localizan raíces reales, elegimos los dos valores originales
más cercanos a la nueva raíz.
DATO ADICIONAL
Si además deseamos conocer los puntos en los que f (x) posee máximos y
mínimos locales, el procedimiento consiste en encontrar las raíces de f´(X).
ℎ0 = 5.5 − 4.5 =𝟏
ℎ1 = 5 − 5.5 = −𝟎. 𝟓
82.875 − 20.625
𝑑0 = = 𝟔𝟐. 𝟐𝟓
1
48 − 82.875
𝑑1 = = 𝟔𝟗. 𝟕𝟓
−1
2
69.75−62.25
𝑎= 1 = 𝟏𝟓
2
1 Coeficientes de la parábola
𝑏 = 15 − + 69.75 = 𝟔𝟐. 𝟐𝟓
2
𝑐 = 𝟒𝟖
65
Puesto que b es positivo, entonces, respecto al signo ± ubicado en el
denominador, elegiré + :
−2(48)
∴ 𝑥3 = 5 +
62.25 ± (62.25)2 − 4(15)(48)
𝑥3 = 3.976487042 𝑅𝑎𝑖𝑧 𝑒𝑠𝑡𝑖𝑚𝑎𝑑𝑎
3.976487042 − 5
𝐸𝑎 = . 100 %
3.976487042
𝐸𝑎 = 25.73912469 %
66
Obteniendo raíces de 𝑥 2 + 4𝑥 + 3 :
FORMULA
−4 ± 42 − 4(1)(3)
𝑋1,2 =
2(1) −𝑏 ± 𝑏 2 − 4𝑎𝑐
𝑋1,2 =
𝑋1 = −1, 𝑋2 = −3 𝑅𝑎𝑖𝑐𝑒𝑠 2𝑎
67
PROGRAMACION
Programando Form 1
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2->Show();
Form1->Visible=false; /*--------------ENTRAR--------------*/
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close(); /*--------------SALIR--------------*/
}
//---------------------------------------------------------------------------
68
Programando Form 2
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
double
a,b,c,d,e,x0,x1,x2,x3,j,z,D,A,B,C,fx0,fx1,fx2,h0,h1,d0,d1,w,ER=100,Er=100,o,p,q,r,s,u,v,rx1,lxl,m,l,R1,
R2;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
69
if(Er>=0.00000000000001){
a=Edit1->Text.ToDouble();
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
x0=Edit6->Text.ToDouble();
x1=Edit7->Text.ToDouble();
x2=Edit8->Text.ToDouble();
fx0=a*pow(x0,4)+b*pow(x0,3)+c*pow(x0,2)+d*x0+e;
fx1=a*pow(x1,4)+b*pow(x1,3)+c*pow(x1,2)+d*x1+e;
fx2=a*pow(x2,4)+b*pow(x2,3)+c*pow(x2,2)+d*x2+e;
h0=x1-x0;
h1=x2-x1;
if(h0==0|| h1==0||h1+h0==0)
{Label5->Caption="Prueba con otras aproximaciones";}
else{ /*--------------R1--------------*/
d0=(fx1-fx0)/h0;
d1=(fx2-fx1)/h1;
A=(d1-d0)/(h1+h0);
B=(A*h1)+d1;
C=fx2;
D=B*B-4*A*C;
if(D<0)
{Label3->Caption="posiblemente la función solo tenga raicesimaginarias,grafica y prueba nuevos
valores de x1,x2,x3!";}
else
{z=pow(D,0.5);
x3=x2-(2*C)/(B+z);
w=(x3-x2)/x3;
Edit8->Text=AnsiString(x3);
if(w<0)
{Er=(-w)*100;}
else
{Er=w*100;}
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(x2);
Edit9->Text=AnsiString(x3);
Edit15->Text=AnsiString(Er); }}}
70
void __fastcall TForm2::Button10Click(TObject *Sender)
{
Close(); /*--------------SALIR--------------*/
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
if(ER>=0.00000000000001){
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();/*--------------R2--------------*/
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
x0=Edit6->Text.ToDouble();
x1=Edit7->Text.ToDouble();
x2=Edit8->Text.ToDouble();
fx0=b*pow(x0,3)+c*pow(x0,2)+d*x0+e;
fx1=b*pow(x1,3)+c*pow(x1,2)+d*x1+e;
fx2=b*pow(x2,3)+c*pow(x2,2)+d*x2+e;
h0=x1-x0;
h1=x2-x1;
if(h0==0|| h1==0||h1+h0==0)
{Label5->Caption="Prueba con otras aproximaciones";}
else{
d0=(fx1-fx0)/h0;
d1=(fx2-fx1)/h1;
A=(d1-d0)/(h1+h0);
B=(A*h1)+d1;
C=fx2;
D=B*B-4*A*C;
if(D<0)
{Label3->Caption="posiblemente la función solo tenga raicesimaginarias,grafica y prueba nuevos
valores de x1,x2,x3!";}
if(D>=0)
{z=pow(D,0.5);
x3=x2-(2*C)/(B+z);
w=(x3-x2)/x3;
Edit8->Text=AnsiString(x3);
w=(x3-x2)/x3;
if(w<0)
{ER=(-w)*100;}
else
{ER=w*100;}
Edit6->Text=AnsiString(x1);
Edit7->Text=AnsiString(x2);
Edit8->Text=AnsiString(x3);
71
Edit10->Text=AnsiString(x3);
Edit16->Text=AnsiString(ER); }}}
else {Label4->Caption="!EL ERROR YA ES CERO!";}}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button3Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
a=Edit3->Text.ToDouble();
b=Edit4->Text.ToDouble();
c=Edit5->Text.ToDouble();
D=b*b-4*a*c;
if(D<0) /*--------------R3--------------*/
{x1=(-b)/(2*a);
Edit11->Text=AnsiString(x1);
l=pow(-l*D,0.5)/(2*a);
Edit13->Text=AnsiString(l);}
else if(D>=0)
{r=pow(D,0.5);
x1=(-b+r)/(2*a);
Edit11->Text=AnsiString(x1);}
else{ D=-D;
r=pow(D,0.5);
rx1=(-b)/(2*a);
lxl=D/(2*a);
Edit11->Text=AnsiString(rx1);}}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button4Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
a=Edit3->Text.ToDouble();
b=Edit4->Text.ToDouble();
c=Edit5->Text.ToDouble();
D=b*b-4*a*c; /*--------------R4--------------*/
if(D<0)
{x1=(-b)/(2*a);
Edit12->Text=AnsiString(x1);
l=pow(-l*D,0.5)/(2*a);
Edit14->Text=AnsiString(l);}
else if(D>=0)
{r=pow(D,0.5);
x1=(-b-r)/(2*a);
Edit12->Text=AnsiString(x1);}
72
else{D=-D;
r=pow(D,0.5);
rx1=(-b)/(2*a);
lxl=D/(2*a);
Edit12->Text=AnsiString(rx1);}}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button5Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
a=Edit1->Text.ToDouble();
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
R1=Edit9->Text.ToDouble();
o=a*R1;
p=b+o; /*--------------DEGRADAR CON R1--------------*/
q=p*R1;
r=c+q;
s=r*R1;
u=d+s;
v=u*R1;
w=e+v;
Edit1->Text="0";
Edit2->Text=AnsiString(a);
Edit3->Text=AnsiString(p);
Edit4->Text=AnsiString(r);
Edit5->Text=AnsiString(u);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button6Click(TObject *Sender)
{
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
a=Edit2->Text.ToDouble();
b=Edit3->Text.ToDouble();
c=Edit4->Text.ToDouble();
d=Edit5->Text.ToDouble();
R2=Edit10->Text.ToDouble();
o=a*R2;
p=b+o; /*--------------DEGRADAR CON R2--------------*/
q=p*R2;
r=c+q;
s=r*R2;
u=d+s;
Edit2->Text="0";
Edit3->Text=AnsiString(a);
73
Edit4->Text=AnsiString(p);
Edit5->Text=AnsiString(r);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button7Click(TObject *Sender)
{
ER=100;
Er=100;
a=b=c=d=e=0;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text=""; /*--------------RESET--------------*/
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="0";
Edit14->Text="0";
Edit15->Text="";
Edit16->Text="";
Label3->Caption="";
Label4->Caption="";
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button8Click(TObject *Sender)
{
Form3->Show(); /*--------------GRAFICAR--------------*/
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button9Click(TObject *Sender)
{
Form1->Show(); /*--------------INICIO-------------*/
Close();
}
//---------------------------------------------------------------------------
Programando Form 3
74
//---------------------------------------------------------------------------
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
double a,b,c,d,e,x,y,av,pri,seg;
TForm3 *Form3;
//---------------------------------------------------------------------------
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
Canvas->PenPos=TPoint(160,320);
Canvas->LineTo(800,320);
Canvas->PenPos=TPoint(480,400);
Canvas->LineTo(480,80);
Canvas->PenPos=TPoint(500,310);
Canvas->LineTo(500,330);
Canvas->PenPos=TPoint(520,310);
Canvas->LineTo(520,330);
Canvas->PenPos=TPoint(540,310);
Canvas->LineTo(540,330);
75
Canvas->PenPos=TPoint(560,310);
Canvas->LineTo(560,330);
Canvas->PenPos=TPoint(580,310);
Canvas->LineTo(580,330);
Canvas->PenPos=TPoint(600,310);
Canvas->LineTo(600,330);
Canvas->PenPos=TPoint(620,310);
Canvas->LineTo(620,330);
Canvas->PenPos=TPoint(640,310);
Canvas->LineTo(640,330);
Canvas->PenPos=TPoint(660,310);
Canvas->LineTo(660,330);
Canvas->PenPos=TPoint(680,310);
Canvas->LineTo(680,330);
Canvas->PenPos=TPoint(700,310);
Canvas->LineTo(700,330);
Canvas->PenPos=TPoint(460,310);
Canvas->LineTo(460,330);
Canvas->PenPos=TPoint(440,310);
Canvas->LineTo(440,330);
Canvas->PenPos=TPoint(420,310);
Canvas->LineTo(420,330);
Canvas->PenPos=TPoint(400,310);
Canvas->LineTo(400,330);
Canvas->PenPos=TPoint(380,310);
Canvas->LineTo(380,330);
Canvas->PenPos=TPoint(360,310);
Canvas->LineTo(360,330);
Canvas->PenPos=TPoint(340,310);
Canvas->LineTo(340,330);
Canvas->PenPos=TPoint(320,310);
Canvas->LineTo(320,330);
Canvas->PenPos=TPoint(300,310);
Canvas->LineTo(300,330);
Canvas->PenPos=TPoint(280,310);
Canvas->LineTo(280,330);
Canvas->PenPos=TPoint(470,120);
Canvas->LineTo(490,120);
Canvas->PenPos=TPoint(470,140);
Canvas->LineTo(490,140);
Canvas->PenPos=TPoint(470,300);
Canvas->LineTo(490,300);
Canvas->PenPos=TPoint(470,280);
Canvas->LineTo(490,280);
Canvas->PenPos=TPoint(470,260);
Canvas->LineTo(490,260);
Canvas->PenPos=TPoint(470,240);
Canvas->LineTo(490,240);
Canvas->PenPos=TPoint(470,220);
Canvas->LineTo(490,220);
Canvas->PenPos=TPoint(470,200);
Canvas->LineTo(490,200);
Canvas->PenPos=TPoint(470,180);
76
Canvas->LineTo(490,180);
Canvas->PenPos=TPoint(470,160);
Canvas->LineTo(490,160);
Label5->Caption="Y";
Label6->Caption="X";
Label7->Caption="2";
Label8->Caption="4";
Label9->Caption="6";
Label10->Caption="8";
Label11->Caption="10";
Label12->Caption="-2";
Label13->Caption="-4";
Label14->Caption="-6";
Label15->Caption="-8";
Label16->Caption="-10";
Label17->Caption="10";
a=Edit1->Text.ToDouble();
b=Edit2->Text.ToDouble();
c=Edit3->Text.ToDouble();
d=Edit4->Text.ToDouble();
e=Edit5->Text.ToDouble();
pri=Edit6->Text.ToDouble();
seg=Edit7->Text.ToDouble();
av=(seg-pri)/1000;
x=pri;
y=a*pow(x,4)+b*pow(x,3)+c*pow(x,2)+d*x+e;
Canvas->PenPos=TPoint(480+x*20,320-y*20);
for(pri;pri<=seg;pri=pri+av)
{x=pri;
y=a*pow(x,4)+b*pow(x,3)+c*pow(x,2)+d*x+e;
Canvas->LineTo(480+x*20,320-y*20);}
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button3Click(TObject *Sender)
{
Form2->Show();/*--------------REGRESAR-------------*/
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button4Click(TObject *Sender)
{
Form1->Close();/*--------------SALIR-------------*/
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button2Click(TObject *Sender)
{
Edit1->Text="";
77
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";/*--------------RESET-------------*/
Edit5->Text="";
Label5->Caption="";
Label6->Caption="";
Label7->Caption="";
Label8->Caption="";
Label9->Caption="";
Label10->Caption="";
Label11->Caption="";
Label12->Caption="";
Label13->Caption="";
Label14->Caption="";
Label15->Caption="";
Label16->Caption="";
Label17->Caption="";
Edit1->SetFocus();}
//---------------------------------------------------------------------------
78
5. Solución de Ecuaciones Lineales por el
método de eliminación de Gauss.
a11 a12…………a1n b1
a21 a22………… a2 b2
. . . .
. . . .
am1 am2………… amnbm
Esto se conoce como matriz aumentada del sistema. (El término matriz se
emplea en matemáticas para denotar un arreglo rectangular de números. Las
matrices aparecen en varios contextos).
79
3. Sumar un múltiplo de una ecuación (renglón) a otra. Dado que los
renglones (líneas horizontales) de una matriz aumentada corresponden
a las ecuaciones del sistema asociado, estas tres operaciones equivalen
a las operaciones con renglones de la matriz aumentada.
80
SOLUCIÓN DE SISTEMA DE ECUACIONES LINEALES POR EL MÉTODO
DE ELIMINACION DE GAUSS
81
INTERFAZ DEL PROGRAMA
Buttons:
1) Empezar: Abre una nueva ventana.
2) Salir: Cierra la ventada de la interfaz y/o todas las ventanas.
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
82
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Form2->Show();
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
83
MENÚ DE SELECCIÓN DE NÚMERO DE INCOGNITAS DEL SISTEMA DE
ECUACIONES
Buttons:
1) 2 Incógnitas: Abre una nueva ventana para resolver sistemas de 2
incógnitas en específico.
2) 3 Incógnitas: Abre una nueva ventana para resolver sistemas de 3
incógnitas en específico.
3) 4 Incógnitas: Abre una nueva ventana para resolver sistemas de 4
incógnitas en específico.
4) 5 Incógnitas: Abre una nueva ventana para resolver sistemas de 5
incógnitas en específico.
5) Salir: Cierra la ventana del Menú de selección.
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
84
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
Form3->Show();
//---------------------------------------------------------------------------
Form4->Show();
//---------------------------------------------------------------------------
85
Form5->Show();
//---------------------------------------------------------------------------
Form6->Show();
//---------------------------------------------------------------------------
INTERFAZ DE 2 INCÓGNITAS
Buttons:
1) Solución: Inicia el proceso de solución del sistema de ecuaciones
lineales.
2) Borrar todo: Borra el proceso de triangulación y la solución del sistema
así como la información en los Edit.
3) Salir: Cierra la Interfaz de 2 Incógnitas.
PROGRAMACIÓN
//---------------------------------------------------------------------------
86
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm3 *Form3;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
x1= Edit1->Text.ToDouble();
y1= Edit2->Text.ToDouble();
z1= Edit3->Text.ToDouble();
x2= Edit4->Text.ToDouble();
y2= Edit5->Text.ToDouble();
z2= Edit6->Text.ToDouble();
87
z1= z1/x1;
y1= y1/x1;
x1= x1/x1;
Label7->Caption=FormatFloat("0.###",x1);
Label8->Caption=FormatFloat("0.###",y1);
Label9->Caption=FormatFloat("0.###",z1);
z2= z2/x2;
y2= y2/x2;
x2= x2/x2;
Label10->Caption=FormatFloat("0.###",x2);
Label11->Caption=FormatFloat("0.###",y2);
Label12->Caption=FormatFloat("0.###",z2);
x2=x1-x2;
y2=y1-y2;
z2=z1-z2;
if(y2<0)
y2=-y2;
z2=-z2;
z2=z2/y2;
y2=y2/y2;
88
Label13->Caption=FormatFloat("0.###",x1);
Label14->Caption=FormatFloat("0.###",y1);
Label15->Caption=FormatFloat("0.###",z1);
Label16->Caption=FormatFloat("0.###",x2);
Label17->Caption=FormatFloat("0.###",y2);
Label18->Caption=FormatFloat("0.###",z2);
y3=y1*y2;
z3=y1*z2;
y1=y1-y3;
z1=z1-z3;
Label19->Caption=FormatFloat("0.###",x1);
Label20->Caption=FormatFloat("0.###",y1);
Label21->Caption=FormatFloat("0.###",z1);
Label22->Caption=FormatFloat("0.###",x2);
Label23->Caption=FormatFloat("0.###",y2);
Label24->Caption=FormatFloat("0.###",z2);
Label25->Caption="[";
Label26->Caption="]";
Label27->Caption="[";
Label28->Caption="]";
89
Label29->Caption="[";
Label30->Caption="]";
Label31->Caption="x1 -->";
Label32->Caption="x2 -->";
Label33->Caption="RESULTADO:";
Label35->Caption=FormatFloat("0.###",z1);
Label36->Caption=FormatFloat("0.###",z2);
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit1->SetFocus();
Label7->Caption="";
Label8->Caption="";
Label9->Caption="";
Label10->Caption="";
90
Label11->Caption="";
Label12->Caption="";
Label13->Caption="";
Label14->Caption="";
Label15->Caption="";
Label16->Caption="";
Label17->Caption="";
Label18->Caption="";
Label19->Caption="";
Label20->Caption="";
Label21->Caption="";
Label22->Caption="";
Label23->Caption="";
Label24->Caption="";
Label25->Caption="";
Label26->Caption="";
Label27->Caption="";
Label28->Caption="";
Label29->Caption="";
Label30->Caption="";
Label31->Caption="";
Label32->Caption="";
Label33->Caption="";
Label35->Caption="";
Label36->Caption="";
//---------------------------------------------------------------------------
91
{
Close();
//---------------------------------------------------------------------------
INTERFAZ DE 3 INCÓGNITAS
Buttons:
1) Solución: Inicia el proceso de solución del sistema de ecuaciones
lineales.
2) Borrar todo: Borra el proceso de triangulación y la solución del sistema
así como la información en los Edit.
3) Salir: Cierra la Interfaz de 3 Incógnitas.
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit4.h"
//---------------------------------------------------------------------------
92
#pragma package(smart_init)
double x1, y1, z1, a, x2, y2, z2, b, x3, y3, z3, c, w;
TForm4 *Form4;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
x1= Edit1->Text.ToDouble();
y1= Edit2->Text.ToDouble();
z1= Edit3->Text.ToDouble();
a= Edit4->Text.ToDouble();
x2= Edit5->Text.ToDouble();
y2= Edit6->Text.ToDouble();
z2= Edit7->Text.ToDouble();
b= Edit8->Text.ToDouble();
x3= Edit9->Text.ToDouble();
y3= Edit10->Text.ToDouble();
z3= Edit11->Text.ToDouble();
c= Edit12->Text.ToDouble();
93
a=a/x1;
z1=z1/x1;
y1=y1/x1;
x1=x1/x1;
if(x2==0)
b=b/y2;
z2=z2/y2;
y2=y2/y2;
else
b=b/x2;
z2=z2/x2;
y2=y2/x2;
x2=x2/x2;
if(x3==0)
c=c/y3;
z3=z3/y3;
y3=y3/y3;
else
94
{
c=c/x3;
z3=z3/x3;
y3=y3/x3;
x3=x3/x3;
Label13->Caption=FormatFloat("0.###",x1);
Label14->Caption=FormatFloat("0.###",y1);
Label15->Caption=FormatFloat("0.###",z1);
Label16->Caption=FormatFloat("0.###",a);
Label17->Caption=FormatFloat("0.###",x2);
Label18->Caption=FormatFloat("0.###",y2);
Label19->Caption=FormatFloat("0.###",z2);
Label20->Caption=FormatFloat("0.###",b);
Label21->Caption=FormatFloat("0.###",x3);
Label22->Caption=FormatFloat("0.###",y3);
Label23->Caption=FormatFloat("0.###",z3);
Label24->Caption=FormatFloat("0.###",c);
if(x2==0)
y2=y2;
z2=z2;
b=b;
95
else
x2=x1-x2;
y2=y1-y2;
z2=z1-z2;
b=a-b;
if(y2==0)
b=b/z2;
z2=z2/z2;
else
b=b/y2;
z2=z2/y2;
y2=y2/y2;
if(x3==0)
y3=y3;
z3=z3;
c=c;
96
else
x3=x1-x3;
y3=y1-y3;
z3=z1-z3;
c=a-c;
if(y3==0)
c=c/z3;
z3=z3/z3;
else
c=c/y3;
z3=z3/y3;
y3=y3/y3;
Label25->Caption=FormatFloat("0.###",x1);
Label26->Caption=FormatFloat("0.###",y1);
Label27->Caption=FormatFloat("0.###",z1);
Label28->Caption=FormatFloat("0.###",a);
Label29->Caption=FormatFloat("0.###",x2);
Label30->Caption=FormatFloat("0.###",y2);
97
Label31->Caption=FormatFloat("0.###",y2);
Label32->Caption=FormatFloat("0.###",b);
Label33->Caption=FormatFloat("0.###",x3);
Label34->Caption=FormatFloat("0.###",y3);
Label35->Caption=FormatFloat("0.###",z3);
Label36->Caption=FormatFloat("0.###",c);
y3=y2-y3;
z3=z2-z3;
c=b-c;
c=c/z3;
z3=z3/z3;
Label37->Caption=FormatFloat("0.###",x1);
Label38->Caption=FormatFloat("0.###",y1);
Label39->Caption=FormatFloat("0.###",z1);
Label40->Caption=FormatFloat("0.###",a);
Label41->Caption=FormatFloat("0.###",x2);
Label42->Caption=FormatFloat("0.###",y2);
Label43->Caption=FormatFloat("0.###",z2);
Label44->Caption=FormatFloat("0.###",b);
Label45->Caption=FormatFloat("0.###",x3);
Label46->Caption=FormatFloat("0.###",y3);
Label47->Caption=FormatFloat("0.###",z3);
98
Label48->Caption=FormatFloat("0.###",c);
b=b-(z2*c);
a=a-(y1*b)-(z1*c);
Label49->Caption=FormatFloat("0.###",a);
Label50->Caption=FormatFloat("0.###",b);
Label51->Caption=FormatFloat("0.###",c);
Label54->Caption="x1 ->";
Label55->Caption="x2 ->";
Label56->Caption="x3 ->";
Label57->Caption="[";
Label58->Caption="]";
Label59->Caption="[";
Label60->Caption="]";
Label61->Caption="[";
Label62->Caption="]";
Label63->Caption="RESULTADO:";
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
99
void __fastcall TForm4::Button1Click(TObject *Sender)
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit1->SetFocus();
Label13->Caption="";
Label14->Caption="";
Label15->Caption="";
Label16->Caption="";
Label17->Caption="";
Label18->Caption="";
Label19->Caption="";
Label20->Caption="";
Label21->Caption="";
Label22->Caption="";
Label23->Caption="";
100
Label24->Caption="";
Label25->Caption="";
Label26->Caption="";
Label27->Caption="";
Label28->Caption="";
Label29->Caption="";
Label30->Caption="";
Label31->Caption="";
Label32->Caption="";
Label33->Caption="";
Label34->Caption="";
Label35->Caption="";
Label36->Caption="";
Label37->Caption="";
Label38->Caption="";
Label39->Caption="";
Label40->Caption="";
Label41->Caption="";
Label42->Caption="";
Label43->Caption="";
Label44->Caption="";
Label45->Caption="";
Label46->Caption="";
Label47->Caption="";
Label48->Caption="";
Label49->Caption="";
Label50->Caption="";
Label51->Caption="";
101
Label54->Caption="";
Label55->Caption="";
Label56->Caption="";
Label57->Caption="";
Label58->Caption="";
Label59->Caption="";
Label60->Caption="";
Label61->Caption="";
Label62->Caption="";
Label63->Caption="";
//---------------------------------------------------------------------------
INTERFAZ DE 4 INCÓGNITAS
Buttons:
102
1) Solución: Inicia el proceso de solución del sistema de ecuaciones
lineales.
2) Borrar todo: Borra el proceso de triangulación y la solución del sistema
así como la información en los Edit.
3) Salir: Cierra la Interfaz de 4 Incógnitas.
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
double a, b, c, d, x1, y1, z1, w1, x2, y2, z2, w2, x3, y3, z3, w3, x4, y4, z4, w4;
TForm5 *Form5;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
x1= Edit1->Text.ToDouble();
y1= Edit2->Text.ToDouble();
z1= Edit3->Text.ToDouble();
103
w1= Edit4->Text.ToDouble();
a= Edit5->Text.ToDouble();
x2= Edit6->Text.ToDouble();
y2= Edit7->Text.ToDouble();
z2= Edit8->Text.ToDouble();
w2= Edit9->Text.ToDouble();
b= Edit10->Text.ToDouble();
x3= Edit11->Text.ToDouble();
y3= Edit12->Text.ToDouble();
z3= Edit13->Text.ToDouble();
w3= Edit14->Text.ToDouble();
c= Edit15->Text.ToDouble();
x4= Edit16->Text.ToDouble();
y4= Edit17->Text.ToDouble();
z4= Edit18->Text.ToDouble();
w4= Edit19->Text.ToDouble();
d= Edit20->Text.ToDouble();
a=a/x1;
w1=w1/x1;
z1=z1/x1;
y1=y1/x1;
x1=x1/x1;
if(x2==0)
104
{
b=b/y2;
w2=w2/y2;
z2=z2/y2;
y2=y2/y2;
else
b=b/x2;
w2=w2/x2;
z2=z2/x2;
y2=y2/x2;
x2=x2/x2;
if(x3==0)
if(y3==0)
c=c/z3;
w3=w3/z3;
z3=z3/z3;
else
c=c/y3;
w3=w3/y3;
z3=z3/y3;
105
y3=y3/y3;
else
c=c/x3;
w3=w3/x3;
z3=z3/x3;
y3=y3/x3;
x3=x3/x3;
if(x4==0)
if(y4==0)
if(z4==0)
d=d/w4;
w4=w4/w4;
else
d=d/z4;
w4=w4/z4;
z4=z4/z4;
else
106
{
d=d/y4;
w4=w4/y4;
z4=z4/y4;
y4=y4/y4;
else
d=d/x4;
w4=w4/x4;
z4=z4/x4;
y4=y4/x4;
x4=x4/x4;
Label18->Caption=FormatFloat("0.###",x1);
Label19->Caption=FormatFloat("0.###",y1);
Label20->Caption=FormatFloat("0.###",z1);
Label21->Caption=FormatFloat("0.###",w1);
Label22->Caption=FormatFloat("0.###",a);
Label23->Caption=FormatFloat("0.###",x2);
Label24->Caption=FormatFloat("0.###",y2);
Label25->Caption=FormatFloat("0.###",z2);
Label26->Caption=FormatFloat("0.###",w2);
Label27->Caption=FormatFloat("0.###",b);
107
Label28->Caption=FormatFloat("0.###",x3);
Label29->Caption=FormatFloat("0.###",y3);
Label30->Caption=FormatFloat("0.###",z3);
Label31->Caption=FormatFloat("0.###",w3);
Label32->Caption=FormatFloat("0.###",c);
Label33->Caption=FormatFloat("0.###",x4);
Label34->Caption=FormatFloat("0.###",y4);
Label35->Caption=FormatFloat("0.###",z4);
Label36->Caption=FormatFloat("0.###",w4);
Label37->Caption=FormatFloat("0.###",d);
if(x2==0)
x2=x2;
y2=y2;
z2=z2;
w2=w2;
b=b;
else
x2=x1-x2;
y2=y1-y2;
z2=z1-z2;
w2=w1-w2;
b=a-b;
108
b=b/y2;
w2=w2/y2;
z2=z2/y2;
y2=y2/y2;
if(x3==0)
x3=x3;
y3=y3;
z3=z3;
w3=w3;
c=c;
else
x3=x1-x3;
y3=y1-y3;
z3=z1-z3;
w3=w1-w3;
c=a-c;
if(y3==0)
c=c/z3;
w3=w3/z3;
z3=z3/z3;
109
}
else
c=c/y3;
w3=w3/y3;
z3=z3/y3;
y3=y3/y3;
if(x4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
d=d;
else
x4=x1-x4;
y4=y1-y4;
z4=z1-z4;
w4=w1-w4;
d=a-d;
if(y4==0)
110
d=d/z4;
w4=w4/z4;
z4=z4/z4;
else
d=d/y4;
w4=w4/y4;
z4=z4/y4;
y4=y4/y4;
Label38->Caption=FormatFloat("0.###",x1);
Label39->Caption=FormatFloat("0.###",y1);
Label40->Caption=FormatFloat("0.###",z1);
Label41->Caption=FormatFloat("0.###",w1);
Label42->Caption=FormatFloat("0.###",a);
Label43->Caption=FormatFloat("0.###",x2);
Label44->Caption=FormatFloat("0.###",y2);
Label45->Caption=FormatFloat("0.###",z2);
Label46->Caption=FormatFloat("0.###",w2);
Label47->Caption=FormatFloat("0.###",b);
Label48->Caption=FormatFloat("0.###",x3);
Label49->Caption=FormatFloat("0.###",y3);
Label50->Caption=FormatFloat("0.###",z3);
111
Label51->Caption=FormatFloat("0.###",w3);
Label52->Caption=FormatFloat("0.###",c);
Label54->Caption=FormatFloat("0.###",x4);
Label55->Caption=FormatFloat("0.###",y4);
Label56->Caption=FormatFloat("0.###",z4);
Label57->Caption=FormatFloat("0.###",w4);
Label58->Caption=FormatFloat("0.###",d);
if(y3==0)
x3=x3;
y3=y3;
z3=z3;
w3=w3;
c=c;
else
x3=x3;
y3=y2-y3;
z3=z2-z3;
w3=w2-w3;
c=b-c;
c=c/z3;
w3=w3/z3;
z3=z3/z3;
112
}
if(y4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
d=d;
else
x4=x4;
y4=y2-y4;
z4=z2-z4;
w4=w2-w4;
d=b-d;
d=d/z4;
w4=w4/z4;
z4=z4/z4;
Label59->Caption=FormatFloat("0.###",x1);
Label60->Caption=FormatFloat("0.###",y1);
Label61->Caption=FormatFloat("0.###",z1);
Label62->Caption=FormatFloat("0.###",w1);
Label63->Caption=FormatFloat("0.###",a);
113
Label66->Caption=FormatFloat("0.###",x2);
Label67->Caption=FormatFloat("0.###",y2);
Label68->Caption=FormatFloat("0.###",z2);
Label69->Caption=FormatFloat("0.###",w2);
Label70->Caption=FormatFloat("0.###",b);
Label71->Caption=FormatFloat("0.###",x3);
Label72->Caption=FormatFloat("0.###",y3);
Label73->Caption=FormatFloat("0.###",z3);
Label74->Caption=FormatFloat("0.###",w3);
Label75->Caption=FormatFloat("0.###",c);
Label76->Caption=FormatFloat("0.###",x4);
Label77->Caption=FormatFloat("0.###",y4);
Label78->Caption=FormatFloat("0.###",z4);
Label79->Caption=FormatFloat("0.###",w4);
Label80->Caption=FormatFloat("0.###",d);
if(z4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
d=d;
else
114
x4=x4;
y4=y3;
z4=z3-z4;
w4=w3-w4;
d=c-d;
d=d/w4;
w4=w4/w4;
Label81->Caption=FormatFloat("0.###",x1);
Label82->Caption=FormatFloat("0.###",y1);
Label83->Caption=FormatFloat("0.###",z1);
Label84->Caption=FormatFloat("0.###",w1);
Label85->Caption=FormatFloat("0.###",a);
Label86->Caption=FormatFloat("0.###",x2);
Label87->Caption=FormatFloat("0.###",y2);
Label88->Caption=FormatFloat("0.###",z2);
Label89->Caption=FormatFloat("0.###",w2);
Label90->Caption=FormatFloat("0.###",b);
Label91->Caption=FormatFloat("0.###",x3);
Label92->Caption=FormatFloat("0.###",y3);
Label93->Caption=FormatFloat("0.###",z3);
Label94->Caption=FormatFloat("0.###",w3);
Label95->Caption=FormatFloat("0.###",c);
Label96->Caption=FormatFloat("0.###",x4);
115
Label97->Caption=FormatFloat("0.###",y4);
Label98->Caption=FormatFloat("0.###",z4);
Label99->Caption=FormatFloat("0.###",w4);
Label100->Caption=FormatFloat("0.###",d);
w4=d;
z3=c-(d*w3);
y2=b-(d*w2)-(z3*z2);
x1=a-(d*w1)-(z3*z1)-(y2*y1);
Label105->Caption=FormatFloat("0.###",x1);
Label106->Caption=FormatFloat("0.###",y2);
Label107->Caption=FormatFloat("0.###",z3);
Label108->Caption=FormatFloat("0.###",w4);
Label101->Caption="x1-->";
Label102->Caption="y1-->";
Label103->Caption="z1-->";
Label104->Caption="w1-->";
Label109->Caption="[";
Label113->Caption="]";
Label110->Caption="[";
Label114->Caption="]";
Label111->Caption="[";
Label115->Caption="]";
116
Label112->Caption="[";
Label116->Caption="]";
Label117->Caption="RESULTADO:";
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
117
Edit20->Text="";
Edit1->SetFocus();
Label18->Caption="";
Label19->Caption="";
Label20->Caption="";
Label21->Caption="";
Label22->Caption="";
Label23->Caption="";
Label24->Caption="";
Label25->Caption="";
Label26->Caption="";
Label27->Caption="";
Label28->Caption="";
Label29->Caption="";
Label30->Caption="";
Label31->Caption="";
Label32->Caption="";
Label33->Caption="";
Label34->Caption="";
Label35->Caption="";
Label36->Caption="";
Label37->Caption="";
Label38->Caption="";
Label39->Caption="";
Label40->Caption="";
Label41->Caption="";
118
Label42->Caption="";
Label43->Caption="";
Label44->Caption="";
Label45->Caption="";
Label46->Caption="";
Label47->Caption="";
Label48->Caption="";
Label49->Caption="";
Label50->Caption="";
Label51->Caption="";
Label52->Caption="";
Label54->Caption="";
Label55->Caption="";
Label56->Caption="";
Label57->Caption="";
Label58->Caption="";
Label59->Caption="";
Label60->Caption="";
Label61->Caption="";
Label62->Caption="";
Label63->Caption="";
Label66->Caption="";
Label67->Caption="";
Label68->Caption="";
Label69->Caption="";
Label70->Caption="";
Label71->Caption="";
Label72->Caption="";
119
Label73->Caption="";
Label74->Caption="";
Label75->Caption="";
Label76->Caption="";
Label77->Caption="";
Label78->Caption="";
Label79->Caption="";
Label80->Caption="";
Label81->Caption="";
Label82->Caption="";
Label83->Caption="";
Label84->Caption="";
Label85->Caption="";
Label86->Caption="";
Label87->Caption="";
Label88->Caption="";
Label89->Caption="";
Label90->Caption="";
Label91->Caption="";
Label92->Caption="";
Label93->Caption="";
Label94->Caption="";
Label95->Caption="";
Label96->Caption="";
Label97->Caption="";
Label98->Caption="";
Label99->Caption="";
Label100->Caption="";
120
Label101->Caption="";
Label102->Caption="";
Label103->Caption="";
Label104->Caption="";
Label105->Caption="";
Label106->Caption="";
Label107->Caption="";
Label108->Caption="";
Label109->Caption="";
Label110->Caption="";
Label111->Caption="";
Label112->Caption="";
Label113->Caption="";
Label114->Caption="";
Label115->Caption="";
Label116->Caption="";
Label117->Caption="";
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
INTERFAZ DE 5 INCÓGNITAS
121
Compuesto de: 198-Label 3-Button 30-Edit 1-Picture
Buttons:
1) Solución: Inicia el proceso de solución del sistema de ecuaciones
lineales.
2) Borrar todo: Borra el proceso de triangulación y la solución del sistema
así como la información en los Edit.
3) Salir: Cierra la Interfaz de 5 Incógnitas.
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
double a, b, c, d, e, x1, y1, z1, w1, u1, x2, y2, z2, w2, u2, x3, y3, z3, w3, u3, x4,
y4, z4, w4, u4, x5, y5, z5, w5, u5;
122
TForm6 *Form6;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
x1= Edit1->Text.ToDouble();
y1= Edit2->Text.ToDouble();
z1= Edit3->Text.ToDouble();
w1= Edit4->Text.ToDouble();
u1= Edit5->Text.ToDouble();
a= Edit6->Text.ToDouble();
x2= Edit7->Text.ToDouble();
y2= Edit8->Text.ToDouble();
z2= Edit9->Text.ToDouble();
w2= Edit10->Text.ToDouble();
u2= Edit11->Text.ToDouble();
b= Edit12->Text.ToDouble();
x3= Edit13->Text.ToDouble();
y3= Edit14->Text.ToDouble();
z3= Edit15->Text.ToDouble();
123
w3= Edit16->Text.ToDouble();
u3= Edit17->Text.ToDouble();
c= Edit18->Text.ToDouble();
x4= Edit19->Text.ToDouble();
y4= Edit20->Text.ToDouble();
z4= Edit21->Text.ToDouble();
w4= Edit22->Text.ToDouble();
u4= Edit23->Text.ToDouble();
d= Edit24->Text.ToDouble();
x5= Edit25->Text.ToDouble();
y5= Edit26->Text.ToDouble();
z5= Edit27->Text.ToDouble();
w5= Edit28->Text.ToDouble();
u5= Edit29->Text.ToDouble();
e= Edit30->Text.ToDouble();
a=a/x1;
u1=u1/x1;
w1=w1/x1;
z1=z1/x1;
y1=y1/x1;
x1=x1/x1;
if(x2==0)
b=b/y2;
124
u2=u2/y2;
w2=w2/y2;
z2=z2/y2;
y2=y2/y2;
else
b=b/x1;
u2=u2/x2;
w2=w2/x2;
z2=z2/x2;
y2=y2/x2;
x2=x2/x2;
if(x3==0)
if(y3==0)
c=c/z3;
u3=u3/z3;
w3=w3/z3;
z3=z3/z3;
else
c=c/y3;
u3=u3/y3;
w3=w3/y3;
125
z3=z3/y3;
y3=y3/y3;
else
c=c/x3;
u3=u3/x3;
w3=w3/x3;
z3=z3/x3;
y3=y3/x3;
x3=x3/x3;
if(x4==0)
if(y4==0)
if(z4==0)
d=d/w4;
u4=u4/w4;
w4=w4/w4;
else
d=d/z4;
u4=u4/z4;
w4=w4/z4;
126
z4=z4/z4;
else
d=d/y4;
u4=u4/y4;
w4=w4/y4;
z4=z4/y4;
y4=y4/y4;
else
d=d/x4;
u4=u4/x4;
w4=w4/x4;
z4=z4/x4;
y4=y4/x4;
x4=x4/x4;
if(x5==0)
if(y5==0)
if(z5==0)
if(w5==0)
127
{
e=e/u5;
u5=u5/u5;
else
e=e/w5;
u5=u5/w5;
w5=w5/w5;
else
e=e/z5;
u5=u5/z5;
w5=w5/z5;
z5=z5/z5;
else
e=e/y5;
u5=u5/y5;
w5=w5/y5;
z5=z5/y5;
y5=y5/y5;
128
else
e=e/x5;
u5=u5/x5;
w5=w5/x5;
z5=z5/x5;
y5=y5/x5;
x5=x5/x5;
Label28->Caption=FormatFloat("0.###",x1);
Label29->Caption=FormatFloat("0.###",y1);
Label30->Caption=FormatFloat("0.###",z1);
Label31->Caption=FormatFloat("0.###",w1);
Label32->Caption=FormatFloat("0.###",u1);
Label33->Caption=FormatFloat("0.###",a);
Label34->Caption=FormatFloat("0.###",x2);
Label35->Caption=FormatFloat("0.###",y2);
Label36->Caption=FormatFloat("0.###",z2);
Label37->Caption=FormatFloat("0.###",w2);
Label38->Caption=FormatFloat("0.###",u2);
Label39->Caption=FormatFloat("0.###",b);
Label40->Caption=FormatFloat("0.###",x3);
Label41->Caption=FormatFloat("0.###",y3);
Label42->Caption=FormatFloat("0.###",z3);
Label43->Caption=FormatFloat("0.###",w3);
Label44->Caption=FormatFloat("0.###",u3);
129
Label45->Caption=FormatFloat("0.###",c);
Label46->Caption=FormatFloat("0.###",x4);
Label47->Caption=FormatFloat("0.###",y4);
Label48->Caption=FormatFloat("0.###",z4);
Label49->Caption=FormatFloat("0.###",w4);
Label50->Caption=FormatFloat("0.###",u4);
Label51->Caption=FormatFloat("0.###",d);
Label52->Caption=FormatFloat("0.###",x5);
Label53->Caption=FormatFloat("0.###",y5);
Label54->Caption=FormatFloat("0.###",z5);
Label55->Caption=FormatFloat("0.###",w5);
Label56->Caption=FormatFloat("0.###",u5);
Label57->Caption=FormatFloat("0.###",e);
if(x2==0)
x2=x2;
y2=y2;
z2=z2;
w2=w2;
u2=u2;
b=b;
else
x2=x1-x2;
130
y2=y1-y2;
z2=z1-z2;
w2=w1-w2;
u2=u1-u2;
b=a-b;
b=b/y2;
u2=u2/y2;
w2=w2/y2;
z2=z2/y2;
y2=y2/y2;
if(x3==0)
x3=x3;
y3=y3;
z3=z3;
w3=w3;
u3=u3;
c=c;
else
x3=x1-x3;
y3=y1-y3;
z3=z1-z3;
w3=w1-w3;
131
u3=u1-u3;
c=a-c;
if(y3==0)
c=c/z3;
u3=u3/z3;
w3=w3/z3;
z3=z3/z3;
else
c=c/y3;
u3=u3/y3;
w3=w3/y3;
z3=z3/y3;
y3=y3/y3;
if(x4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
u4=u4;
d=d;
132
else
x4=x1-x4;
y4=y1-y4;
z4=z1-z4;
w4=w1-w4;
u4=u1-u4;
d=a-d;
if(y4==0)
if(z4==0)
d=d/w4;
u4=u4/w4;
w4=w4/w4;
else
d=d/z4;
u4=u4/z4;
w4=w4/z4;
z4=z4/z4;
else
d=d/y4;
133
u4=u4/y4;
w4=w4/y4;
z4=z4/y4;
y4=y4/y4;
if(x5==0)
x5=x5;
y5=y5;
z5=z5;
w5=w5;
u5=u5;
e=e;
else
x5=x1-x5;
y5=y1-y5;
z5=z1-z5;
w5=w1-w5;
u5=u1-u5;
e=a-e;
if(y5==0)
if(z5==0)
134
if(w5==0)
e=e/w5;
u5=u5/u5;
else
e=e/w5;
u5=u5/w5;
w5=w5/w5;
else
e=e/z5;
u5=u5/z5;
w5=w5/z5;
z5=z5/z5;
else
e=e/y5;
u5=u5/y5;
w5=w5/y5;
z5=z5/y5;
y5=y5/y5;
135
}
Label58->Caption=FormatFloat("0.###",x1);
Label59->Caption=FormatFloat("0.###",y1);
Label60->Caption=FormatFloat("0.###",z1);
Label61->Caption=FormatFloat("0.###",w1);
Label62->Caption=FormatFloat("0.###",u1);
Label63->Caption=FormatFloat("0.###",a);
Label64->Caption=FormatFloat("0.###",x2);
Label65->Caption=FormatFloat("0.###",y2);
Label66->Caption=FormatFloat("0.###",z2);
Label67->Caption=FormatFloat("0.###",w2);
Label68->Caption=FormatFloat("0.###",u2);
Label69->Caption=FormatFloat("0.###",b);
Label70->Caption=FormatFloat("0.###",x3);
Label71->Caption=FormatFloat("0.###",y3);
Label72->Caption=FormatFloat("0.###",z3);
Label73->Caption=FormatFloat("0.###",w3);
Label74->Caption=FormatFloat("0.###",u3);
Label75->Caption=FormatFloat("0.###",c);
Label76->Caption=FormatFloat("0.###",x4);
Label77->Caption=FormatFloat("0.###",y4);
Label78->Caption=FormatFloat("0.###",z4);
Label79->Caption=FormatFloat("0.###",w4);
Label80->Caption=FormatFloat("0.###",u4);
136
Label81->Caption=FormatFloat("0.###",d);
Label82->Caption=FormatFloat("0.###",x5);
Label83->Caption=FormatFloat("0.###",y5);
Label84->Caption=FormatFloat("0.###",z5);
Label85->Caption=FormatFloat("0.###",w5);
Label86->Caption=FormatFloat("0.###",u5);
Label87->Caption=FormatFloat("0.###",e);
if(y3==0)
x3=x3;
y3=y3;
z3=z3;
w3=w3;
u3=u3;
c=c;
else
x3=x3;
y3=y2-y3;
z3=z2-z3;
w3=w2-w3;
u3=u2-u3;
c=b-c;
c=c/z3;
137
u3=u3/z3;
w3=w3/z3;
z3=z3/z3;
if(y4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
u4=u4;
d=d;
else
x4=x4;
y4=y2-y4;
z4=z2-z4;
w4=w2-w4;
u4=u2-u4;
d=b-d;
if(z4==0)
d=d/w4;
u4=u4/w4;
w4=w4/w4;
138
else
d=d/z4;
u4=u4/z4;
w4=w4/z4;
z4=z4/z4;
if(y5==0)
x5=x5;
y5=y5;
z5=z5;
w5=w5;
u5=u5;
d=d;
else
x5=x5;
y5=y2-y5;
z5=z2-z5;
w5=w2-w5;
u5=u2-u5;
e=b-e;
if(z5==0)
139
if(w5==0)
e=e/u5;
u5=u5/u5;
else
e=e/w5;
u5=u5/w5;
w5=w5/w5;
else
e=e/z5;
u5=u5/z5;
w5=w5/z5;
z5=z5/z5;
Label88->Caption=FormatFloat("0.###",x1);
Label89->Caption=FormatFloat("0.###",y1);
Label90->Caption=FormatFloat("0.###",z1);
Label91->Caption=FormatFloat("0.###",w1);
Label92->Caption=FormatFloat("0.###",u1);
Label93->Caption=FormatFloat("0.###",a);
140
Label94->Caption=FormatFloat("0.###",x2);
Label95->Caption=FormatFloat("0.###",y2);
Label96->Caption=FormatFloat("0.###",z2);
Label97->Caption=FormatFloat("0.###",w2);
Label98->Caption=FormatFloat("0.###",u2);
Label99->Caption=FormatFloat("0.###",b);
Label100->Caption=FormatFloat("0.###",x3);
Label101->Caption=FormatFloat("0.###",y3);
Label102->Caption=FormatFloat("0.###",z3);
Label103->Caption=FormatFloat("0.###",w3);
Label104->Caption=FormatFloat("0.###",u3);
Label105->Caption=FormatFloat("0.###",c);
Label106->Caption=FormatFloat("0.###",x4);
Label107->Caption=FormatFloat("0.###",y4);
Label108->Caption=FormatFloat("0.###",z4);
Label109->Caption=FormatFloat("0.###",w4);
Label110->Caption=FormatFloat("0.###",u4);
Label111->Caption=FormatFloat("0.###",d);
Label112->Caption=FormatFloat("0.###",x5);
Label113->Caption=FormatFloat("0.###",y5);
Label114->Caption=FormatFloat("0.###",z5);
Label115->Caption=FormatFloat("0.###",w5);
Label116->Caption=FormatFloat("0.###",u5);
Label117->Caption=FormatFloat("0.###",e);
141
if(z4==0)
x4=x4;
y4=y4;
z4=z4;
w4=w4;
u4=u4;
d=d;
else
x4=x4;
y4=y4;
z4=z3-z4;
w4=w3-w4;
u4=u3-u4;
d=c-d;
d=d/w4;
u4=u4/w4;
w4=w4/w4;
if(z5==0)
x5=x5;
y5=y5;
z5=z5;
w5=w5;
142
u5=u5;
e=e;
else
x5=x5;
y5=y5;
z5=z3-z5;
w5=w3-w5;
u5=u3-u5;
e=c-e;
e=e/w5;
u5=u5/w5;
w5=w5/w5;
Label118->Caption=FormatFloat("0.###",x1);
Label119->Caption=FormatFloat("0.###",y1);
Label120->Caption=FormatFloat("0.###",z1);
Label121->Caption=FormatFloat("0.###",w1);
Label122->Caption=FormatFloat("0.###",u1);
Label123->Caption=FormatFloat("0.###",a);
Label124->Caption=FormatFloat("0.###",x2);
Label125->Caption=FormatFloat("0.###",y2);
Label126->Caption=FormatFloat("0.###",z2);
Label127->Caption=FormatFloat("0.###",w2);
143
Label128->Caption=FormatFloat("0.###",u2);
Label129->Caption=FormatFloat("0.###",b);
Label130->Caption=FormatFloat("0.###",x3);
Label131->Caption=FormatFloat("0.###",y3);
Label132->Caption=FormatFloat("0.###",z3);
Label133->Caption=FormatFloat("0.###",w3);
Label134->Caption=FormatFloat("0.###",u3);
Label135->Caption=FormatFloat("0.###",c);
Label136->Caption=FormatFloat("0.###",x4);
Label137->Caption=FormatFloat("0.###",y4);
Label138->Caption=FormatFloat("0.###",z4);
Label139->Caption=FormatFloat("0.###",w4);
Label140->Caption=FormatFloat("0.###",u4);
Label141->Caption=FormatFloat("0.###",d);
Label142->Caption=FormatFloat("0.###",x5);
Label143->Caption=FormatFloat("0.###",y5);
Label144->Caption=FormatFloat("0.###",z5);
Label145->Caption=FormatFloat("0.###",w5);
Label146->Caption=FormatFloat("0.###",u5);
Label147->Caption=FormatFloat("0.###",e);
if(w5==0)
x5=x5;
y5=y5;
144
z5=z5;
w5=w5;
e=e/u5;
u5=u5/u5;
else
x5=x5;
y5=y5;
z5=z5;
w5=w4-w5;
u5=u4-u5;
e=d-e;
e=e/u5;
u5=u5/u5;
Label148->Caption=FormatFloat("0.###",x1);
Label149->Caption=FormatFloat("0.###",y1);
Label150->Caption=FormatFloat("0.###",z1);
Label151->Caption=FormatFloat("0.###",w1);
Label152->Caption=FormatFloat("0.###",u1);
Label153->Caption=FormatFloat("0.###",a);
Label154->Caption=FormatFloat("0.###",x2);
Label155->Caption=FormatFloat("0.###",y2);
Label156->Caption=FormatFloat("0.###",z2);
145
Label157->Caption=FormatFloat("0.###",w2);
Label158->Caption=FormatFloat("0.###",u2);
Label159->Caption=FormatFloat("0.###",b);
Label160->Caption=FormatFloat("0.###",x3);
Label161->Caption=FormatFloat("0.###",y3);
Label162->Caption=FormatFloat("0.###",z3);
Label163->Caption=FormatFloat("0.###",w3);
Label164->Caption=FormatFloat("0.###",u3);
Label165->Caption=FormatFloat("0.###",c);
Label166->Caption=FormatFloat("0.###",x4);
Label167->Caption=FormatFloat("0.###",y4);
Label168->Caption=FormatFloat("0.###",z4);
Label169->Caption=FormatFloat("0.###",w4);
Label170->Caption=FormatFloat("0.###",u4);
Label171->Caption=FormatFloat("0.###",d);
Label172->Caption=FormatFloat("0.###",x5);
Label173->Caption=FormatFloat("0.###",y5);
Label174->Caption=FormatFloat("0.###",z5);
Label175->Caption=FormatFloat("0.###",w5);
Label176->Caption=FormatFloat("0.###",u5);
Label177->Caption=FormatFloat("0.###",e);
u5=e;
w4=d-(e*u4);
z3=c-(e*u3)-(w4*w3);
146
y2=b-(e*u2)-(w4*w2)-(z3*z2);
x1=a-(e*u1)-(w4*w1)-(z3*z1)-(y2*y1);
Label183->Caption=FormatFloat("0.###",x1);
Label184->Caption=FormatFloat("0.###",y2);
Label185->Caption=FormatFloat("0.###",z3);
Label186->Caption=FormatFloat("0.###",w4);
Label187->Caption=FormatFloat("0.###",u5);
Label178->Caption="x1-->";
Label179->Caption="x2-->";
Label180->Caption="x3-->";
Label181->Caption="x4-->";
Label182->Caption="x5-->";
Label188->Caption="RESULTADO:";
Label189->Caption="[";
Label190->Caption="]";
Label191->Caption="[";
Label192->Caption="]";
Label193->Caption="[";
Label194->Caption="]";
Label195->Caption="[";
Label196->Caption="]";
147
Label197->Caption="[";
Label198->Caption="]";
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
148
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
Edit20->Text="";
Edit21->Text="";
Edit22->Text="";
Edit23->Text="";
Edit24->Text="";
Edit25->Text="";
Edit26->Text="";
Edit27->Text="";
Edit28->Text="";
Edit29->Text="";
Edit30->Text="";
Edit1->SetFocus();
Label28->Caption="";
Label29->Caption="";
Label30->Caption="";
Label31->Caption="";
Label32->Caption="";
Label33->Caption="";
Label34->Caption="";
Label35->Caption="";
Label36->Caption="";
Label37->Caption="";
Label38->Caption="";
Label39->Caption="";
149
Label40->Caption="";
Label41->Caption="";
Label42->Caption="";
Label43->Caption="";
Label44->Caption="";
Label45->Caption="";
Label46->Caption="";
Label47->Caption="";
Label48->Caption="";
Label49->Caption="";
Label50->Caption="";
Label51->Caption="";
Label52->Caption="";
Label53->Caption="";
Label54->Caption="";
Label55->Caption="";
Label56->Caption="";
Label57->Caption="";
Label58->Caption="";
Label59->Caption="";
Label60->Caption="";
Label61->Caption="";
Label62->Caption="";
Label63->Caption="";
Label64->Caption="";
Label65->Caption="";
Label66->Caption="";
Label67->Caption="";
150
Label68->Caption="";
Label69->Caption="";
Label70->Caption="";
Label71->Caption="";
Label72->Caption="";
Label73->Caption="";
Label74->Caption="";
Label75->Caption="";
Label76->Caption="";
Label77->Caption="";
Label78->Caption="";
Label79->Caption="";
Label80->Caption="";
Label81->Caption="";
Label82->Caption="";
Label83->Caption="";
Label84->Caption="";
Label85->Caption="";
Label86->Caption="";
Label87->Caption="";
Label88->Caption="";
Label89->Caption="";
Label90->Caption="";
Label91->Caption="";
Label92->Caption="";
Label93->Caption="";
Label94->Caption="";
Label95->Caption="";
151
Label96->Caption="";
Label97->Caption="";
Label98->Caption="";
Label99->Caption="";
Label100->Caption="";
Label101->Caption="";
Label102->Caption="";
Label103->Caption="";
Label104->Caption="";
Label105->Caption="";
Label106->Caption="";
Label107->Caption="";
Label108->Caption="";
Label109->Caption="";
Label110->Caption="";
Label111->Caption="";
Label112->Caption="";
Label113->Caption="";
Label114->Caption="";
Label115->Caption="";
Label116->Caption="";
Label117->Caption="";
Label118->Caption="";
Label119->Caption="";
Label120->Caption="";
Label121->Caption="";
Label122->Caption="";
Label123->Caption="";
152
Label124->Caption="";
Label125->Caption="";
Label126->Caption="";
Label127->Caption="";
Label128->Caption="";
Label129->Caption="";
Label130->Caption="";
Label131->Caption="";
Label132->Caption="";
Label133->Caption="";
Label134->Caption="";
Label135->Caption="";
Label136->Caption="";
Label137->Caption="";
Label138->Caption="";
Label139->Caption="";
Label140->Caption="";
Label141->Caption="";
Label142->Caption="";
Label143->Caption="";
Label144->Caption="";
Label145->Caption="";
Label146->Caption="";
Label147->Caption="";
Label148->Caption="";
Label149->Caption="";
Label150->Caption="";
Label151->Caption="";
153
Label152->Caption="";
Label153->Caption="";
Label154->Caption="";
Label155->Caption="";
Label156->Caption="";
Label157->Caption="";
Label158->Caption="";
Label159->Caption="";
Label160->Caption="";
Label161->Caption="";
Label162->Caption="";
Label163->Caption="";
Label164->Caption="";
Label165->Caption="";
Label166->Caption="";
Label167->Caption="";
Label168->Caption="";
Label169->Caption="";
Label170->Caption="";
Label171->Caption="";
Label172->Caption="";
Label173->Caption="";
Label174->Caption="";
Label175->Caption="";
Label176->Caption="";
Label177->Caption="";
Label178->Caption="";
Label179->Caption="";
154
Label180->Caption="";
Label181->Caption="";
Label182->Caption="";
Label183->Caption="";
Label184->Caption="";
Label185->Caption="";
Label186->Caption="";
Label187->Caption="";
Label188->Caption="";
Label189->Caption="";
Label190->Caption="";
Label191->Caption="";
Label192->Caption="";
Label193->Caption="";
Label194->Caption="";
Label195->Caption="";
Label196->Caption="";
Label197->Caption="";
Label198->Caption="";
//---------------------------------------------------------------------------
155
6. Inversión de Matrices por el método de
descomposición de L. U.
Para encontrar la matriz triangular inferior se busca hacer ceros los valores de
arriba de cada pivote, así como también convertir en 1 cada pivote. Se utiliza el
mismo concepto de "factor" explicado anteriormente y se ubican todos los
"factores" debajo de la diagonal según corresponda en cada uno.
Debido a que [A] = [L][U], al encontrar [L] y [U] a partir de [A] no se altera en
nada la ecuación. Por lo tanto, si Ax = b, entonces LUx = b, de manera que Ax
= LUx = b.
Esquemáticamente se busca lo siguiente:
156
MÉTODO PARA CALCULAR LA MATRIZ INVERSA.
157
A continuación, restamos 11/3 F2 a F3 para obtener la matriz.
EJEMPLO:
158
SOLUCIÓN:
4 -2 -1 9
[A] = 5 1 -1 [B] = 7
1 2 -4 12
ITERACIÓN 1
factor 1 = (a21 / a11) = 5 / 4 = 1.25
factor 2 = (a31 / a11) = 1 / 4 = 0.25
Encontrando [U]
fila 2 = - (factor 1) * (fila 1) + (fila 2)
fila 3 = - (factor 2) * (fila 1) + (fila 3)
a11 = a11
a12 = a12
a13 = a13
a21 = - (1.25) * (4) + (5) = 0
a22 = - (1.25) * (- 2) + (1) = 3.5
a23 = - (1.25) + (- 1) + (- 1) = 0.25
a31 = - (0.25) * (4) + (1) = 0
a32 = - (0.25) * (- 2) + (2) = 2.5
a33 = - (0.25) * (- 1) + (- 1) = - 0.75
4 -2 -1
159
0 2.5 - 0.75
Encontrando [L]
1 0 0
[L] = 1.25 0 0
0.25 0 0
ITERACIÓN 2
Encontrando [U]
4 -2 -1
0 0 - 0.9285714286
Encontrando [L]
1 0 0
160
[L] = 1.25 1 0
0.25 0.7142857143 1
161
Este es finalmente el valor de x1, x2 y x3; es decir, la respuesta del ejercicio
utilizando la descomposición LU.
Form1.
Botón ENTRAR.
162
Form2.
Botón: U
Botón: L
Botón: LU
163
Botón: Capturar [B]
Botón: LD=I
Botón: LD=j
Botón: LD=K
Botón: Ux=D
Botón: Uy=D
Botón: Uz=D
Botón: Solución
Botón: RESET
Botón: SALIR
164
Tiene la función de salir del form1 y regresar la portada del formulario principal.
Form1.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
165
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
TForm1 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Form2->Show();
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
Form2.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
166
TForm2 *Form2;
TForm2 *Form3;
double B[3][3], p, n, l;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
A[i][j]= Edit1->Text.ToDouble();
Edit1->Text="";
Edit1->SetFocus();
if(i==1){
if(j==1)Edit2->Text=A[1][1];
if(j==2)Edit3->Text=A[1][2];
if(j==3)Edit4->Text=A[1][3];
if(i==2){
if(j==1)Edit5->Text=A[2][1];
if(j==2)Edit6->Text=A[2][2];
if(j==3)Edit7->Text=A[2][3];
if(i==3){
if(j==1)Edit8->Text=A[3][1];
if(j==2)Edit9->Text=A[3][2];
if(j==3)Edit10->Text=A[3][3];
167
}
j++;
if(j==4){
i++;
j=1;
if(A[1][1]==0){
if(i==4){
a= (A[1][1]*A[2][2]*A[3][3])+(A[2][1]*A[3][2]*A[1][3])+(A[3][1]*A[1][2]*A[2][3]);
b= (A[1][3]*A[2][2]*A[3][1])+(A[2][3]*A[3][2]*A[1][1])+(A[3][3]*A[1][2]*A[2][1]);
det= a-b;
if(det==0){
//---------------------------------------------------------------------------
T[1][1]=A[1][1];
T[1][2]=A[1][2];
T[1][3]=A[1][3];
T[2][j]=A[2][j]-((A[2][1]/A[1][1]*(A[1][j])));
168
for(int j=1; j<=3; j++){
T[3][j]=A[3][j]-((A[3][1]/A[1][1]*(A[1][j])));
U[3][j]=T[3][j]-((T[3][2]/T[2][2]*(T[2][j])));
U[1][1]=T[1][1];
U[1][2]=T[1][2];
U[1][3]=T[1][3];
U[2][1]=T[2][1];
U[2][2]=T[2][2];
U[2][3]=T[2][3];
Edit11->Text=AnsiString(U[1][1]);
Edit12->Text=AnsiString(U[1][2]);
Edit13->Text=AnsiString(U[1][3]);
Edit14->Text=AnsiString(U[2][1]);
Edit15->Text=AnsiString(U[2][2]);
Edit16->Text=AnsiString(U[2][3]);
Edit17->Text=AnsiString(U[3][1]);
Edit18->Text=AnsiString(U[3][2]);
Edit19->Text=AnsiString(U[3][3]);
Edit1->SetFocus();
//---------------------------------------------------------------------------
169
L[1][1]=1;
L[1][2]=0;
L[1][2]=0;
L[2][1]=A[2][1]/A[1][1];
L[2][2]=1;
L[2][3]=0;
L[3][1]=A[3][1]/A[1][1];
L[3][2]=T[3][2]/T[2][2];
L[3][3]=1;
Edit20->Text=AnsiString(L[1][1]);
Edit21->Text=AnsiString(L[1][2]);
Edit22->Text=AnsiString(L[1][3]);
Edit23->Text=AnsiString(L[2][1]);
Edit24->Text=AnsiString(L[2][2]);
Edit25->Text=AnsiString(L[2][3]);
Edit26->Text=AnsiString(L[3][1]);
Edit27->Text=AnsiString(L[3][2]);
Edit28->Text=AnsiString(L[3][3]);
Label7->Caption="Oprima LU";
//---------------------------------------------------------------------------
LU[1][1]=A[1][1];
LU[1][2]=A[1][2];
LU[1][3]=A[1][3];
LU[2][1]=A[2][1];
LU[2][2]=A[2][2];
LU[2][3]=A[2][3];
LU[3][1]=A[3][1];
LU[3][2]=A[3][2];
170
LU[3][3]=A[3][3];
Edit29->Text=AnsiString(LU[1][1]);
Edit30->Text=AnsiString(LU[1][2]);
Edit31->Text=AnsiString(LU[1][3]);
Edit32->Text=AnsiString(LU[2][1]);
Edit33->Text=AnsiString(LU[2][2]);
Edit34->Text=AnsiString(LU[2][3]);
Edit35->Text=AnsiString(LU[3][1]);
Edit36->Text=AnsiString(LU[3][2]);
Edit37->Text=AnsiString(LU[3][3]);
Label7->Caption="Oprima LD=i";
//---------------------------------------------------------------------------
Z[1][1]=1;
Z[2][1]=(-1*L[2][1]*L[1][1]+L[2][3]);
Z[3][1]=(-1*L[3][2]*Z[2][1]+(-1*L[3][1]));
Edit38->Text=AnsiString(Z[1][1]);
Edit39->Text=AnsiString(Z[2][1]);
Edit40->Text=AnsiString(Z[3][1]);
Label7->Caption="Oprima LD=j";
//---------------------------------------------------------------------------
Z[1][2]=0;
Z[2][2]=1;
Z[3][2]=1*(-L[3][2]);
Edit41->Text=AnsiString(Z[1][2]);
Edit42->Text=AnsiString(Z[2][2]);
171
Edit43->Text=AnsiString(Z[3][2]);
Label7->Caption="Oprima LD=k";
//---------------------------------------------------------------------------
Z[1][3]=0;
Z[2][3]=0;
Z[3][3]=1*L[3][3];
Edit44->Text=AnsiString(Z[1][3]);
Edit45->Text=AnsiString(Z[2][3]);
Edit46->Text=AnsiString(Z[3][3]);
Label7->Caption="Sigue.. Ux=D";
//---------------------------------------------------------------------------
X[3][1]=Z[3][1]/U[3][3];
X[2][1]=((Z[2][1])-((U[2][3])*(X[3][1])))/(U[2][2]);
X[1][1]=((Z[1][1])-(U[1][3])*(X[3][1])-(U[1][2])*(X[2][1]))/(U[1][1]);
Edit47->Text=AnsiString(Z[1][1]);
Edit48->Text=AnsiString(Z[2][1]);
Edit49->Text=AnsiString(Z[3][1]);
Label7->Caption="Sigue.. Uy=D";
//---------------------------------------------------------------------------
X[3][2]=Z[3][2]/U[3][3];
X[2][2]=((Z[2][2])-((U[2][3])*(X[3][2])))/(U[2][2]);
X[1][2]=((Z[1][2])-(U[1][3])*(X[3][2])-(U[1][2])*(X[2][2]))/(U[1][1]);
172
Edit50->Text=AnsiString(Z[1][2]);
Edit51->Text=AnsiString(Z[2][2]);
Edit52->Text=AnsiString(Z[3][2]);
Label7->Caption="Sigue.. Uz=D";
//---------------------------------------------------------------------------
X[3][3]=Z[3][3]/U[3][3];
X[2][3]=((Z[2][3])-((U[2][3])*(X[3][3])))/(U[2][2]);
X[1][3]=((Z[1][3])-(U[1][3])*(X[3][3])-(U[1][2])*(X[2][3]))/(U[1][1]);
Edit53->Text=AnsiString(Z[1][3]);
Edit54->Text=AnsiString(Z[2][3]);
Edit55->Text=AnsiString(Z[3][3]);
//---------------------------------------------------------------------------
Edit56->Text=AnsiString(X[1][1]);
Edit57->Text=AnsiString(X[1][2]);
Edit58->Text=AnsiString(X[1][3]);
Edit59->Text=AnsiString(X[2][1]);
Edit60->Text=AnsiString(X[2][2]);
Edit61->Text=AnsiString(X[2][3]);
Edit62->Text=AnsiString(X[3][1]);
Edit63->Text=AnsiString(X[3][2]);
Edit64->Text=AnsiString(X[3][3]);
Label3->Caption="Encontrastes la [A]-1";
//---------------------------------------------------------------------------
173
void __fastcall TForm2::Button12Click(TObject *Sender)
V[1][1]=((A[1][1]*X[1][1])+(A[1][2]*X[2][1])+(A[1][3]*X[3][1]));
V[1][2]=((A[1][1]*X[1][2])+(A[1][2]*X[2][2])+(A[1][3]*X[3][2]));
V[1][3]=((A[1][1]*X[1][3])+(A[1][2]*X[2][3])+(A[1][3]*X[3][3]));
V[2][1]=((A[2][1]*X[1][1])+(A[2][2]*X[2][1])+(A[2][3]*X[3][1]));
V[2][2]=((A[2][1]*X[1][2])+(A[2][2]*X[2][2])+(A[2][3]*X[3][2]));
V[2][3]=((A[2][1]*X[1][3])+(A[2][2]*X[2][3])+(A[2][3]*X[3][3]));
V[3][1]=((A[3][1]*X[1][1])+(A[3][2]*X[2][1])+(A[3][3]*X[3][1]));
V[3][2]=((A[3][1]*X[1][2])+(A[3][2]*X[2][2])+(A[3][3]*X[3][2]));
V[3][3]=((A[3][1]*X[1][3])+(A[3][2]*X[2][3])+(A[3][3]*X[3][3]));
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
174
Edit16->Text="";
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
Edit20->Text="";
Edit21->Text="";
Edit22->Text="";
Edit23->Text="";
Edit24->Text="";
Edit25->Text="";
Edit26->Text="";
Edit27->Text="";
Edit28->Text="";
Edit29->Text="";
Edit30->Text="";
Edit31->Text="";
Edit32->Text="";
Edit33->Text="";
Edit34->Text="";
Edit35->Text="";
Edit36->Text="";
Edit37->Text="";
Edit38->Text="";
Edit39->Text="";
Edit40->Text="";
Edit41->Text="";
Edit42->Text="";
Edit43->Text="";
Edit44->Text="";
Edit45->Text="";
Edit46->Text="";
175
Edit47->Text="";
Edit48->Text="";
Edit49->Text="";
Edit50->Text="";
Edit51->Text="";
Edit52->Text="";
Edit53->Text="";
Edit54->Text="";
Edit55->Text="";
Edit56->Text="";
Edit57->Text="";
Edit58->Text="";
Edit59->Text="";
Edit60->Text="";
Edit61->Text="";
Edit62->Text="";
Edit63->Text="";
Edit64->Text="";
Label3->Caption="";
Label7->Caption="";
i=1;
j=1;
r=1;
s=1;
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
176
void __fastcall TForm2::Button15Click(TObject *Sender)
C[1][1]=V[1][1];
C[1][2]=V[1][2];
C[1][3]=V[1][3];
C[2][1]=V[2][1];
C[2][2]=V[2][2];
C[2][3]=V[2][3];
C[3][1]=V[3][1];
C[3][2]=V[3][2];
C[3][3]=V[3][3];
//---------------------------------------------------------------------------
Form3->Label1->Caption=AnsiString(det);
Form3->Show();
//---------------------------------------------------------------------------
p=(X[1][1]*B[1][1]+X[1][2]*B[2][1]+X[1][3]*B[3][1]);
l=(X[2][1]*B[1][1]+X[2][2]*B[2][1]+X[2][3]*B[3][1]);
n=(X[3][1]*B[1][1]+X[3][2]*B[2][1]+X[3][3]*B[3][1]);
Edit67->Text=AnsiString(p);
Edit68->Text=AnsiString(l);
Edit69->Text=AnsiString(n);
177
//---------------------------------------------------------------------------
B[r][s]=Edit70->Text.ToDouble();
Edit70->SetFocus();
Edit70->Text="";
if(r==1){
if(s==1)Edit83->Text=B[1][1];
if(r==2){
if(s==1)Edit65->Text=B[2][1];
if(r==3){
if(s==1)Edit66->Text=B[3][1];
s++;
if(s==2){
r++;
s=1;
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
Form3.
//---------------------------------------------------------------------------
#include <vcl.h>
178
#pragma hdrstop
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm3 *Form3;
TForm3 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
179
7. Interpolación polinomial por el método de
Newton de diferencias divididas
P(x)= a₀+a₁X+a₂X²+……anXⁿ
a= Coeficientes
x= literal que se va a evaluar para encontrar el valor de y
n= exponente
F(x)=b₀+b₁(x-x₀)+b₂(x-x₀)(x-x₁)….+bn(x-x₀)(x-xn)
Donde;
x= valor a evaluar
Paso 1
De los puntos dados de mi función (recordemos que muchas veces solo nos
proporcionan el dominio y contradominio) (x,y) dependerá el polinomio que
debemos encontrar (véase en la parte superior de la página).
Paso 2
F(x₀)= x₀
F(x₀,x₁)
F(x₁)= X₁ F(x₀,x₁,x₂,x₃)
{ F(x₁,x₂) { F(x₀,x₁,x₂)
{
F(x₂)= X₂ F(x₁,x₂,x₃)
F(x₂,x₃)
F(x₃)= x₃
181
La ultima parte F(x₀,x₁,x₂,x₃) es igual a la relación de los 4 puntos dados, los
coeficientes encontrados en el paso anterior se dividen entre la diferencia del
mayor al menor del intervalo.
Por último los valores que nos queda en la diagonal roja, formaran los
coeficientes de nuestro polinomio, si se preguntan por qué calculamos los
demás, era porque eran necesarios para encontrar todos los valores.
F(x)= b₀+b₁(x-x₀)+b₂(x-x₀)(x-x₁)……+bn(x-x₀)(x-xn)
EJEMPLO:
(4.67078-1.71828)/2=1.47625, (12.6989-4.67078)/2=4.01406
(4.01406-1.47625)/3=.8459
F(x)=b+b(x-x₁)+b(x-x₁)(x-x₂)…..+bn(x-x₁)(x-xn)
F(x)= 1+1.71828(x-1)+1.47625(x-1)(x-2)+0.84553(x-1)(x-2)(x-3)
182
F(x)= 1+1.71828(1.5)+1.47625(1.5)(1.5-1)+0.84553(1.5)(1.5-1)(1.5-2)
F(x)= 4.3675
GRAFICA:
Código de programación
183
Interfaz gráfica:
Su programación:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
184
void __fastcall TForm1::Button2Click(TObject *Sender)
Close();
//---------------------------------------------------------------------------
Form2->Show();
Form2->Edit11->SetFocus();
//---------------------------------------------------------------------------
Interfaz gráfica:
Su programación:
//---------------------------------------------------------------------------
185
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
double
a,a1,a2,b0,b1,b2,b3,x0,x1,x2,x3,x,y,y0,y1,y2,y3,Inicio,Fin,k,f,g,h,i,j,p,q,r,s,t,Fx1,Fx2,Fx3,Fx4,Fx5;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
x0=Edit1->Text.ToDouble();
x1=Edit2->Text.ToDouble();
y0=Edit5->Text.ToDouble();
y1=Edit6->Text.ToDouble();
b0=y0;
b1=(y1-y0)/(x1-x0);
186
Label3->Caption=(b0);
Label4->Caption=(b1);
//---------------------------------------------------------------------------
x0=Edit1->Text.ToDouble();
x1=Edit2->Text.ToDouble();
x2=Edit3->Text.ToDouble();
y0=Edit5->Text.ToDouble();
y1=Edit6->Text.ToDouble();
y2=Edit7->Text.ToDouble();
b0=y0;
b1=(y1-y0)/(x1-x0);
a=(y2-y1)/(x2-x1);
b2=(a-b1)/(x2-x0);
Label3->Caption=(b0);
Label4->Caption=(b1);
Label5->Caption=(b2);
//---------------------------------------------------------------------------
x0=Edit1->Text.ToDouble();
187
x1=Edit2->Text.ToDouble();
x2=Edit3->Text.ToDouble();
x3=Edit4->Text.ToDouble();
y0=Edit5->Text.ToDouble();
y1=Edit6->Text.ToDouble();
y2=Edit7->Text.ToDouble();
y3=Edit8->Text.ToDouble();
b0=y0;
b1=(y1-y0)/(x1-x0);
a=(y2-y1)/(x2-x1);
b2=(a-b1)/(x2-x0);
a1=(y3-y2)/(x3-x2);
a2=(a1-a)/(x3-x1);
b3=(a2-b2)/(x3-x0);
Label3->Caption=(b0);
Label4->Caption=(b1);
Label5->Caption=(b2);
Label6->Caption=(b3);
//---------------------------------------------------------------------------
x=Edit9->Text.ToDouble();
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Edit10->Text=AnsiString(y);
188
}
//---------------------------------------------------------------------------
Form3->Show();
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(400,200);
Form3->Canvas->LineTo(830,200);
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(600,50);
Form3->Canvas->LineTo(600,360);
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Color=0x009747EF;
Inicio=-10;
Fin=10;
x=Inicio;
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Form3->Canvas->PenPos=TPoint(600+14*Inicio,200-5*y);
for(x=Inicio;x<Fin;x++)
189
{
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Form3->Canvas->LineTo(600+15*x,200-5*y);
Form3->Canvas->Pen->Color=clBlack;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(400,200);
Form3->Canvas->LineTo(830,200);
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(600,50);
Form3->Canvas->LineTo(600,360);
Form3->Canvas->Pen->Color=0x009747EF;
Inicio=-10;
Fin=10;
x=Inicio;
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Form3->Canvas->PenPos=TPoint(600+15*Inicio,200-5*y);
for(x=Inicio;x<Fin;x++)
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Canvas->PenPos=TPoint(600+15*x,200-5*y);
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(400,200);
Form3->Canvas->LineTo(830,200);
190
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Width=2;
Form3->Canvas->PenPos=TPoint(600,50);
Form3->Canvas->LineTo(600,360);
Form3->Canvas->Pen->Color=clTeal;
Form3->Canvas->Pen->Color=0x009747EF;
Inicio=-10;
Fin=10;
x=Inicio;
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Form3->Canvas->PenPos=TPoint(600+14*Inicio,200-5*y);
for(x=Inicio;x<Fin;x++)
y=b0+b1*(x-x0)+b2*(x-x0)*(x-x1)+b3*(x-x0)*(x-x1)*(x-x2);
Form3->Canvas->LineTo(600+15*x,200-5*y);
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
191
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit17->Text="";
Label3->Caption="";
Label4->Caption="";
Label5->Caption="";
Label6->Caption="";
Edit11->SetFocus();
//---------------------------------------------------------------------------
Close ();
//---------------------------------------------------------------------------
192
void __fastcall TForm2::Button8Click(TObject *Sender)
f=Edit11->Text.ToDouble ();
g=Edit12->Text.ToDouble ();
h=Edit13->Text.ToDouble ();
i=Edit14->Text.ToDouble ();
j=Edit15->Text.ToDouble ();
p=Edit1->Text.ToDouble ();
q=Edit2->Text.ToDouble ();
r=Edit3->Text.ToDouble ();
s=Edit4->Text.ToDouble ();
t=Edit16->Text.ToDouble ();
Fx1=f*(pow(p,4))+g*(pow(p,3))+h*(pow(p,2))+i*p+j;
Edit5->Text=AnsiString (Fx1);
Fx2=f*(pow(q,4))+g*(pow(q,3))+h*(pow(q,2))+i*q+j;
Edit6->Text=AnsiString (Fx2);
Fx3=f*(pow(r,4))+ g*(pow(r,3))+h*(pow(r,2))+i*r+j;
Edit7->Text=AnsiString (Fx3);
Fx4=f*(pow(s,4))+g*(pow(s,3))+h*(pow(s,2))+i*s+j;
Edit8->Text=AnsiString (Fx4);
Fx5=f*(pow(t,4))+g*(pow(t,3))+h*(pow(t,2))+i*t+j;
Edit17->Text=AnsiString(Fx5);
//---------------------------------------------------------------------------
Interfaz gráfica:
193
Su código de programación:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
double a,a1,a2,b0,b1,b2,b3,x0,x1,x2,x3,x,y,y0,y1,y2,y3,Inicio,Fin,k;
TForm3 *Form3;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
194
void __fastcall TForm3::Button1Click(TObject *Sender)
Close();
Form1->Visible=true;
//---------------------------------------------------------------------------
195
8. Primer Derivada por Métodos Numéricos
Derivación
Funciones Funciones
𝑥2 2𝑥
𝑥3 3𝑥 2
𝑥4 4𝑥 3
𝑦 = 3𝑥 2 + 7𝑥 𝑦′ = 6𝑥 + 7
1 13
Datos Datos
2 19
3 25
196
Derivación numérica
X0 Datos
Datos Y0
X1 Y1
Las fórmulas para derivar no son iguales, depende del orden (pares de datos a
utilizar), la función estará dada por
197
Siguiendo los pasos anteriores tenemos que:
𝑦0 𝑦1 𝑦2
𝑥0 𝑥1 𝑥2
198
𝑓 ′′′ (𝑒)
𝑓(𝑥) = 𝑃𝑛 (𝑥) + (𝑥 − 𝑥0 )(𝑥 − 𝑥1 )(𝑥 − 𝑥2 )
3!
Polinomio interpolador
𝒃𝟎 𝒃𝟏 𝒃𝟐
𝑦1 − 𝑦0
𝒙𝟎 𝑦0 𝑦2 − 𝑦1 𝑦1 − 𝑦0
𝑥1 − 𝑥0
𝑥2 − 𝑥1 − 𝑥1 − 𝑥0
𝑦2 − 𝑦1
𝒙𝟏 𝑦1 𝑥2 − 𝑥0
𝑥2 − 𝑥1
𝒙𝟐 𝑦2
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0
𝑃(𝑥) = 𝑦0 + (𝑥 − 𝑥0 ) + (𝑥 − 𝑥0 )(𝑥 − 𝑥1 )
ℎ 2ℎ2
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0
𝑃′(𝑥) = + (𝑥 − 𝑥0 ) + (𝑥 − 𝑥1 )
ℎ 2ℎ2
Evaluando en 𝑥0 , 𝑥1 , 𝑥2 :
𝒙𝟎 (Por la derecha):
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0
𝑃′(𝑥0 ) = + (𝑥0 − 𝑥0 ) + (𝑥0 − 𝑥1 )
ℎ 2ℎ2
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0 −𝑦2 + 4𝑦1 − 3𝑦0
𝑃′ (𝑥0 ) = − =
ℎ 2ℎ 2ℎ
𝒙𝟏 (Central):
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0
𝑃′(𝑥1 ) = + (𝑥1 − 𝑥0 ) + (𝑥1 − 𝑥1 )
ℎ 2ℎ2
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0 𝑦2 − 𝑦0
𝑃′ (𝑥1 ) = + =
ℎ 2ℎ 2ℎ
𝒙𝟐 (Por la izquierda):
𝑦1 − 𝑦0 𝑦2 − 2𝑦1 + 𝑦0
𝑃′(𝑥2 ) = + (𝑥2 − 𝑥0 ) + (𝑥2 − 𝑥1 )
ℎ 2ℎ2
𝑦1 − 𝑦0 3(𝑦2 − 2𝑦1 + 𝑦0 ) 2𝑦1 − 2𝑦0 + 3𝑦2 − 6𝑦1 + 3𝑦0
𝑃′ (𝑥2 ) = + =
ℎ 2ℎ 2ℎ
3𝑦2 − 4𝑦1 + 𝑦0
=
2ℎ
199
Derivando el factor de error:
𝑑 𝑓 ′′′ (𝑒)
(𝑥 − 𝑥0 )(𝑥 − 𝑥1 )(𝑥 − 𝑥2 )
𝑑𝑥 3!
𝑓 ′′′ (𝑒)
= (𝑥 − 𝑥0 )(𝑥 − 𝑥1 ) + (𝑥 − 𝑥0 )(𝑥 − 𝑥2 ) + (𝑥 − 𝑥1 )(𝑥 − 𝑥2 )
3!
Evaluando:
ℎ2
𝐸 ′ (𝑥0 ) = 𝑓 ′′′ (𝑒) En esta existe menor
3
error, ya que su
ℎ2 ′′′ denominador es mayor.
𝐸 ′ (𝑥1 ) = − 𝑓 (𝑒)
6
ℎ2 ′′′
𝐸 ′ (𝑥2 ) = 𝑓 (𝑒)
3
𝒚𝟏 − 𝒚𝟎 𝒉
𝒇’(𝒙𝟎 ) = + 𝒇’’ (𝒆) Derecha
Orden 1 𝒉 𝟐
𝒏=𝟏
𝑦1 − 𝑦0 ℎ
𝑓’(𝑥1 ) = − 𝑓’’ (𝑒) Izquierda
ℎ 2
Orden 2
−𝑦2 + 4𝑦1 − 3𝑦0 ℎ2 ′′′
𝑓 ′ (𝑥0 ) = + 𝑓 (𝑒) Derecha
𝒏=𝟐 2ℎ 3
200
𝑦2 − 𝑦0 ℎ2 ′′′
𝑓 ′ (𝑥) = − 𝑓 (𝑒) Central
2ℎ 6
′ (𝑥)
3𝑦2 − 4𝑦1 + 𝑦0 ℎ2 ′′′
𝑓 = + 𝑓 (𝑒) Izquierda
2ℎ 3
𝒏=𝟑
𝑦0 − 6𝑦1 + 3𝑦2 + 2𝑦3 ℎ3 𝐼𝑉
𝑃′ (𝑥2 ) = − 𝑓 (𝑒) Central
6ℎ 12
201
Interfaz grafica:
204
9. Segunda Derivada Numérica
205
En ingeniería se ocupan para analizar cuestiones técnicas de cada rama, por
ejemplo, en electrónica con la ley de Ohm, en química con la leyes de los
gases ideales, en ingeniería civil se ocupan las derivadas para relacionar las
ecuaciones de cargas estáticas con las ecuaciones de momentos flexionantes,
en mecánica se ocupan para calcular para calcular inercias, velocidades,
aceleraciones, y por lo tanto fuerzas internas y externas que actúan en un
mecanismo.
INTERPRETACIÓN DE LA DERIVADA
206
La pendiente de la tangente a la curva en un punto es igual a
la derivada de la función en ese punto.
m t = f'(a)
207
LA DERIVACIÓN NUMÉRICA
208
Fórmulas de Diferencias Centradas
Xj = x0 + jh, j=0, …, n,
PROGRESIVAS:
209
REGRESIVAS:
Entonce
s, para
x= xj, se tiene la fórmula:
CENTRALES:
210
A partir de las fórmulas progresivas, regresivas o centrales para la
aproximación de las derivadas primeras y teniendo en cuenta que la derivada
de orden v de f es la derivada primera de la derivada de orden (v-1) de f, se
pueden obtener fórmulas para las derivadas de orden superior.
211
Por ejemplo, considerando las fórmulas centrales se tiene:
Mediante este mismo procso se pueden obtener fórmulas para las derivadas de
orden tercero, cuarto, etc.
212
INTERFAZ GRÁFICA
213
PROGRAMACIÓN
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
//---------------------------------------------------------------------------
214
: TForm(Owner)
//---------------------------------------------------------------------------
Label4->Visible=True;
Label5->Visible=True;
Label6->Visible=True;
Label7->Visible=True;
Button3->Visible=True;
//---------------------------------------------------------------------------
215
void __fastcall TForm1::Button3Click(TObject *Sender)
Form2->Show();
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
FORM 2
#pragma package(smart_init)
double x0, x1, x2, x3, x4, D, h, x, xi, xii, Fx, Fxi, Fxii, F1, F2, F3;
TForm3 *Form3;
//---------------------------------------------------------------------------
216
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
//---------------------------------------------------------------------------
D=1;
//---------------------------------------------------------------------------
D=2;
//---------------------------------------------------------------------------
D=3;
//---------------------------------------------------------------------------
217
void __fastcall TForm3::Button5Click(TObject *Sender)
Image1->Visible=True;
Image2->Visible=False;
x4= Edit1->Text.ToDouble();
x3= Edit2->Text.ToDouble();
x2= Edit3->Text.ToDouble();
x1= Edit4->Text.ToDouble();
x0= Edit5->Text.ToDouble();
h=Edit7->Text.ToDouble();
x=Edit6->Text.ToDouble();
xi= x+h;
xii= x-h;
if (D==1)
218
{
Edit8->Text=AnsiString(F1);
Edit15->Text=AnsiString(x);
Edit16->Text=AnsiString(xi);
if (D==3)
Edit10->Text=AnsiString(F3);
Edit15->Text=AnsiString(x);
if (D==2)
Edit9->Text=AnsiString(F2);
219
Edit14->Text=AnsiString(xii);
Edit16->Text=AnsiString(xi);
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
D1=1;
//---------------------------------------------------------------------------
220
void __fastcall TForm3::RadioButton5Click(TObject *Sender)
D1=2;
//---------------------------------------------------------------------------
D1=3;
//---------------------------------------------------------------------------
Image2->Visible=True;
Image1->Visible=False;
221
xi2= x+(2*h);
x2ii= x- (2*h);
if (D1==1)
Edit11->Text=AnsiString(Fx);
if (D1==3)
Edit13->Text=AnsiString(Fxx1);
222
if (D1==2)
Edit12->Text=AnsiString(Fxx2);
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
223
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit1->SetFocus();
FORM 3
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit4.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
224
double g, y0, y1, y2, y3, Fy0, Fy1, Fy2, Fy3, a0, a1,a2, p1, p2,p3, yi, pol,
p2i;
TForm4 *Form4;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Fy0=Edit1->Text.ToDouble();
Fy1=Edit2->Text.ToDouble();
Fy2=Edit3->Text.ToDouble();
Fy3=Edit4->Text.ToDouble();
y0=Edit5->Text.ToDouble();
y1=Edit6->Text.ToDouble();
y2=Edit7->Text.ToDouble();
y3=Edit8->Text.ToDouble();
225
H=Edit10->Text.ToDouble();
g= Fy2/ ((y2-y0)-y2-y1));
df=Edit9->Text.ToDouble();
ai1=(a0*(yi-y1)+(yy2));
ai3=(a2)*(yi-1));
pol= ai1+ai2+ai3;
poli= pol+H;
pol= pol-H;
Edit12->Text=AnsiString(pol);
Edit11->Text=AnsiString(polii);
Edit13->Text=AnsiString(poli);
226
Edit14->Text=AnsiString(Fxx);
Edit15->Text=AnsiString(g3) ;
Edit16->Text=AnsiString(gg2) ;
//---------------------------------------------------------------------------
v=1;
//---------------------------------------------------------------------------
v=2;
//---------------------------------------------------------------------------
v=3;
//---------------------------------------------------------------------------
227
10. Integración numérica por el método de
Simpson tres octavos
Este problema también puede ser enunciado como un problema de valor inicial
para una ecuación diferencial ordinaria, como sigue:
La fórmula fue utilizada por primera vez por Evangelista Torricelli, pero debe su
nombre al matemático Inglés Thomas Simpson. Corresponde a la regla del
tonel que Johannes Kepler ya había formulado en 1615.
Entre otras cosas, Kepler describió en ese texto una fórmula para el cálculo de
la capacidad (más precisamente, del volumen) de barriles de vino con formas
irregulares. Esta fórmula arroja valores exactos para el tronco de la pirámide
(incluida la pirámide), la esfera, el paraboloide elíptico, el hiperboloide de una
hoja y todas las demás superficies de un cuerpo que pueden ser generadas por
secciones planas perpendiculares al eje del cuerpo.
Formula de newton-cotes
Reglas de Simpson
Se dividen en dos:
Regla de simpson3/8
230
Los ingenieros encuentran con frecuencia el problema de integrar funciones
que están definidas en forma tabular o en forma gráfica y no como funciones
explícitas, se pueden utilizar métodos gráficos, pero los métodos numéricos
son mucho mas precisos.
231
Esta programa está basado en la regla de Simpson 3/8, está programado para
integrar funciones de quinto grado y obtener su cuarta derivada, el uso del
programa de es fácil a continuación una serie de pasos de cómo utilizar el
programa:
1) Introducimos los límites de la función que sería de “a” a “b” y capturamos
a,b.
232
2) Introducimos la función de quinto grado si la función a introducir no es de
quinto grado se coloca el cero en donde le corresponda por ejemplo la
siguiente función: x^3+8; entonces en el programa se escribiría así:
5) A continuación la programación;
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
TForm1 *Form2;
233
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Form2->Show();
//---------------------------------------------------------------------------
Close();
//--------------------------------------------------------------------------
Form2.
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
double a,b,h,hf,h1,Xm,Xn,c,d,e,f,g,fXm,fXn,fa,inte,fb,a1,a2,a3,a4,a5,b1,b2,b3,b4,
b5,Xm5,Xm4,Xm3,Xm2,Xm1,Xn5,Xn4,Xn3,Xn2,Xn1,fsus,m1,m2,O,k,A5,A4,A3,A2,A1,B4,B3,
B2,B1,C3,C2,C1,D2,D1,E1,Fsus,E,h2,Ea,Ea1;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
234
{
//---------------------------------------------------------------------------
c =Edit6->Text.ToDouble();
d =Edit7->Text.ToDouble();
e =Edit8->Text.ToDouble();
f =Edit9->Text.ToDouble();
g =Edit10->Text.ToDouble();
h1 =Edit11->Text.ToDouble();
//---------------------------------------------------------------------------
a= Edit1->Text.ToDouble();
b= Edit2->Text.ToDouble();
//---------------------------------------------------------------------------
h=b-a;
hf=h/3;
Xm=a+hf;
Xn=Xm+hf;
Edit3->Text=AnsiString(hf);
Edit4->Text=AnsiString(Xm);
Edit5->Text=AnsiString(Xn);
a2=pow(a,2);
a3=pow(a,3);
a4=pow(a,4);
235
a5=pow(a,5);
a1=a;
b2=pow(b,2);
b3=pow(b,3);
b4=pow(b,4);
b5=pow(b,5);
b1=b;
Xm2=pow(Xm,2);
Xm3=pow(Xm,3);
Xm4=pow(Xm,4);
Xm5=pow(Xm,5);
Xm1=Xm;
Xn2=pow(Xn,2);
Xn3=pow(Xn,3);
Xn4=pow(Xn,4);
Xn5=pow(Xn,5);
Xn1=Xn;
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
fa=(c*a5)+(d*a4)+(e*a3)+(f*a2)+(g*a1)+h1;
fXm=(c*Xm5)+(d*Xm4)+(e*Xm3)+(f*Xm2)+(g*Xm1)+h1;
fXn=(c*Xn5)+(d*Xn4)+(e*Xn3)+(f*Xn2)+(g*Xn1)+h1;
fb=(c*b5)+(d*b4)+(e*b3)+(f*b2)+(g*b1)+h1;
Edit13->Text=AnsiString(fa);
236
Edit14->Text=AnsiString(fXm);
Edit15->Text=AnsiString(fXn);
Edit16->Text=AnsiString(fb);
fsus=fa+(3*fXm)+(3*fXn)+fb;
k=(.125)*h;
inte= k*fsus ;
Edit12->Text=AnsiString(inte);
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
h=0;
fXm=0;
fXn=0;
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
237
Edit20->Text="";
//---------------------------------------------------------------------------
A5=c*5;
B4=d*4;
C3=e*3;
D2=f*2;
E1=g;
A4=A5*4;
B3=B4*3;
C2=C3*2;
D1=D2;
A3=A4*3;
B2=B3*2;
C1=C2;
A2=A3*2;
Edit17->Text=AnsiString(A2);
B1=B2;
Edit18->Text=AnsiString(B1);
//---------------------------------------------------------------------------
E= Edit19->Text.ToDouble();
Fsus=(A2*E)+B1;
h2=pow(h,5);
Ea=-(h2/6480);
Ea1=Ea*Fsus;
Edit20->Text=AnsiString(Ea1);
//---------------------------------------------------------------------------
238
11. Solución de ecuaciones diferenciales por el
método de Taylor.
Introducción
239
Fundamento teórico
𝑭(𝒙, 𝒚, 𝒚′ , 𝒚′′ , … , 𝒚𝒏 ) = 𝟎
𝒅𝒚 𝒅𝟐 𝒚 𝒅𝒏 𝒚
𝑭 𝒙, 𝒚, 𝒅𝒙 , 𝒅𝟐 𝒙 , … , 𝒅𝒏 𝒙 = 𝟎
Por ejemplo:
𝒅𝒚 𝒅𝟐 𝒚 𝒅𝒚 𝒅𝒚 𝒅𝒙
+ 𝟓𝒚 = 𝒆𝒙 , − 𝒅𝒙 + 𝟔𝒚 = 𝟎 y + 𝒅𝒕 = 𝟐𝒙 + 𝒚
𝒅𝒙 𝒅𝒙𝟐 𝒅𝒕
Por ejemplo:
𝒅𝟐 𝒖 𝒅𝟐 𝒖 𝒅𝟐 𝒖 𝒅𝟐 𝒖 𝒅𝒖 𝒅𝒖 𝒅𝒗
+ 𝒅𝒚𝟐 = 𝟎, = − 𝟐 𝒅𝒕 y = − 𝒅𝒙
𝒅𝒙𝟐 𝒅𝒙𝟐 𝒅𝒕𝟐 𝒅𝒚
240
Clasificación según su orden.
𝒂) 𝐲 ′′ + 𝐱𝐲 ′ − 𝟑𝐲 = 𝐞𝟐𝐱
𝐛) 𝐲′′′ + 𝐲′′ + 𝐲 = 𝟎
241
Se llama solución (o integral) de la ecuación diferencial a cualquier función
𝑦 = 𝑦(𝑥) que introducida en la ecuación diferencial la transforma en igualdad y
verifica la ecuación.
Tipos de soluciones
Una ecuación diferencial puede tener una cantidad infinita de soluciones que
corresponden a las posibles elecciones de valores para los parámetros.
242
Edmonton
Biografía de Brook Taylor.
Ciudad de Canadá
Brook Taylor
(18/08/1685 - 29/12/1731)
Matemático británico
En el siglo XIV, los primeros ejemplos del uso de series de Taylor y métodos
similares fueron dados por Madhava de Sangamagrama. A pesar de que hoy
en día ningún registro de su trabajo ha sobrevivido a los años, escritos de
matemáticos hindúes posteriores sugieren que él encontró un número de casos
especiales de la serie de Taylor, incluidos aquellos para las funciones
trigonométricas del seno, coseno, tangente y arco-tangente.
En el siglo XVII, James Gregory también trabajó en esta área y publicó varias
series de Maclaurin. Pero en 1715 se presentó una forma general para
construir estas series para todas las funciones para las que existe y fue
presentado por Brook Taylor, de quién recibe su nombre. Las series de
Maclaurin fueron nombradas así por Colin Maclaurin, un profesor de Edimburgo,
quién publicó el caso especial de las series de Taylor en el siglo XVIII.
(𝒙 − 𝒂)
′ (𝒂) ′′ (𝒂)
(𝒙 − 𝒂)𝟐 ′′′ (𝒂)
(𝒙 − 𝒂)𝟑
𝒚(𝒙) = 𝒚(𝒂) + 𝒚 +𝒚 +𝒚 +⋯
𝟏! 𝟐! 𝟑!
(𝒙 − 𝒂)𝒏
+ 𝒚𝒏 (𝒂)
𝒏!
246
Ahora:
1.- La función 𝑓(𝑥) debe pertenecer al ser infinito esto quiere decir que tenga
infinitas derivadas.
2.- Que la serie converge (que por más que crezca la serie o la alarguemos
hacia el infinito, la suma de todos sus elementos tiende a un límite “n”).
4.- Derivaremos la función, claro que no se puede derivar infinitas veces, pero
entre más veces se derive más aproximado será el resultado
′ (𝒂)
(𝒉) ′′ (𝒂)
(𝒉)𝟐 ′′′ (𝒂)
(𝒉)𝟑 𝒏 (𝒂)
(𝒉)𝒏
𝒇(𝒙) = 𝒇(𝒂) + 𝒇 +𝒇 +𝒇 + ⋯+ 𝒇
𝟏! 𝟐! 𝟑! 𝒏!
Ejemplos:
𝑑𝑦
Usar las series de Taylor para hallar la solución en serie de = 𝑦 2 − 𝑡. Donde
𝑑𝑡
la condición inicial es 𝑦 = 1 en 𝑡 = 0. Usaremos los primeros términos de esta
solución en serie para aproximar los valores de 𝑦.
247
𝒚′′(𝟎) 𝟐 𝒚′′′(𝟎) 𝟑
𝒚 = 𝒚(𝟎) + 𝒚′ (𝟎)𝒕 + 𝒕 + 𝒕 +⋯
𝟐! 𝟑!
𝐶𝑜𝑚𝑜 𝑦(0) = 1 e 𝑦’ = 𝑦 2 − 𝑡, derivando se tiene lo siguiente:
𝒚(𝟎) = 𝟏
𝒚′ = 𝒚𝟐 − 𝒕 𝒚′ (𝟎) = 𝟏
𝟏 𝟒 𝟏𝟒 𝟒 𝟔𝟔 𝟓
𝒚 = 𝟏 + 𝒕 + 𝒕𝟐 + 𝒕𝟑 + 𝒕 + 𝒕 …
𝟐 𝟑 𝟒 𝟓
Solución:
𝒚´´ = 𝟐𝒙𝒚´ + 𝟐𝒚
𝒚𝟎 =1
248
𝒚´𝟎 = 𝟐𝒙𝟎 𝒚𝟎 = 𝟐(𝟏)(𝟏) = 𝟐
(𝒉)𝟐 𝟎. 𝟏𝟐
𝒇(𝒙) = 𝒇(𝒙𝒏 ) + 𝒇′ (𝒙𝒏 )(𝒉) + 𝒇′′ (𝒙𝒏 ) = 𝟏 + 𝟐(𝟎. 𝟏) + 𝟔 = 𝟏. 𝟐𝟑
𝟐! 𝟐
1. Cargar B:
249
6. Entrar al folder creado.
INTERFAZ GRAFICA:
Presentación del programa, con dos botones uno para entrar a la ventana
principal y el otro para salir del programa.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
251
Close();
//---------------------------------------------------------------------------
Form2->Show();
//---------------------------------------------------------------------------
Ventana principal.
Esta ventana consta de 27 componentes Edit de los cuales 17 están ocultos para aparecer
cuando se cumplan ciertas condiciones del programa, con 7 botones, 3 de ellos para
calcular, 2 para leer datos y guardarlos, uno para regresar a la presentación y uno para
borrar todos los datos.
252
Interfaz gráfica para calcular la función aproximada a la deseada.
253
Calcular un punto a una distancia “h” de “a” respecto a “x”.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#include <math.h>
double a, b, c, d, e, f, g, h, i, m, n;
255
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
Close();
//---------------------------------------------------------------------------
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit10->Text="";
Edit11->Text="";
RadioButton1->Checked=false;
RadioButton2->Checked=false;
256
Edit9->Visible=false;
Edit12->Visible=false;
Edit13->Visible=false;
Edit14->Visible=false;
Edit15->Visible=false;
Edit16->Visible=false;
Edit17->Visible=false;
Edit18->Visible=false;
Edit19->Visible=false;
Edit20->Visible=false;
Edit21->Visible=false;
Edit22->Visible=false;
Edit23->Visible=false;
Edit24->Visible=false;
Edit25->Visible=false;
Edit26->Visible=false;
Edit27->Visible=false;
Image5->Visible=false;
//---------------------------------------------------------------------------
if(Edit1->Text==""){
Edit1->Text="Sin dato";
if(Edit1->Text!="Sin dato"){
a=Edit1->Text.ToDouble();
257
if(Edit2->Text==""){
Edit2->Text="Sin dato";
if(Edit2->Text!="Sin dato"){
b=Edit2->Text.ToDouble();
if(Edit3->Text==""){
Edit3->Text="Sin dato";
if(Edit3->Text!="Sin dato"){
c=Edit3->Text.ToDouble();
RadioButton1->Checked=false;
RadioButton2->Checked=false;
RadioButton2->Checked=true;
RadioButton1->Checked=true;
//---------------------------------------------------------------------------
if(RadioButton2->Checked==true){
m=b+(d*c)+(e*c*c/2)+(f*c*c*c/6)+(g*c*c*c*c/24);
Edit11->Text=AnsiString(m);
//---------------------------------------------------------------------------
Edit4->Text="Falta derivada";
if(Edit4->Text!="Falta derivada"){
d=Edit4->Text.ToDouble();
if(Edit5->Text==""){
Edit5->Text="Falta derivada";
if(Edit5->Text!="Falta derivada"){
e=Edit5->Text.ToDouble();
if(Edit6->Text==""){
Edit6->Text="Falta derivada";
if(Edit6->Text!="Falta derivada"){
f=Edit6->Text.ToDouble();
259
if(Edit7->Text==""){
Edit7->Text="Falta derivada";
if(Edit7->Text!="Falta derivada"){
g=Edit7->Text.ToDouble();
if(Edit8->Text==""){
Edit8->Text="Falta derivada";
if(Edit8->Text!="Falta derivada"){
h=Edit8->Text.ToDouble();
//---------------------------------------------------------------------------
if(RadioButton1->Checked==true) {
n=h*c*c*c*c*c/120;
Edit10->Text=AnsiString(n);
}
260
}
//---------------------------------------------------------------------------
Edit9->Visible=true;
Edit12->Visible=true;
Edit13->Visible=true;
Edit14->Visible=true;
Edit15->Visible=true;
Edit16->Visible=true;
Edit17->Visible=true;
Edit18->Visible=true;
Edit19->Visible=true;
Edit20->Visible=true;
Edit21->Visible=true;
Edit9->Text=AnsiString(b);
Edit12->Text=AnsiString(d);
Edit13->Text=AnsiString(a);
Edit14->Text=AnsiString(e);
Edit15->Text=AnsiString(a);
Edit16->Text=AnsiString(f);
Edit17->Text=AnsiString(a);
Edit18->Text=AnsiString(g);
Edit19->Text=AnsiString(a);
Edit20->Text=AnsiString(h);
Edit21->Text=AnsiString(a);
261
if(RadioButton1->Checked==true && Edit1->Text=="0"){
Edit9->Visible=true;
Edit12->Visible=true;
Edit13->Visible=true;
Edit14->Visible=true;
Edit15->Visible=true;
Edit16->Visible=true;
Edit17->Visible=true;
Edit18->Visible=true;
Edit19->Visible=true;
Edit20->Visible=true;
Edit21->Visible=true;
Edit22->Visible=true;
Edit23->Visible=true;
Edit24->Visible=true;
Edit25->Visible=true;
Edit26->Visible=true;
Edit27->Visible=true;
Edit9->Text=AnsiString(b);
Edit12->Text=AnsiString(d);
Edit13->Text=AnsiString(a);
Edit14->Text=AnsiString(e);
Edit15->Text=AnsiString(a);
Edit16->Text=AnsiString(f);
Edit17->Text=AnsiString(a);
Edit18->Text=AnsiString(g);
Edit19->Text=AnsiString(a);
Edit20->Text=AnsiString(h);
262
Edit21->Text=AnsiString(a);
Edit22->Text=AnsiString(b);
Edit23->Text=AnsiString(d);
Edit24->Text=AnsiString(e);
Edit25->Text=AnsiString(f);
Edit26->Text=AnsiString(g);
Edit27->Text=AnsiString(h);
Image5->Visible=true;
263
12. Lógica difusa
EJEMPLO COTIDIANO
264
Se puede aplicar en procesos demasiados complejos cuando no existe un
modelo de solución simple o un modelo matemático preciso
¿Cuándo NO ES RECOMENDABLE?
265
Botón Velocidad del Paso: calcula la velocidad con la que la persona debería
de caminar. Se calcula con la siguiente formula: velpaso=Edit3-
>Text.ToDouble()/tie;
Bóton “metros”:
dis=Edit2->Text.ToDouble();
Image2->Visible=True;
if(dis<=15){
Image2->Picture->LoadFromFile("cerca.bmp");
Label4->Caption="Cercana";
if(dis>15&&dis<=50){
Image2->Picture->LoadFromFile("mediocerca.bmp");
Label4->Caption="Medio cerca";
if(dis>50&&dis<=80){
Image2->Picture->LoadFromFile("lejos.bmp");
Label4->Caption="Lejana";
if(dis>80){
Image2->Picture->LoadFromFile("muylejos.bmp");
Label4->Caption="muy Lejana";
l=1;
if(k==1&&l==1){
Button4->Enabled=true;
266
Button1->Enabled=true;
tie=dis/(vel*1000/3600);
Label6->Caption=tie;
Label5->Visible=true;
Label8->Visible=true;
Edit3->Visible=true;
velpaso=Edit3->Text.ToDouble()/tie;
Label9->Caption=velpaso;
if(velpaso<=1){
if(velpaso>1&&velpaso<=2){
if(velpaso>2&&velpaso<=3.5){
if(velpaso>3.5&&velpaso<=6){
if(velpaso>6){
267
Timer1->Enabled=true;
Button6->Enabled=true;
Bóton Reset
Image3->Left=30;
Image4->Top=10;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
k=0;
l=0;
Button4->Enabled=false;
Button1->Enabled=false;
Label2->Caption="";
Label4->Caption="";
Label6->Caption="";
Label9->Caption="";
Label11->Caption="";
Label5->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
Image1->Visible=false;
Image2->Visible=false;
Timer1->Tag=0;
Button6->Enabled=false;
268
13. Método de Newton para
ecuaciones no lineales
269
Para encontrar la fórmula de recurrencia del sistema propuesto se procede a lo
siguiente:
270
271
La programación quedo de la siguiente manera:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
double x1, y1, x2, y2, Tol, n, aux=0, c1, c2, dx, dy,i;
TForm2 *Form2;
272
El button de aproximar solucion quedo así:
x1=Edit1->Text.ToDouble();
y1=Edit2->Text.ToDouble();
Tol=Edit3->Text.ToDouble();
n=Edit4->Text.ToDouble();
aux=0;
i=0;
if (x1==0||y1==0||Tol<=0||n<=0)
if (x1==0&&y1==0&&Tol<=0&&n<=0)
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit1->SetFocus();
else if (x1==0&&y1==0&&Tol<=0)
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
273
Edit1->SetFocus();
else if (x1==0&&y1==0&&n<=0)
Edit1->Text="";
Edit2->Text="";
Edit4->Text="";
Edit1->SetFocus();
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit2->SetFocus();
Edit1->Text="";
Edit3->Text="";
Edit4->Text="";
Edit1->SetFocus();
274
else if (x1==0&& y1==0)
Edit1->Text="";
Edit2->Text="";
Edit1->SetFocus();
Edit1->Text="";
Edit3->Text="";
Edit1->SetFocus();
else if (x1==0&&n<=0)
Edit1->Text="";
Edit4->Text="";
Edit1->SetFocus();
Edit2->Text="";
Edit3->Text="";
Edit2->SetFocus();
275
}
else if (y1==0&&n<=0)
Edit2->Text="";
Edit4->Text="";
Edit2->SetFocus();
else if (Tol<=0&&n<=0)
Edit3->Text="";
Edit4->Text="";
Edit3->SetFocus();
else if (x1==0)
Edit1->Text="";
Edit1->SetFocus();
else if (y1==0)
Edit2->Text="";
Edit2->SetFocus();
276
else if (Tol<=0)
Edit3->Text="";
Edit3->SetFocus();
else
Edit4->Text="";
Edit4->SetFocus();
else
while(aux!=1&&i<n)
x2=(x1/2)+(11/(4*x1));
y2=(y1/2)+(9/(4*y1));
dx=abs(x2-x1);
dy=abs(y2-y1);
aux=1;
else
277
{
x1=x2;
y1=y2;
i++;
c1=(x2*x2)+(y2*y2);
c2=(x2*x2)-(y2*y2);
Edit5->Text=AnsiString(x2);
Edit6->Text=AnsiString(y2);
Edit7->Text=AnsiString(c1);
Edit8->Text=AnsiString(c2);
Edit4->Text=AnsiString(i);
if (aux<=1)
x1=Edit1->Text.ToDouble();
y1=Edit2->Text.ToDouble();
278
Tol=Edit3->Text.ToDouble();
i=0;
if (x1==0||y1==0||Tol<=0)
if (x1==0&&y1==0&&Tol<=0)
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit1->SetFocus();
Edit1->Text="";
Edit2->Text="";
Edit1->SetFocus();
Edit1->Text="";
Edit3->Text="";
Edit1->SetFocus();
}
279
else if (y1==0&& Tol<=0)
Edit2->Text="";
Edit3->Text="";
Edit2->SetFocus();
else if (x1==0)
Edit1->Text="";
Edit1->SetFocus();
else if (y1==0)
Edit2->Text="";
Edit2->SetFocus();
else if (Tol<=0)
Edit3->Text="";
Edit3->SetFocus();
else
280
{
x2=(x1/2)+(11/(4*x1));
y2=(y1/2)+(9/(4*y1));
dx=abs(x2-x1);
dy=abs(y2-y1);
else
x1=x2;
y1=y2;
c1=(x2*x2)+(y2*y2);
c2=(x2*x2)-(y2*y2);
aux=aux+2;
i++;
Edit5->Text=AnsiString(x2);
Edit6->Text=AnsiString(y2);
Edit7->Text=AnsiString(c1);
Edit8->Text=AnsiString(c2);
Edit4->Text=AnsiString(i);
281
El button de reset quedo asi:
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text="";
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit1->SetFocus();
Label11->Caption="";
aux=0;
282
14. Resolución de ecuaciones diferenciales
ordinarias por el Método de Runge-Kutta.
Euler mejorado
𝑓(𝑥𝑛 , 𝑦𝑛 ) + 𝑓(𝑥𝑛+1 , 𝑦𝑛+1 )
𝑓(𝑥𝑛 , 𝑦𝑛 ) =
2
Euler sin
𝑦𝑛+1 = 𝑦𝑛 + ℎ 𝑓(𝑥𝑛 , 𝑦𝑛 ) mejorar
𝑦 ′ = 𝑓(𝑥, 𝑦)
𝑥𝑛 = 𝑥0 + 𝑛 ∙ ℎ o bien 𝑥𝑛+1 = 𝑥𝑛 + ℎ
𝑓(𝑥, 𝑦) = 𝑓(𝑥𝑛 , 𝑦𝑛 )
2. Aproximar a la pendiente con el promedio y aproximar a la derivada con
su diferencia finita:
𝑦𝑛+1 − 𝑦𝑛 𝑓(𝑥𝑛 , 𝑦𝑛 ) + 𝑓(𝑥𝑛+1 , 𝑦𝑛 + ℎ 𝑓(𝑥𝑛 , 𝑦𝑛 ) )
=
ℎ 2
283
ℎ𝑓(𝑥𝑛 , 𝑦𝑛 ) + ℎ𝑓(𝑥𝑛+1 , 𝑦𝑛 + ℎ 𝑓(𝑥𝑛 , 𝑦𝑛 ) )
𝑦𝑛+1 = 𝑦𝑛 +
2
Considérese
𝑘1 = ℎ 𝑓(𝑥𝑛 , 𝑦𝑛 )
𝑘1 + 𝑘2
𝑦𝑛+1 = 𝑦𝑛 +
2
Ejemplo:
𝑦 ′ = 𝑒 −2𝑥 − 4𝑦
𝑘1 + 𝑘2
𝑦𝑛+1 = 𝑦𝑛 +
2
𝑘1 = ℎ 𝑓(𝑥𝑛 , 𝑦𝑛 )
𝑘2 = ℎ 𝑓(𝑥𝑛+1 , 𝑦𝑛 + 𝑘1)
−0.3−0.21296
𝑦1 = 1 + = 0.74352
2
284
Programación
Botón “Calcular”:
Botón “Graficar”:
Realiza una gráfica de la función con los puntos calculados sobre un eje
coordenado.
Botón “Reset”:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#include <math.h>
int k;
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
286
void __fastcall TForm1::Button2Click(TObject *Sender)
h=Edit1->Text.ToDouble();
X[0]=Edit2->Text.ToDouble();
for(k=1;k<=10;k++)
X[k]=X[k-1]+h;
k1=h*((exp(-2*X[k-1]))-(4*Y[k-1]));
k2=h*((exp(-2*X[k]))-(4*(Y[k-1]+k1)));
Y[k]=Y[k-1]+((k1+k2)/2);}
Edit4->Text=AnsiString(X[1]);
Edit5->Text=AnsiString(X[2]);
Edit6->Text=AnsiString(X[3]);
Edit7->Text=AnsiString(X[4]);
Edit8->Text=AnsiString(X[5]);
Edit9->Text=AnsiString(X[6]);
Edit10->Text=AnsiString(X[7]);
Edit11->Text=AnsiString(X[8]);
Edit12->Text=AnsiString(X[9]);
Edit13->Text=AnsiString(X[10]);
Edit14->Text=AnsiString(Y[1]);
Edit15->Text=AnsiString(Y[2]);
Edit16->Text=AnsiString(Y[3]);
Edit17->Text=AnsiString(Y[4]);
Edit18->Text=AnsiString(Y[5]);
Edit19->Text=AnsiString(Y[6]);
Edit20->Text=AnsiString(Y[7]);
Edit21->Text=AnsiString(Y[8]);
Edit22->Text=AnsiString(Y[9]);
287
Edit23->Text=AnsiString(Y[10]);
//---------------------------------------------------------------------------
Canvas->Pen->Color=clBlack;
Canvas->Pen->Width=3;
Canvas->PenPos=TPoint(272,112);
Canvas->PenPos=TPoint(256,382);
Canvas->LineTo(864,382);
Canvas->Pen->Width=2;
Canvas->PenPos=TPoint(268,116);
Canvas->LineTo(272,112);
Canvas->LineTo(276,116);
Canvas->PenPos=TPoint(860,378);
Canvas->LineTo(864,382);
Canvas->LineTo(860,386);
Canvas->Pen->Color=0x00C08080;
Canvas->Pen->Width=2;
Canvas->PenPos=TPoint(272+X[0]*150,382-(Y[0])*150);
for(k=1; k<=10;k++)
Canvas->LineTo(272+X[k]*150,382-(Y[k])*150);
//---------------------------------------------------------------------------
{
288
x=0;
y=0;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
Edit4->Text=""; ------------------Button(reset)
Edit5->Text="";
Edit6->Text="";
Edit7->Text="";
Edit8->Text="";
Edit9->Text="";
Edit10->Text="";
Edit11->Text="";
Edit12->Text="";
Edit13->Text="";
Edit14->Text="";
Edit15->Text="";
Edit16->Text="";
Edit17->Text="";
Edit18->Text="";
Edit19->Text="";
Edit20->Text="";
Edit21->Text="";
Edit22->Text="";
Edit23->Text="";
Edit1->SetFocus();
Form1->Visible=false;
Form1->Visible=true;
//---------------------------------------------------------------------------
289
15. Lógica Difusa
Este proyecto se podrá identificar las causas e inicio de la lógica difusa, junto
con las diferentes aplicaciones en la vida cotidiana, así mismo para su
compresión se desarrollo un programa relacionado con la aplicación de la
lógica difusa, con el fin de una mayor compresión y entendimiento del tema.
INTRODUCCIÓN
Desventajas:
No se aplica para modelos matemáticos eficientes de un problema.
Cuando los problemas sean de manera lineal.
Cuando un problema cuenta con un solución satisfactoria.
Ventajas:
Controla sistemas complejos.
Permite trabajar con información no exacta.
Define evaluaciones convencionales.
Permite la utilización de conocimientos ambiguos o imprecisos.
291
Control de sistemas: como el control del tráfico de las ciudades, control
de vehículos, control de compuertas en plantas hidroeléctricas, en
centrales térmicas, control de lavadoras, control de llegadas de metro,
ascensores, etc.
Predicción de terremotos y optimización de horarios.
Reconocimientos de patrones y visión del ordenador como
reconocimiento de objetos, vibraciones de cámaras, reconocimientos de
manuscritos, etc.
Sistemas de conocimiento o conocimiento como bases de datos entre
otros.
Conjuntos difusos
Los conjuntos difusos se encuentran asociados por un valor lingüístico que está
definido por una palabra, adjetivo o ética lingüística. Donde la función de
pertenecía puede tomar valores del intervalo de 0 y 1, y su transición de esta
es gradual y no cambia y no cambia de manera instantánea.
{ A = (x, pA(x)) | x Ε P }
Controlador Difuso
292
Por otro lado cabe recalcar que la lógica difusa se aplica en sistemas de
control difuso para formular reglas que controlen un sistema, es decir, que
tienen la capacidad de tomar decisiones sobre ciertas acciones que representa
su funcionamiento, para ello se basa de sencillos paso de ordenamiento como
se muestra a continuación:
Fusificación
Base de conocimientos
Inferencia
Defusificación
CONCLUSIÓN
293
En relación con la lógica clásica nos damos cuenta que existen muchas
inferencia entre la lógica difusa que son variables indispensables y de gran
importancia, así mismo denotamos que la lógica difusa son procedimientos
entre ellas no son de intuitivos sino que están estrechados por variables y
patrones de orden para su funcionamiento. De esta manera se recomienda
hacer uso de este procedimiento cuando tengamos términos indefinidos de
acciones que den un resultado, o cuando necesitemos condicionantes que
realizar una actividad para el cuidado de otro orden.
NUESTRAS PROGRAMACONES
1.1. INTERFAZ 1
294
Formulario 1
Paso 1: se insertó en el formulario 1, tres componentes image para cambiar
el fondo de la interfaz.
Paso 2: se insertar nueve componentes Label, esto para los datos como el
encabezado, el tema y los integrantes del equipo.
Paso 3: se insertó 2 componentes Button.
Se les cambio el nombre a los Button por: Entrar, Salir.
Formulario 2
Paso 4: se creó un nuevo formulario.
Paso 5: se insertó en el formulario 2, cinco componentes image
De los cinco componentes image, uno se utilizó para el fondo de la
interfaz, dos para las imágenes del barco y el nadador, y dos para
mostrar los valores de velocidad y distancia del barco.
Las dos imágenes que servirán para los valores de distancia y
velocidad se le cambian la configuración visible de true a false.
Paso 6: se insertó 11 componentes Label y se le asigno un nombre a cada
uno en la propiedad Caption:
295
Label 1: Velocidad del barco Label 7: S.
Label 2: “” Label 8: Metros
Label 3: Distancia del barco Label 9: “”
Label 4: “” Label 10: m/s
Label 5: Ancho del rio Label 11: “”
Label 6: “”
Paso 7: se insertaron 3 componentes Edit, y en la propiedad Text se borró
la palabra “Edit”
Paso 8: Se insertó un componente Shape y se le cambio el color a azul
celeste, este será nuestro rio por donde navegara nuestro barco.
Paso 9: Se insertó 1 componente timer
Paso 10: Se insertó 6 componentes Button, y en la propiedad Caption se
les cambio el nombre por:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
296
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
{
Entrar
Form2->Show();
//---------------------------------------------------------------------------
Salir
Close();
//---------------------------------------------------------------------------
297
Donde las funciones de los Button son únicamente para entrar a la siguiente
interfaz y para cerrar el programa.
1.1. INTERFAZ 2
Botón “km/h”
Botón “metros”
298
Código de programación.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
int k, l, y;
TForm2 *Form2;
//---------------------------------------------------------------------------
: TForm(Owner)
//---------------------------------------------------------------------------
vel=Edit1->Text.ToDouble();
Image1->Visible=True;
if(vel<=30){
Image1->Picture->LoadFromFile("lento.jpg");
Label2->Caption="Lenta";
299
}
if(vel>30&&vel<=60){ Km/h
Image1->Picture->LoadFromFile("medio.jpg");
Label2->Caption="Media";
if(vel>60){
Image1->Picture->LoadFromFile("rapido.jpg");
Label2->Caption="Rapida";
k=1;
if(k==1&&l==1){
Button4->Enabled=true;
Button1->Enabled=true;
//---------------------------------------------------------------------------
dis=Edit2->Text.ToDouble();
Image2->Visible=True;
if(dis<=15){
Image2->Picture->LoadFromFile("cerca.jpg");
Label4->Caption="Cercana";
300
if(dis>15&&dis<=50){
Label4->Caption="Medio cerca";
if(dis>50&&dis<=80){
Image2->Picture->LoadFromFile("lejos.jpg");
Label4->Caption="Lejana";
if(dis>80){
Image2->Picture->LoadFromFile("muy lejos.jpg");
Label4->Caption="muy Lejana";
l=1;
if(k==1&&l==1){
Button4->Enabled=true;
Button1->Enabled=true;
//---------------------------------------------------------------------------
tie=dis/(vel*1000/3600);
Label5->Visible=true;
Label8->Visible=true;
301
Edit3->Visible=true;
//---------------------------------------------------------------------------
Velocidad de paso
velpaso=Edit3->Text.ToDouble()/tie;
Label9->Caption=velpaso;
if(velpaso<=.5){
if(velpaso>.5&&velpaso<=1){
if(velpaso>1&&velpaso<=1.5){
if(velpaso>1.5&&velpaso<=2){
if(velpaso>2){
Timer1->Enabled=true;
//---------------------------------------------------------------------------
302
void __fastcall TForm2::Timer1Timer(TObject *Sender)
Timer1->Tag=Timer1->Tag+1;
if(Timer1->Tag>=tie*10)
Componente Timer
{
Timer1->Enabled=false;
Image3->Left=50+Timer1->Tag*(770/(10*tie));
if(velpaso>2){
else
Image4->Top=300+Timer1->Tag*(250/(10*tie));
//---------------------------------------------------------------------------
Image3->Left=50;
Reiniciar
Image4->Top=300;
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
k=0;
303
l=0;
Button4->Enabled=false;
Button1->Enabled=false;
Label2->Caption="";
Label4->Caption="";
Label6->Caption="";
Label9->Caption="";
Label11->Caption="";
Label5->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
Image1->Visible=false;
Image2->Visible=false;
Timer1->Tag=0;
//---------------------------------------------------------------------------
Regresar
Close();
//---------------------------------------------------------------------------
304
2.1. INTERFAZ 1
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
TForm1 *Form1;
//---------------------------------------------------------------------------
: TForm(Owner)
305
//---------------------------------------------------------------------------
{
Entrar
Form2->Show();
//---------------------------------------------------------------------------
Salir
Close();
//---------------------------------------------------------------------------
2.2. Interfaz 2
306
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
double vol,anc,pas, tie, cantpaso, alt;
int k, l, y;
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
307
vol=Edit1->Text.ToDouble();
if(vol<=1000)
{ M3
Label2->Caption="MINIMA";
}
if(vol>1000&&vol<=6000){
Label2->Caption="CONSIDERABLE";
}
if(vol>6000){
Label2->Caption="ABUNDANTE";
}
k=1;
if(k==1&&l==1){
Button4->Enabled=true;
Button1->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button3Click(TObject *Sender)
{
anc=Edit2->Text.ToDouble();
if(anc<=150){
Label4->Caption="PEQUEÑA";
}
if(anc>150&&anc<=500){
Label4->Caption="MEDIANA";
}
Anchura de la presa.
308
if(anc>500&&anc<=800){
Label4->Caption="GRANDE";
}
if(anc>800){
Label4->Caption="NI EN TUS SUEÑOS";
}
l=1;
if(k==1&&l==1){
Button4->Enabled=true;
Button1->Enabled=true;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button4Click(TObject *Sender)
{
Tiempo de paso
pas=vol/anc*10/3600;
Label6->Caption=tie;
Label6->Caption=AnsiString(pas);
Label5->Visible=true;
Label8->Visible=true;
Edit3->Visible=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
alt=Edit3->Text.ToDouble();
309
cantpaso=alt/pas;
Label9->Caption=AnsiString(cantpaso);
if(cantpaso<=100){
Label11->Caption="Flujo óptima de paso";
} Velocidad de paso
if(cantpaso>100&&cantpaso<=200){
Label11->Caption="Flujo controlado ";
}
if(cantpaso>200&&cantpaso<=350){
Label11->Caption=" Flujo moderado ";
}
if(cantpaso>350&&cantpaso<=600){
Label11->Caption="Flujo máximo ";
}
if(cantpaso>600){
Label11->Caption="Flujo excesivo descontrolado ";
}
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button5Click(TObject *Sender)
{
Edit1->Text="";
Edit2->Text="";
Edit3->Text="";
k=0;
l=0;
Button4->Enabled=false;
Button1->Enabled=false; Reset
310
Label2->Caption="";
Label4->Caption="";
Label6->Caption="";
Label9->Caption="";
Label11->Caption="";
Label5->Visible=false;
Label8->Visible=false;
Edit3->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button7Click(TObject *Sender)
{
Regresar
Close();
}
//----------------------------------------------------------------
311