Matlab - evaluar funciones multivariables

 
Vista:

evaluar funciones multivariables

Publicado por Bodoque (19 intervenciones) el 05/10/2007 14:31:20
Hola
quisiera planterles el problema que me aqueja .
no he logrado encontrar la forma de evaluar una funcion de mas de una variable, por ejemplo, si tuviese una sistema de ecuaciones no lineales del tipo:
f1=x1^2+3*x2-x3
f2=x1+x2*x3
entonces como hago para evaluarlas en un cierto conjunto de valores para x1,x2,x3???????
he intentado usar la funcion eval..pero estoy construyendo una programa que deberia ser capaz de hacer este tipo de calculo para cualquier numero de variables como para cualquier numero de funciones..
he intentado cargar las X=X(x1,x2,..,xn) en un vector pero no se como tomar los elementos del vector he ir evaluando la funcion para el set de valores del vector X.
estoy trabajando en un programa para un metodo numerico, entonces este tipo de calculos se repiten varias veces, ya que el vector X esta cambiando y deberia evaluar las funciones f para el nuevo conjunto de datos de X que se van generando a medida que la rutina se ejecuta.
Tal vez no estoy utilizando en forma correcta la funcion eval...
espero me puedan ayudarme.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:evaluar funciones multivariables

Publicado por Kike (304 intervenciones) el 05/10/2007 16:15:51
Para ayudarte mejor incluye un poco del código fuente del programa.

Bueno, para tomar el primer elemento de X:
X(1)

Para tomar el tecer elemento de X:
X(3)

Para tomar el último elemento de X, pero sin conocer cuántos elementos posee:
X(end)
También X(length(X))

Para tomar el penúltimo elemento de X, pero sin conocer cuántos elementos posee:
X(end-1)
También X(length(X)-1)

Para tomar los elementos de X uno por uno:
for n=1:length(X)
X(n) % muestra el n-ésimo elemento de X
end

Para agregar otro elemento más a X:
X(end+1)=elemento_nuevo
También X(length(X)+1)=elemento_nuevo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:evaluar funciones multivariables

Publicado por bodoque (19 intervenciones) el 05/10/2007 21:27:37
hola kike..
gracias por responder..

te doy un ejemplo con mas detalle para explicarte mi problema
supongamos un sistema de ecuaciones no lineales:
f1(x1,x2)=x1^2+2*x2
f2(x1,x2)=2*x1+x2

y quisiera conocer la solucion de este sistema.
para ello conozco un vector X=(x1,x2) para iniciar el calculo (iterativo)
hasta llegar a la solucion.

dentro del metodo que pretendo utilizar necesito evaluar las funciones segun
los valores del vector X.
entonces por ejemplo:
x1=1, x2=2
f1(x1,x2)=(1)^2+2*(2)
f2(x1,x2)=2*(1)+(2)
y estas funciones quedaria cargadas en un vector f=(f1(x1,x2),f2(x1,x2))
despues de algunos calculos mas, generaria un nuevo par de valores x1,x2
y volveria a evaluar el vector f en los nuevos valores de x1,x2.
El problema pasa por que entiendo como construir un proceso de este estilo
para un set cualquiera de funciones y de numeros de variables (n funciones y n variables)
mirando algun manual que encontre en internet lei acerca de funcion eval
entonces si escribiese
x1=1
x2=2
r=eval(f1)
s=eval(f2)
tendria los valores de f1 y f2 evaluados en x1 y x2, pero seria una rutina solo
para dos variables y no abierta para un conjunto mas grande (n variables).

gracias por la ayuda..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:evaluar funciones multivariables

Publicado por Kike (304 intervenciones) el 06/10/2007 00:32:31
¿Cuál es el problema? ¿Debes resolver el sistema de ecuaciones no lineales como sea, o debes hacer como proyecto un programa que resuelva el sistema de ecuaciones?

Si lo primero es lo correcto, SOLVE sí puede resolver un sistema de ecuaciones no lineales. Si debes hacer el programa:

Bueno, para que eval funcione las ecuaciones deben ser cadenas de texto, y deben estar igualadas a cero, es decir que no puden contener el signo =.

Para detener la iteración es necesario tener un valor de precisión para comparar, que se llame er y que valga 1e-5 en este ejmplo. Utilizaremos un lazo do que tendrá algún lazo for. Y supongo que sería bueno almacenar todos los valores numéricos que se vayan generando en la iteración, así que el vector X será más bien una matriz.

%ecuaciones
f1='2*x1^2+5*x2-1.25*x3^2+8';
f2=otra ecuación rara;
fn=otra ecuación rara;

% cell array de ecuaciones
F={f1, f2, f3, ... fn};

% vector de variables con valores iniciales, que después será matriz
x1=0;
x2=0;
x3=0;
xn=0;
X=[x1, x2, x3, ... xn]

% precisión
er=1e-5; %10 millonésimos
Er=[ ]; % vector de precisiones

% evalúo las funciones con los valores iniciales
colF=length(F);
for k=1:colF % evalúo cada ecuación una por una
eval(F{k}); % nota que uso llaves en F{k}
end
% no recuerdo el algoritmo del método numérico para generar nuevos valores de % variables. Supongamos que tú sí sabes. Guardaremos los nuevos valores en % la segunda fila del vector X, luego en la tercera, etc.

% entro en la iteración en caso de que sea necesario, pues a veces de pura
%chiripa uno escoge los valores iniciales justos y exactos y no hay necesidad de
% dar más vueltas al asunto. Restaré el x1 nuevo del x1 viejo, igual con los
% x2 y los x3, y dichas restas las compararé con la precisión
Er=X(end,:)-X(end-1,:); % los dos puntos indican usar todas las columnas

% Creo que el algoritmo sólo usaba la mayor de las restas (en valor absoluto),
% ¿o lo estoy inventando? ;P
Er=abs(Er); %valor absoluto de las restas
Ermax=max(Er); % valor mayor de las restas

while Ermax>er % repito todo si Ermax es mayor que 10 millonésimos

for k=1:colF
eval(F{k});
end

Er=X(end,:)-X(end-1,:);
Er=abs(Er); %valor absoluto de las restas
Ermax=max(Er);

end % fin de while

% Respuesta final
X(end,:) % todas las columnas de la última fila

Bueno, creo que inventé más de lo debido, pero la intención es darte nuevas ideas y no resolver al 100% tu tarea.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:evaluar funciones multivariables

Publicado por bodoque (19 intervenciones) el 06/10/2007 02:58:47
muchas gracias kike..voy a probar tus ideas..
como tu bien supones debo construir un programa...
aquello de..F{k}...lo desconocia..la verdad estoy aprendiendo a programar..

respecto del crtiterio de convergencia...trabajo con normas (de vectores o matrices) pero la idea esta correcta...creo comprender..

nuevamente reitero mis agradecimientos..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:evaluar funciones multivariables

Publicado por Maria (1 intervención) el 20/06/2008 16:12:51
buenos días me podran ayudar con un proble el cual dice es de multivariables

sen x1 x2 + cos (x1-x2)
con una tolerancia de 0.05

Xo=[0.707 ; 1] elevado t
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:evaluar funciones multivariables

Publicado por sonia (1 intervención) el 05/04/2010 17:19:00
z=arcosen((x-y)/x+y) verifique q xdz/dx+ydz/dy =0
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar