Foros del Web » Programación para mayores de 30 ;) » .NET »

Problema Matemático

Estas en el tema de Problema Matemático en el foro de .NET en Foros del Web. Muy buenas a todos, tengo un problema mátematico que desde hace dias no me deja dormir y me hubiera gustado resolverlo por mi cuenta pero ...
  #1 (permalink)  
Antiguo 08/03/2011, 19:58
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Información Problema Matemático

Muy buenas a todos,

tengo un problema mátematico que desde hace dias no me deja dormir y me hubiera gustado resolverlo por mi cuenta pero ya no aguanto más.

El problema en sí se basa en las matemáticas basicas (con poco de algebra) y trata de lo siguiente:

He diseñador una pequeña aplicacion en vb.net para que el usuario introduca dos datos; "el capital" y "la cotizacion". A cambio el programa al pulsar un boton le devuelve 4 valores: "Renta Diaria", "Renta Mensual", "Inversion Minima" y una lista de "Secuencias". A continuación voy a explicar a lo que se refiere cada una de ellas con un ejemplo.

20 x 3 = 60 (+40)
50 x 3 = 150 (+80)
95 x 3---► (Cotizacion) = 285 (+120)
----
165 ---►Capital

Vamos por partes, lo primero, uno de los valores que introduce el usuario es "el capital" que en este ejemplo seria 165, el otro valor que se le pide es "la cotizacion", si miramos el ejemplo de nuevo es el "3".

Lo segundo, el ejemplo que he expuesto no es más que una secuencia de multiplicaciones en tabla, es decir, la primera multiplicacion es un valor(20) que se multiplica por la "cotizacion" (3) del cual se obtiene el resultado logico de (60), y del cual si restamos la el multiplicando(20) nos queda un "beneficio" de (40), el cual es el que hay que mantener de referencia más adelante en la siguiente multiplicacion (lo entendereis ahora que expongo la segunda operacion).

La siguiente "secuencia" es la multiplicacion del valor (50) por "la cotizacion" que como resultado se obtiene (150) y del cual si restamos el valor multiplicado (50) y el valor multiplicado de la operacion anterior (20) obtenemos el "beneficio" de (80), que es equivalente al beneficio de la primera operacion multiplicado por 2 (y os preguntareis porque 2, es porque es la "segunda" operacion, si fuera la tercera pues por 3, etc)

Y por ultimo la ultima operacion que multiplica (95) por "la cotizacion" que como reusltado da (285), de la cual si volvemos a restar el valor multiplicado (95) y los primeros valores multiplicados de las operaciones anteriores (20 y 50), nos queda un "beneficio" de (120, que es equivalente al "beneficio" de la primera operacion multplicado por 3, al ser la tercera operacion). Como resultado de la suma de todos los valores multiplicados (20 + 50 + 95) obtenemos "el capital" (165)


Pues bien, despues de explicar este ladrillo de operacion, lo que intento con mi programita es que el usuario proporcionando "el capital" y "la cotizacion" pueda obtener el resto de los datos que serian; el "primer" valor a multiplicar (20) y el "primer" beneficio (40).

Lo he intentado a traves de un sistema de ecuaciones pero soy pesimo con las matematicas y no me esta saliendo, quiero remarcar que esto no es ninguna tarea del colegio sino un pequeño programita personal y espero que algun alma caritativa me pueda ayudar para desarrollar la ecuacion que resuelve este paradigma y yo asi pueda implementarla en una funcion para usarla con este programita

Un saludo a todos y que felices carnavales.
  #2 (permalink)  
Antiguo 09/03/2011, 09:34
 
Fecha de Ingreso: febrero-2010
Ubicación: México
Mensajes: 738
Antigüedad: 15 años
Puntos: 37
Respuesta: Problema Matemático

Hola Microhack

Vamos por partes habe si entendi bien:

Los valores de 20, 50 y 95 son valores que introduces como capital?

Saludos!
__________________
http://ka0stj.wordpress.com/
  #3 (permalink)  
Antiguo 09/03/2011, 10:00
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Cita:
Iniciado por Ka0stj Ver Mensaje
Hola Microhack

Vamos por partes habe si entendi bien:

Los valores de 20, 50 y 95 son valores que introduces como capital?

Saludos!
No. El capital que introduce el usuario seria 165 y en base a ello el programa devuelve en el listbox llamado "Secuencias"

