Vous êtes sur la page 1sur 33

LENGUAJE C # C# (ledo en ingls "C Sharp" y en espaol "C Almohadilla") es el nuevo lenguaje de propsito general diseado por Microsoft

para su plataforma .NET. Aunque es posible escribir cdigo para la plataforma .NET en muchos otros lenguajes, C# es el nico que ha sido diseado especficamente para ser utilizado en ella, por lo que programarla usando C# es mucho ms sencillo e intuitivo que hacerlo con cualquiera de los otros lenguajes

DESXCRIPCION DE C #

Es homogneo. El tamao de los tipos de datos bsicos es fijo e independiente del compilador, sistema operativo o mquina en la que se compile (no ocurre lo que en C++), lo que facilita la portabilidad del cdigo. Es actual. C# incorpora en el propio lenguaje elementos que se han demostrado ser muy tiles para el desarrollo de aplicaciones como el tipo bsico decimal que representa valores decimales con 128 bits, lo que le hace adecuado para clculos financieros y monetarios

Emplea un sistema de tipos unificado . Todos los tipos de datos (incluidos los definidos por el usuario) siempre derivarn, aunque sea de manera implcita, de una clase base comn llamada System.Object,

Proporciona seguridad con los tipos de datos. C# no admiten ni funciones ni variables globales sino que todo el cdigo y datos han de definirse dentro de definiciones de tipos de datos, lo que reduce problemas por conflictos de nombres y facilita la legibilidad del cdigo.

Proporciona instrucciones seguras. En C# se han impuesto una serie de restricciones para usar las instrucciones de control ms comunes. Por ejemplo, toda condicin est controlada por una expresin condicional, los casos de una instruccin condicional mltiple (switch) han de terminar con una instruccin break o goto, etc.

Facilita la extensibilidad de los operadores . C# permite redefinir el significado de la mayora de los operadores -incluidos los de conversin, tanto para conversiones implcitas como explcitas- cuando se aplican a diferentes tipos de objetos.

Permite incorporar modificadores informativos sobre un tipo o sus miembros . C# ofrece, a travs del concepto de atributos, la posibilidad de aadir, a los metadatos del mdulo resultante de la compilacin de cualquier fuente, informacin sobre un tipo o sus miembros a la generada por el compilador que luego podr ser consultada en tiempo ejecucin a travs de la biblioteca de reflexin de .NET. Esto, que ms bien es una caracterstica propia de la plataforma .NET y no de C#, puede usarse como un mecanismo para definir nuevos modificadores.

Visual Studio 2005 Microsoft visual studio. Es un entorno de desarrollo integrado (ide, por sus siglas en ingls) para sistemas operativos windows. soporta varios lenguajes de programacin tales como visual c++, visual c#, visual j#, asp.net y visual basic .net, aunque actualmente se han desarrollado las extensiones necesarias para muchos otros. Visual studio permite a los desarrolladores crear aplicaciones, programas, sitios y aplicaciones web, as como servicios web en cualquier entorno que soporte la plataforma .net (a partir de la versin net 2002). as se pueden crear aplicaciones que se intercomuniquen entre estaciones de trabajo, pginas web y dispositivos mviles. Indicaciones: Instrucciones: Tipos de datos: DOUBLE: datos reales INT: datos enteros STRING: caracteres BOOL: valores lgicos (true, false) Console.WriteLine (TEXTO): escribe el texto en la consola en una sola lnea. Console.Write (TEXTO): hace lo mismo que la instruccin writeline aunque no escribe el terminador de lnea. Console.ReadLine ( ): lee desde consola (sirve para ingresar datos desde la consola). Tipo.Parse (CONSOLE.READLINE ( )): convierte lo escrito en consola en el tipo de variable especificado. Reconoce maysculas y minsculas Cada instruccin u orden se finaliza con ; Los bloques de ordenes se encierran entre llaves y no se escribe el ; despus de la llave de cierre

Declaracin de variables: Iniciacin de la variable Publicacin Operaciones: IF: solo se activa cuando la condicin es cierta

OB : si se desea ejecutar mas de una instruccin se encierra en bloque delimitado por llaves MTODO DE BISECCIN

Es un mtodo de interseccin funcional basado en el Teorema del Valor Intermedio El mtodo de la biseccin o corte binario es un mtodo de bsqueda incremental que divide el intervalo siempre en dos. Conocido debido a que halla la raz de una manera segura. Consiste en buscar un intervalo donde la funcin a analizar cambia de signo. Por lo tanto, la localizacin del cambio de signo se logra con ms exactitud al dividir el intervalo en una cantidad definida de subintervalo. Se rastrea cada uno de estos subintervalo para encontrar el cambio de signo. El proceso se repite y la aproximacin a la raz mejora cada vez ms a medida que los subintervalo se dividen en espacios ms pequeos.

Descripcin Verificamos la existencia de la raz en el intervalo de bsqueda <a1,b1>.Si f(a1) y f(b1) tienen signos opuestos entonces existe la raz. Encontramos nuestra aproximacin de esta manera P1=a1+b1 2 Desechamos el intervalo que no contiene a la raz y definimos nuestro nuevo intervalo de bsqueda de la siguiente forma: -Si f(a) y f(b) tiene signos iguales el intervalo que contiene a la raz es [p1,b1] : a2=p1 ; b2=b1 -En caso contrario: a2= a1 ; b2=p1 Variables Las variables con la que el programa trabajara son: a: Indica el primer parmetro de la ecuacin. b : Indica el segundo parmetro de la ecuacin. p: Indica el valor de la iteracin.

EJEMPLO 1

n : Indica el nmero de iteraciones realizadas.

En la funcin x2+5x-3, calcular la raz con una tolerancia de10-3, en el intervalo [2,5]. SOLUCION: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication2 { class Program { static double f(double x) { double valor = x*x+5*x-3; return valor; } static void Main(string[] args) { //definir variable double a, b, tol, pi, error; int n0, i; // inicializar variables a = 2; b = 5; tol = 0.0001; i = 1; n0 = 100; while (i <= n0) { // hacer los calculos pi = (a + b) / 2; error = (b - a) / 2; if (f(pi) == 0 || error <= tol) { // publicar la raiz Console.WriteLine("la raiz es {0}", pi); break; } else if (f(a) * f(pi) > 0) // redefinir a a = pi; else // redefinir b b = pi; i = i + 1; } if (i > n0) Console.WriteLine("el metodo fracaso despues de {0} interaciones ", n0); } }

} MTODO DE FALSA POSICIN O DE CUERDAS Este mtodo, como en el mtodo de la biseccin, parte de dos puntos que rodean a la raz f(x)=0, es decir, dos puntos a y b tales que f(a) ; f(b) < 0. La siguiente aproximacin se calcula como la interseccin con el eje x de la recta que une ambos puntos. En clculo numrico, el mtodo de regla falsa o falsa posicin es un mtodo iterativo de resolucin numrica de ecuaciones no lineales. El mtodo combina el mtodo de biseccin y el mtodo de la secante.

Descripcin Analizamos si hay un cambio de signo en el intervalo dado [a1,b1]en cuyo caso exista raz. Consideramos la cuerda que une los puntos (a1,f(a1)),(b1,f(b1)) y calculo la aproximacin con: P1=b1-f(b1)(b1-a1) f(b1)-f(a1) Se busca un nuevo intervalo, analizando el cambio de signo. Si f(a1) y f(p1) tienen el mismo signo entonces el nuevo intervalo es [p2,b1]: a2=p1 b2=b1

Caso contrario el intervalo es [a1,p1] en este caso :a2=a1 ; b2=p1 Volvemos al paso 1 ahora nuevo con nuestro intervalo de bsqueda. Variables Las variables con la que el programa trabajara son: a : Indica el primer parmetro de la ecuacin. b : Indica el segundo parmetro de la ecuacin. p : Indica el valor de la iteracin.

EJEMPLO 1:

n : Indica el nmero de iteraciones realizadas.

En la funcin x3+2x2-10, calcular la raz con una tolerancia de 10-2, en el intervalo [1,2]. SOLUCIN using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double f(double x) { double valor = x * x * x + 2 * x * x - 10; return valor; } static void Main(string[] args) { //definir variable double a, b, tol, pi, error, c; int n0, i; // inicializar variables a = 1; b = 2; c = 0; tol = 0.001; i = 1; n0 = 100; while (i <= n0) { // hacer los calculos pi = b - f(b) * (b - a) / (f(b) - f(a)); error = Math.Abs((pi - c) / pi); Console.WriteLine("i={0},p={1},error{2}", i, pi, error); if (f(pi) == 0 || error <= tol) { // publicar la raiz Console.WriteLine("la raiz es {0}", pi); break; } else if (f(a) * f(pi) > 0) { // redefinir a a = pi; c = pi; } else // redefinir b { b = pi; c = pi; } i = i + 1;

} if (i > n0) Console.WriteLine("el metodo fracaso despues de {0} interaciones ", n0); MTODO DE NEWTON En anlisis numrico, el mtodo de Newton (conocido tambin como el mtodo de Newton-Raphson o el mtodo de Newton-Fourier). Es un algoritmo eficiente para encontrar aproximaciones de los ceros o races de una funcin real. Tambin puede ser usado para encontrar el mximo o mnimo de una funcin, encontrando los ceros de su primera derivada. Supngase f:[a,b]R funcin derivable definida en el intervalo real [a,b]. Empezamos con un valor inicial p0 y definimos para cada nmero natural n. pn = pn-1 f(pn-1 ) f( pn-1 ) Donde f(x) denota la derivada de f.

Algoritmo 1.- Buscamos un intervalo donde hay cambio de signo. Tomamos una aproximacin inicial p0( cercana a la raz). 2.- consideramos la recta tangente a la curva (p0;f(p0)). 3.- Intersectamos la recta tangente con el eje x y la primera aproximacin es p1. pn = pn-1 f(pn-1 ) f( pn-1 ) 4.- La nueva aproximacin es p1 y volvemos al paso 2. Variables. Las variables con la que el programa trabajara son: pn-1 : Indica el primer valor de la ecuacin. pn: Indica el valor de la iteracin. n : Indica el nmero de iteraciones realizadas.

EJEMPLO I En la funcin x3- 3x2+2x+3 , calcular la raz con una tolerancia de 10-2. Solucin using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double f(double x) { double valor = x*x*x - 3*x*x+2*x+3 ; return valor; } static double derivada(double x) { double valor = 3 * x * x - 4 * x; return valor; } static void Main(string[] args) { //definir variable double tol, p0, error, p; int n0, i; // inicializar variables p0 = 2.5; tol = 0.01; i = 1; n0 = 100; while (i <= n0) { // hacer los calculos p = p0 - f(p0) / derivada(p0); error = Math.Abs(p - p0); Console.WriteLine("i={0},p={1},error{2}", i, p, error); if (error <= tol) { // publicar la raiz Console.WriteLine("la raiz es {0}", p); break; } else { //redefinir la aproximacion p0 = p; i = i + 1; } } if (i > n0) Console.WriteLine("el metodo fracaso despues de {0} interaciones ", n0); Console.ReadLine();

} } } MTODO DE LA SECANTE