20 x 3 = 60
50 x3 = 150
95 x 3 = 285

20 seria el valor que iria en la textbox de "Inversion Minima", el cual representaria "X" en la ecuacion matemática. Esta es la interfaz que he diseñado:

  #4 (permalink)  
Antiguo 11/03/2011, 19:20
 
Fecha de Ingreso: marzo-2011
Mensajes: 2
Antigüedad: 13 años, 11 meses
Puntos: 1
Respuesta: Problema Matemático

Hola MicroHack.

Creo haber entendido tu problema, entonces basado en tu ejemplo tampoco sabes los valores 20,50 y 95
Voy a usar tu ejemplo para explicar la solución.


Una cosa que quiero corregir para ahorrar razonamiento antes de empezar es que en cada caso (20x3) , (50x3), (95x3) lo que haces inmediatamente después de multiplicar es restar el mismo número, por tanto, todo se reduce a (20x2), (50x2) y (95x2)

Al los valores 20 , 50 y 95 que queremos averiguar le voy a llamar X , Y , Z respectivamente.

Una fórmula sería entonces:


CAPITAL= X + Y + Z


1er secuencia:

20*3 = 60-20 => 20*2 = 40
2X = 40 (primer Resultado)

2da secuencia:

Ya de antemano sabes que va a dar el doble que la primera.

2*50 -20 = 100-20 = 80

2Y - X = 2*(2X) ( da el doble del 1er resultado)

2Y=4X+X
2Y=5X

Y=5X/2

3er. Secuencia:
Ya sabemos que da el triple que la 1ra.

2*95 - 20 - 50 = 190-70 = 120

2Z - X - Y = (2X)*3
2Z - X - Y = 6X
2Z = 6X + X + Y (pero como Y= 5X / 2 )
2Z = 6x + X + 5X/2
4Z = 12X + 2X + 5X (Multiplico por 2 para quitar el divisor)

4Z = 19X

Z=19x/4

Sabiendo todo esto volvemos a la formula principal

CAPITAL = X + Y + Z

Sustituyo cada valor

CAPITAL = X + 5x/2 + 19X/4

4 * CAPITAL = 4X + 10X + 19X (Multiplico por 4 para quitar divisores)

4 * CAPITAL = 33X

X= ( CAPITAL * 4 ) / 33

ejemplo
X= ( 165 * 4 ) / 33
x= 20


Entonces si te pasan el capital sabes los valores a partir de la fórmula X= ( CAPITAL * 4 ) / 33

Se cumple para tu ejemplo, de áca en adelante ya puedes sacar lo demas ya que sabes que Y=5X/2 y Z=19x/4

El resto creo que como programadores ambos sabemos hacerlo que es llenar el ListBox, cualquier cosa a las ordenes.

Saludos...
Washington Gelos
  #5 (permalink)  
Antiguo 12/03/2011, 14:16
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Hola wgelos,

primero de todo gracias por tomar tiempo para razonarlo, pero que me dices si en la formula te cambio el multiplicador 3 por otro cualquiera (4, 5, 2.2, ...) ?

En ese caso ya sirve el X= ( CAPITAL * 4 ) / 33

Eso es exactamente a lo que me refiero, esa ecuacion que has hecho tu la hize yo con el multiplicador 2;

20 x 2 = 40 (+20)
60 x 2 = 80 (+40)
140 x 2 = 280 (+60)
-----
220 ---> Capital


220 = X + Y + Z

Y = 3 * X
Z = (2 * Y) + X

X = 220 / 11


Es el mismo razonamiento que has seguido tu, pero si dejamos de suponer que sabemos el multiplicador...¿como se resuelve? Porque si te fijas en la imagen de la interfaz del programa hay una casilla que dice "Cotizacion", ese dato lo tiene que dar el usuario.

Es culpa mia que alomejor no me explique muy bien. Aver si todavia puedes hecharme una mano habiendo aclarado esto.

Un saludo
  #6 (permalink)  
Antiguo 12/03/2011, 14:28
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

MicroHack,

En la ecuación de wgelos,

Código:
            CAPITAL*(COTIZACION-1)^2
X=-----------------------------------------------
     6*COTIZACION^2-8*COTIZACION+3
Supongo que se entiende que ^2 es elevado al cuadrado

Luego tienes
Código:
         2*COTIZACION-1
Y=X* ----------------------
           COTIZACION-1
Código:
      3*X*(COTIZACION-1)+CAPITAL
Z=-----------------------------------------
               COTIZACION
Ojo! Estas fórmulas sólo sirven para COTIZACION > 1



Saludos

Última edición por Pau42195; 12/03/2011 a las 15:21
  #7 (permalink)  
Antiguo 12/03/2011, 15:54
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Hola Pau42195

Lo siento pero a pesar de no haber entendido tu razonamiento he aplicado la formula en mi codigo y da como resultado infinito

Te puedes explicar de otra forma porfavor ? Igual soy un poco corto jeje

Cuando empeze a hacer el programa no pense que me volveria tan loco buscando esto
  #8 (permalink)  
Antiguo 12/03/2011, 16:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

Para que dé infinito debes haber aplicado COTIZACION=1

Veamos tu ejemplo:

COTIZACION=3
CAPITAL=165

Código:
      CAPITAL*(COTIZACION-1)^2
X=-----------------------------------------------
     6*COTIZACION^2-8*COTIZACION+3

      165*(3-1)^2
X=----------------------
      6*3^2-8*3+3

    165*(2)^2
X=-----------------
     6*9-8*3+3

      165*4
X=------------
     54-24+3

     660
X=--------
     33
Y por fin: X=20

Luego:

Código:
           2*COTIZACION-1
Y=X* ----------------------
           COTIZACION-1

            2*3-1
Y=20* -----------
            3-1

            5
Y=20* ---
            2
Y=50

Código:
      3*X*(COTIZACION-1)+CAPITAL
Z=-----------------------------------------
               COTIZACION


      3*20*(3-1)+165
Z=-----------------------
            3

      60*2+165
Z=-----------------------
            3

      285
Z=---------
        3
Z=95

Pero te lo voy a poner un poco más fácil, para que hagas copiar y pegar en Excel:

Pones el capital en A1

Pones la cotización en A2

En A4 pones la fórmula
Código:
=A1*(A2-1)^2/(6*A2^2-8*A2+3)
En A5 pones la fórmula
Código:
=A4*(2*A2-1)/(A2-1)
En A6 pones la fórmula
Código:
=(3*A4*(A2-1)+A1)/A2
Ya verás que cambiando los valores de A1 y A2 te van saliendo resultados diferentes. Por ejemplo, con 220 y 2, te saldrá 20, 60 y 140

Pruébalo
  #9 (permalink)  
Antiguo 13/03/2011, 07:43
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Hola Pau42195,

gracias por la ayuda, anoche estuve unas horas intentando descifrar tu formula pero no lo conseguí, no entiendo como de la ecuacion que da wgleos, CAPITAL= X + Y + Z derivas a

Código:
      CAPITAL*(COTIZACION-1)^2
X=-----------------------------------------------
     6*COTIZACION^2-8*COTIZACION+3
Pero aun sin entender su lógica me dispuse a usarlo para terminar el programa, y me di cuenta de que como bien dices esta formula no es válida para una cotización con valor superior a 1.

Este argumento lo interprete a medias, pensando que cuando decis superior a 1 te referias decimalmente, es decir, 1,01 ya es mayor que 1,00, pero no es valido para esta formula que obliga que la cotizacion sea mayor a 1,99, osea 2 como minimo.

Debido a esta restricción ya se vienen todos los esfuerzos abajo porque la cuota debe de ser valida a partir de 1,01

Alguna idea de como lograrlo ?


Edit: Otro detalle de la formula es que solo calcula las 3 primeras "secuencias" de la operacion, y aunque asi lo haya descrito yo en el ejemplo, en mi programa real enlisto 7 "secuencias", un ejemplo para que se entienda mejor usando una cotizacion de valor 2 y un capital de 4940:

Código:
4940 = x + s + t + u + w + y + z


1º secuencia: 20 * 2 = 40           (+20)
2º secuencia: 60 * 2 = 120         (+40)
3º secuencia: 140 * 2 = 280       (+60)
4º secuencia: 300 * 2 = 600       (+80)
5º secuencia: 620 * 2 = 1240     (+100)
6º secuencia: 1260 * 2 = 2520   (+120)
7º secuencia: 2540 * 2 = 5080   (+140)
----------------------------------------
CAPITAL      4.940

Última edición por MicroHack; 13/03/2011 a las 07:51
  #10 (permalink)  
Antiguo 14/03/2011, 11:40
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

Uish!