Descripcin Encontramos el intervalo de bsqueda Tomamos dos aproximaciones inciales a la raz P0 y P1. Evaluamos la funcin en esas aproximaciones f(P0) y f(P1) luego trazamos la recta secante a la curva en los puntos (P0,f(P0)) y (P1,f(P1)).

Encontramos la nueva aproximacin de la raz intersectando la recta secante con el eje X.

Ahora las nuevas aproximaciones a considerar son P2 y P1 (dos consecutivas) Regresamos al paso 2. Variables Las variables con la que el programa trabajara son: : Indica el primer valor de la ecuacin.

: Indica el segundo valor de la ecuacin. : Indica el valor de la iteracin.

Ejemplo con ingreso de datos: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double f(double x) { double valor = Math.Cos(x)-x ; return valor; } static void Main(string[] args) { // variable double tol, p0, p1, error, p, q0, q1; int n0, i; // inicializar variables Console.WriteLine("1er numero"); p0 = double.Parse(Console.ReadLine()); Console.WriteLine("2do numero"); p1 = double.Parse(Console.ReadLine()); Console.WriteLine("ingrese tolerancia"); tol = double.Parse(Console.ReadLine()); q0 = f(p0); q1 = f(p1); i = 2; n0 = 100; while (i <= n0) { //calculos p = p1 - q1 * (p1 - p0) / (q1 - q0); error = Math.Abs(p - p0)/p; if (error <= tol) { // raiz Console.WriteLine("la raiz es {0}", p); break; } else { //redefinir la aproximacion i = i + 1; p0 = p1; q0 = q1; p1 = p; q1 = f(p); } } if (i > n0) Console.WriteLine("el metodo fracaso despues de {0} interaciones ", n0); Console.ReadLine();

} } } MTODO DE PUNTO FIJO Es un mtodo numrico usado para de la raz de una funcin. Este mtodo aunque no es el ms sencillo, ni el ms rpido, es til ya que es la base de los dems mtodos. El mtodo del punto fijo se basa en que una raz de la ecuacin f(x)=0 ser un punto fijo de la ecuacin siempre que o . Podemos construir una sucesin que tienda al punto fijo de la ecuacin , o lo que es lo mismo a la solucin de la ecuacin . Para ello consideramos la sucesin:

Bsicamente se da un valor y este se evala en una funcin previamente calculada (llamada tambin funcin equivalente). Despus en base al resultado obtenido se busca el error mediante

Si esto se cumple se encontr la raz si no, se evala el nuevo valor en la funcin equivalente as hasta llegar al error. Descripcin Dada una funcin f(x) se localiza su equivalente. Despus se asigna un valor inicial que es x0. Reemplazar todos los valores en la formula. Se asigna un valor de error

. Donde es el punto medio de la iteracin actual y es el punto medio de la iteracin anterior. Al cumplirse la condicin, la raz o solucin es el ltimo punto medio que se obtuvo. Variables Las variables con la que el programa trabajara son: : Indica el primer valor de la ecuacin. : Indica el valor de la iteracin. : Indica el nmero de iteraciones realizadas.

EJEMPLO 1: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double g(double x) {//variable double valor = 10 / (x + 2); return valor; } static void Main(string[] args) { //definir variable double tol, p0, error, p; int n0, i; //ingresamos desde consola Console.WriteLine("p0"); p0 = double.Parse(Console.ReadLine()); Console.WriteLine("tolerancia"); tol = double.Parse(Console.ReadLine()); // inicializar variables i = 1; n0 = 100; //aplicamos la condicion mientras while (i <= n0) { // hacer los calculos p = g(p0); error = Math.Abs(p - p0); //condicion para la tolerancia Console.WriteLine("i={0},p={1},error{2}", i, p, error); if (error <= tol) { // publicar la raiz Console.WriteLine("la raiz es {0}", p); //cerramos la condicion break; } else { //redefinir la aproximacion p0 = p; i = i + 1; } } if (i > n0) Console.WriteLine("el metodo fracaso despues de {0} interaciones ", n0); Console.ReadLine(); } }

METODO DEL POLINOMIO INTERPOLANTE DE LAGRANGE

FUNCIONES DE INTERPOLACIN Hay una extensa familia de mtodos que se basan en aproximar la funcin a integrar f(x) por otro funcin g(x) de la cual se conoce la integral exacta. La funcin que sustituye la original se encuentra de forma que en un cierto nmero de puntos tenga el mismo valor que la original.

FRMULAS DE NEWTON-COTES La interpolacin con polinomios evaluada en puntos igualmente separados en da las frmulas de Newton-Cotes, de

las que la regla del rectngulo, la del trapecio y la de Simpson son ejemplos. Si se escogen los nodos hasta k = n + 1 ser la frmula de Newton-Cotes cerrada y si se escogen k = n 1 ser la frmula de Newton-Cotes abierta. Regla Del Punto Medio Si en el mtodo anterior la funcin pasa a travs del punto este mtodo se llama la regla del punto medio:

Regla Del Rectngulo El mtodo ms simple de este tipo es hacer a la funcin interpoladora ser una funcin constante (un polinomio de orden cero) que pasa a travs del punto (a,f(a)). Este mtodo se llama la regla del rectngulo:

Regla De Simpson La funcin interpoladora puede ser un polinomio de grado 2 que pasa a travs de los puntos mtodo se llama regla de Simpson: , y . Este

Regla Del Trapecio La funcin interpoladora puede ser una funcin afn (un polinomio de grado 1 o sea una recta) que pasa a travs de los puntos y . Este mtodo se llama regla del trapecio:

Reglas Compuestas Para cualquier regla interpoladora, se puede hacer una aproximacin ms precisa dividiendo el intervalo nmero en algn

de subintervalos, hallando una aproximacin para cada subintervalo, y finalmente sumando todos los

resultados. Las reglas que surgen de hacer esto se llaman reglas compuestas, y se caracterizan por perder un orden de precisin global frente a las correspondientes simples, si bien globalmente dan valores ms precisos de la integral, a costa eso s de incrementar significativamente el coste operativo del mtodo. Por ejemplo, la regla del trapecio compuesta puede expresarse como:

Ejemplo 1
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication13 { class Program { static void Main(string[] args) { int i, j, n, longitud, longitud1; double L; double[] x; double[] fx; double valor; double fvalor; Console.WriteLine("ingrese longitud"); longitud = int.Parse(Console.ReadLine()); x = new double[longitud]; for (i = 0; i < longitud; i++) { Console.WriteLine("ingrese el nodo{0}", i); x[i] = double.Parse(Console.ReadLine()); } Console.ReadLine(); Console.WriteLine("ingrese longitud"); longitud1 = int.Parse(Console.ReadLine()); fx = new double[longitud1]; for (i = 0; i < longitud1; i++) { Console.WriteLine("ingrese valor en funcion", i); fx[i] = double.Parse(Console.ReadLine()); } Console.ReadLine(); Console.WriteLine("ingrese valor de x"); valor = double.Parse(Console.ReadLine()); fvalor = 0; i = 0; n = 3; while (i <= n - 1) { L = 1; j = 0; while (j <= n - 1) { if (i != j) { L = L * (valor - x[j]) / (x[i] - x[j]); } j = j + 1; } fvalor = fvalor + L * fx[i];

i = i + 1; } Console.WriteLine("El resultado es:{0}", fvalor); } }

METODO DE INTERPOLACION DE NEWTON Diferencias Divididas POLINOMIO DE INTERPOLACIN DE LAGRANGE Es una reformulacin del polinomio de Newton, este polinomio de interpolacin evita el clculo de las diferencias divididas y vine dado por:

Usando tringulos semejantes, se tiene:

que se puede reordenar como :

La cual es una formula de interpolacin lineal. La notacin f 1(X) indica que se trata de un polinomio de interpolacin de primer orden. Ntese que adems de representar la pendiente de la linera que conecta los dos puntos, el termino

Es una aproximacin de diferencias divididas finitas a la primera derivada. En general, entre ms pequeo sea el intervalo entre dos puntos, ms exacta ser la aproximacin FORMA GENERAL: Este es el nico polinomio de n-esimo orden que pasa exactamente por los n + 1 puntos. Si tenemos n=1 2 puntos Descripcin Enunciado Terico: f1 (x) = x - x1 f (x0) + x - x0 f (x1)

x0 - x1 x1 - x0 l0 (x) = x - x1 l1 (x) = x - x0 x0 - x1 x1 - x0 EJEMPLO 1: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double g(double x) { int n=5,m,j; double[] x={0,0.2,0.4,0.6,0.8}; double[] fx={1,1.22140,1.49182,1.49182,1.82212,2.22554}; double[,]T; T=new double[] m =n-1; i=0; while(i<=m-1); { T(i,0)=(f(x(i+1))-f(x(i)))/((x(i+1))-(x(i))); i=i+1; } j=1; while(i<=m-1); { T(i,j)=(T(i,j-1)-T(i-j,j-1))/(x(i+1)-x(j-1)); i=i+1; } } j= j+1; Console.ReadLine(); } }

INTEGRACION NUMERICA: METODO DEL TRAPECIO Lo importante es recordar la formacin de un trapecio como figura geomtrica.

Eligiendo un espaciado, cualquiera, para nuestro caso:

se divide el intervalo [a, b] por medio de puntos igualmente espaciados

tenemos que, las ordenadas de dichos puntos son

En cada intervalo (x i , x i+1 ) se sustituye la funcin f(x) por la recta que une los puntos (x i , y i ) y (x i+1 , y i+1 ) tal como se aprecia en la figura. El el rea total aproximada es la suma de las reas de los n pequeos trapecios de anchura h

o bien, agrupando trminos

EJEMPLO 1 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double f(double x) { double I = Math.Sin(x); return I; } static void Main(string[] args) { int i; double a, b, h, I, n; Console.WriteLine("ingrese 1 intervalo"); a = double.Parse(Console.ReadLine()); Console.WriteLine("ingrese 2 intervalo"); b = double.Parse(Console.ReadLine()); Console.WriteLine("ingrese n"); n = double.Parse(Console.ReadLine());

h = (b - a) / n; I = (f(a) + f(b)) / 2; for (i = 1; i <= n - 1; i++)

I = I + f(a + i * h); I = I * h; Console.WriteLine("el valor de la funcion es:{0}", I); Console.ReadLine();

} } }