Pensaba que eran sólo 3 pasos. Así el problema resulta más difícil, pero lo asumo como reto, lo voy a trabajar.

De todas formas, vayamos por fases, lo primero que deberiamos hacer es verificar que nos entendemos en el lenguaje matemático.

para la fórmula:

Código:
      CAPITAL*(COTIZACION-1)^2
X=-----------------------------------------------
     6*COTIZACION^2-8*COTIZACION+3
Si COTIZACION=3 y CAPITAL=165. ¿Qué resultado te da?

A mi me da 20, si a ti no te da 20, deberemos analizar porqué.

Ah! Y la fórmula es buena para COTIZACION > 1, es decir, para COTIZACION=1,01 va bien.
  #11 (permalink)  
Antiguo 14/03/2011, 11:57
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Si Pau42195, a mi tambien me da 20, hasta ahi estamos deacuerdo ;)

Haber si juntos sacamos una solucion a esto y puedo completar el programa :)

Muchas Gracias

Edit: Espera que vuelvo a probar en el Excel lo de la cotizacion y te confirmo porque a la primera no me funcionó.

Edit 2: Pues sí funciona xD, a veces me pasan estas locuras sin sentido, juraria que la primera vez lo hice igual, alomejor no copie algo bien, pero si funciona sí. :)
  #12 (permalink)  
Antiguo 14/03/2011, 13:45
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

Ok, entonces estamos de acuerdo en que funciona para COTIZACION > 1 y con tres secuencias, ahora veremos si podemos sacar fórmulas para N secuencias.

Tardaré
  #13 (permalink)  
Antiguo 16/03/2011, 00:41
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

Eureka!

Ya tengo la fórmula, pero como no me gustan las explicaciones, voy a dar las mínimas

Definiciones:

X(1), X(2), ... son las aportaciones de capital de cada secuencia
B es el beneficio de la primera secuencia
C es el coeficiente
K es el capital total
N es el número de secuencias. N=3 en los primeros ejemplos, N=7 en el último

Por ejemplo, en la primera secuencia
X(1)*C-X(1)=B
X(2)*C-X(2)-X(1)=2*B
...
X(N)*C-X(N)-X(N-1)-...-X(2)-X(1)=N*B

K=X(1)+X(2)+...+X(N)

Estrategia:

Encontrar B a partir de K,C y N
Luego calcular X(1)
Luego X(2)
...

Código:
        'variables que tienen los valores iniciales
        Dim N As Integer = 3    ' Número de secuencias
        Dim K As Double = 165.0 ' Capital
        Dim C As Double = 3.0   ' Coeficiente

        'variables que buscamos
        Dim X(N) As Double      ' Aportaciones al capital
        Dim B As Double         ' Beneficio de la primera secuencia

        'variables auxiliares
        Dim i As Integer
        Dim D As Double
        Dim S As Double

        D = 0
        For i = 1 To N
            D = D + (N + 1 - i) * C ^ (i - 1) * (C - 1) ^ (N - i)
        Next
        B = K * (C - 1) ^ N / D

        S = 0.0
        For i = 1 To N
            X(i) = (i * B + S) / (C - 1)
            S = S + X(i)
        Next
Espero que te haya sido útil, y si tienes más temas, ya sabe.
  #14 (permalink)  
Antiguo 16/03/2011, 07:25
Avatar de MicroHack  
Fecha de Ingreso: agosto-2006
Ubicación: Barcelona
Mensajes: 153
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Problema Matemático

Buenas Pau42195,

leei tu respuesta namás publicaste y te aseguro que la examine con detenimiento pero si no explicas lo que has escrito es como intentar leer chino xD

Por favor si puedes explicarlo con detalle cuando tengas un poco de tiempo te lo agradeceria

Muchas gracias.
  #15 (permalink)  
Antiguo 16/03/2011, 07:53
 
Fecha de Ingreso: octubre-2010
Mensajes: 7
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Problema Matemático

Bueno, hacer explicaciones sin saber lo que sabes y lo que no sabes, lo que entiendes y lo que no, es muy difícil.

Vayamos por pasos.

1. ¿Conoces VB y entiendes el código que he puesto?
2. ¿Puedes hacer Copy/Paste y meterlo en una aplicación tuya para probarlo? Te sugiero que hagas un programa en el que copies y pegues el código y luego añadas un código para que te muestre X(1), X(2), etc.

Luego seguiremos avanzando

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.