METODO DE SIMPSON SIMPLE Y COMPUESTO Clculo de reas: Uno de los problemas matemticos ms frecuentes es el clculo del rea que se forma al graficar una funcin. Por ejemplo, se necesita calcular el rea A que aparece en la siguiente figura:

en donde la funcin f(x) y los valores a y b son conocidos. En este tipo de problemas se pueden obtener dos tipos de soluciones:

Soluciones algebraicas: se obtiene una frmula precisa y exacta para el rea solicitada. Soluciones numricas: se calcula numricamente una estimacin del rea.

EL MTODO DE SIMPSON. En este procedimiento, se toma el intervalo de anchura 2h, comprendido entre xi y xi+2, y se sustituye la funcin f(x)por la parbola que pasa por tres puntos (xi, yi), (xi+1, yi+1), y (xi+2, yi+2). El valor del rea aproximada, sombreada en la figura, se calcula con un poco ms de trabajo y el resultado es

El mtodo de Simpson deber ser mucho ms exacto que el procedimiento del trapecio. El rea aproximada en el intervalo [a, b] es

El primer parntesis, contiene la suma de los extremos, el segundo, la suma de los trminos de ndice impar, y el tercero la suma de los trminos de ndice par. En el mtodo de Simpson, el nmero de divisiones n debe de ser par. En el caso de que el usuario introduzca un nmero impar el programa lo convierte en el nmero par siguiente.

REGLA DE SIMPSON COMPUESTA En el caso de que el intervalo [a,b] no sea lo suficientemente pequeo, el error al calcular la integral puede ser muy grande. Para ello, se recurre a la frmula compuesta de Simpson. Dividiremos el intervalo [a,b] en n subintervalos iguales, de manera que xi = a + ih, donde h = (b a) / n para i = 0,1,...,n. Sumando las integrales de todos los subintervalos, llegamos a que:

El mximo error viene dado por la expresin

Version simplificada:

Donde E son los extremos I son la funcion evaluada en los intervalos impares y P la funcion evaluada en los intervalos pares. Con n mayor que 2 y par. )

EJEMPLO 1: using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static double f(double x) { double I = Math.Sin(x); return I; } static void Main(string[] args) { int i; double a, b, h, n, xI0, xI1, xI2, x, xI; Console.WriteLine("ingrese 1 intervalo"); a = double.Parse(Console.ReadLine()); Console.WriteLine("ingrese 2 intervalo"); b = double.Parse(Console.ReadLine()); Console.WriteLine("ingrese n"); n = double.Parse(Console.ReadLine()); h = (b - a) / (2 * n); xI0 =(f(a) + f(b)); xI1 =0; xI2 =0; for (i = 1; i <= 2*n - 1; i++) { x = a + i * h; if (i % 2 == 0) xI2 = xI2 + f(x); else xI1 = xI1 + f(x); } xI = (h * (xI0 + 2*xI2 + 4*xI1) )/ 3; Console.WriteLine("el valor de la funcion es:{0}", xI); Console.ReadLine(); } } }

METODO DE ALGORITMOS MULTIDIMENSIONALES Un arreglo unidimensional es un tipo de datos estructurado que est formado de una coleccin finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un ndice para cada elemento del arreglo que nos da su posicin relativa. Para implementar arreglos unidimensionales se debe reservar espacio en memoria, y se debe proporcionar la direccin base del arreglo, la cota superior y la inferior.

MATRICES
Una matriz es una tabla ordenada de escalares aij de la forma

La matriz anterior se denota tambin por (aij), i =1, ..., m, j =1, ..., n, o simplemente por (aij). Los trminos horizontales son las filas de la matriz y los verticales son sus columnas. Una matriz con m filas y n columnas se denomina matriz m por n, o matriz m n. Las matrices se denotarn usualmente por letras maysculas, A, B, ..., y los elementos de las mismas por minsculas, a, b, ... Ejemplo:

donde sus filas son (1, -3, 4) y (0, 5, -2) y sus

SUMA Y RESTA DE MATRICES Para poder sumar o restar matrices, stas deben tener el mismo nmero de filas y de columnas. Es decir, si una matriz es de orden 3 2 y otra de 3 3, no se pueden sumar ni restar. Esto es as ya que, tanto para la suma como para la resta, se suman o se restan los trminos que ocupan el mismo lugar en las matrices. Ejemplo:

Para sumar o restar ms de dos matrices se procede igual. No necesariamente para poder sumar o restar matrices, stas tienen que ser cuadradas. Ejemplo:

PRODUCTO DE MATRICES Para poder multiplicar dos matrices, la primera debe tener el mismo nmero de columnas que filas la segunda. La matriz resultante del producto quedar con el mismo nmero de filas de la primera y con el mismo nmero de columnas de la segunda. Es decir, si tenemos una matriz 2 3 y la multiplicamos por otra de orden 3 5, la matriz resultante ser de orden 2 5. (2 3) (3 5) = (2 5) Se puede observar que el producto de matrices no cumple la propiedad conmutativa, ya que en el ejemplo anterior, si multiplicamos la segunda por la primera, no podramos efectuar la operacin. 3 5 por 2 3, puesto que la primera matriz no tiene el mismo nmero de columnas que filas la segunda.

Supongamos que A = (ai j ) y B = (bi j ) son matrices tales que el nmero de columnas de A coincide con el nmero de filas de B; es decir, A es una matriz m p y B una matriz p n. Entonces el producto AB es la matriz m n cuya entrada ij se obtiene multiplicando la fila i de A por la columna j de B. Esto es,

Ejemplo: 1.

2.

Producto por un escalar El producto de un escalar k por la matriz A, escrito kA o simplemente kA, es la matriz obtenida multiplicando cada entrada de A por k:

Ejemplo:

Entonces:

EJEMPLO 1
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i, longitud, nn; double[] numeros; double[] b; double[] suma; Console.WriteLine("ingrese la longitud del vector a"); longitud = int.Parse(Console.ReadLine()); numeros = new double[longitud]; suma = new double[longitud]; for (i = 0; i < longitud; i++) { Console.WriteLine("ingrese la entrada{0}", i); numeros[i] = double.Parse(Console.ReadLine()); } for (i = 0; i < longitud; i++) Console.Write("{0} ", numeros[i]); Console.ReadLine(); Console.WriteLine("ingrese la longitud del vector b"); nn = int.Parse(Console.ReadLine()); b = new double[nn]; for (i = 0; i < nn; i++) { Console.WriteLine("ingrese la entrada{0}", i); b[i] = double.Parse(Console.ReadLine()); } for (i = 0; i < nn; i++) Console.Write("{0} ", b[i]); Console.WriteLine(); Console.WriteLine("el vector suma es"); for (i = 0; i < nn; i++) { suma[i] = numeros[i] + b[i]; Console.Write("{0} ", suma[i]); } Console.ReadLine(); } } }

EJEMPLO 2
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i, longitud, nn; double[] numeros; double[] b; double[] suma; Console.WriteLine("ingrese la longitud del vector a"); longitud = int.Parse(Console.ReadLine()); numeros = new double[longitud]; suma = new double[longitud]; for (i = 0; i < longitud; i++) { Console.WriteLine("ingrese la entrada{0}", i); numeros[i] = double.Parse(Console.ReadLine()); } for (i = 0; i < longitud; i++) Console.Write("{0} ", numeros[i]); Console.ReadLine(); Console.WriteLine("ingrese la longitud del vector b"); nn = int.Parse(Console.ReadLine()); b = new double[nn]; for (i = 0; i < nn; i++) { Console.WriteLine("ingrese la entrada{0}", i); b[i] = double.Parse(Console.ReadLine()); } for (i = 0; i < nn; i++) Console.Write("{0} ", b[i]); Console.WriteLine(); Console.WriteLine("el vector suma es"); for (i = 0; i < nn; i++) { suma[i] = numeros[i] * b[i]; Console.Write("{0} ", suma[i]); } Console.ReadLine(); } } }

METODO DE LA MATRIZ: SUMA Y MULTIPLICACION EJEMPLO 1: SUMA


using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i,j,n,m; double[,] matriz; double[,] matriz1; double[,] suma; Console.WriteLine("ingrese la dimension de la matriz"); Console.WriteLine("ingrese el numero de filas"); n = int.Parse(Console.ReadLine()); Console.WriteLine("ingrese el numero de columna"); m = int.Parse(Console.ReadLine()); matriz = new double[n, m]; matriz1 = new double[n, m]; // // for (i = 0; i < n; i++) for (i = 0; i < n; i++) { Console.WriteLine("ingrese la fila {0}", i); for (j = 0; j < m; j++) { matriz[i, j] = double.Parse(Console.ReadLine()); } } for (i = 0; i < n; i++) { Console.WriteLine("ingrese la fila {0}", i); for (j = 0; j < m; j++) { matriz1[i, j] = double.Parse(Console.ReadLine()); } } suma = new double[n, m]; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) { suma [i,j] = matriz[i, j] + matriz1[i, j]; Console.Write("{0} ",suma[i,j]); } Console.WriteLine(); } } }

EJEMPLO 2:PRODUCTO
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int i,j,n1,n2,m1,m2,producto; double[,] matriz; double[,] matriz1; double[,] multiplicacion; Console.WriteLine("ingrese la primera matriz"); Console.WriteLine("ingrese la dimension de la primera matriz"); Console.WriteLine("ingrese el numero de filas"); n1 = int.Parse(Console.ReadLine()); Console.WriteLine("ingrese el numero de columna"); m1 = int.Parse(Console.ReadLine()); Console.WriteLine("ingrese la segunda matriz"); Console.WriteLine("ingrese la dimension de la segunda matriz"); Console.WriteLine("ingrese el numero de filas"); n2 = int.Parse(Console.ReadLine()); Console.WriteLine("ingrese el numero de columna"); m2 = int.Parse(Console.ReadLine()); if (m1!=n2) Console.WriteLine("nose puede multiplicar"); while matriz = new double[n1, m1]; matriz1 = new double[n2, m2]; producto = new double[n1, m2]; // // for (i = 0; i < n; i++) for (i = 0; i < n1; i++) {

Console.WriteLine("ingrese la fila {0}", i); for (j = 0; j < n2; j++) { matriz[i, j] = double.Parse(Console.ReadLine()); } } for (i = 0; i < n1; i++) { Console.WriteLine("ingrese la fila {0}", i); for (j = 0; j < n2; j++) { matriz1[i, j] = double.Parse(Console.ReadLine()); } } multiplicacion = new double[n1, m1]; for (i = 0; i < n1; i++) { for (j = 0; j < m1; j++) { multiplicacion [i,j] = matriz[i, j] * matriz1[i, j]; Console.Write("{0} ",multiplicacion[i,j]); } Console.WriteLine(); } } } }

EJEMPLO 3: MATRIZ DESDE CONSOLA class Program { static double g(double [,]) { nombre= new double [n,m]; //declaracion de la variable double[,] nombre ={{1,1,3},{5,7,4}}; double[,] nombre= new double[2,3]{{1,2,3},{5,7,4}}; } static void Main(string[] args) { double[,] matriz ={ { 1, 1, 3 }, { 5, 7, 4 } }; int i, j,n,m; // i filas j columnas Console.WriteLine("n"); n = int.Parse(Console.ReadLine()); Console.WriteLine(); Console.WriteLine("m"); m = int.Parse(Console.ReadLine()); Console.WriteLine(); for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) { Console.Write("{0}", matriz[i, j]); Console.Write("{0}", matriz[n, m]); } Console.WriteLine(""); } Console.ReadLine(); } } }

METODO DE FACTORIZACION LU DE UNA MATRIZ En este mtodo se descompone la matriz A en dos matrices L (low) y U (up). A = LU La factorizacin es til para la resolucin de sistemas de ecuaciones. Sea el sistema de ecuaciones representado por AX = C. Sustituyendo A por LU, nos queda LUX = C. Calculando el producto UX = Y, y sustituyendo en LUX = C nos queda LY = C. De aqu podemos calcular el valor de Y y entonces sustituyndolo en UX = Y podemos calcular X. Toda matriz cuadrada, cuyos menores principales son todos no nulos, puede descomponerse en la forma A = LU. METODO DE FACTORIZACIN DE CHOLESKY Una matriz A es simtrica si At=A. Decimos que A es positiva definida si xtAx>0 para todo x0. Se puede demostrar que una matriz simtrica es positiva definida si y solo si todos sus valores propios son positivos. Tambin se puede demostrar que existe una matriz triangular inferior L tal que A = L Lt lo cual se conoce como la factorizacin de Cholesky de A. De hecho las entradas de L=(lij) de pueden calcular mediante las frmulas: 1. Para i=1,2,,n

a. b. Para j=1,2,,i-

a. Estas frmulas se obtienen multiplicando las filas de L por las columnas de Lt e igualando a las entradas correspondientes de A. Un conteo operacional de estas frmulas muestra que el total de operaciones es aproximadamente (1/6)n3, i.e., la mitad que en eliminacin Gaussiana bsico.

Vous aimerez peut-être aussi