Matlab - resolver ecuación

 
Vista:

resolver ecuación

Publicado por holyo (58 intervenciones) el 18/03/2009 14:18:53
Hola a todos, ¿sabeis cómo resolver esta ecuación con el matlab?

A*sin(X)*COS(X)+B^2 * COS(X)+ A*B*SIN(X)^2+SIN(X)^3-2*B*COS(X)^2 = 0

Muchas gracias
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 18/03/2009 15:54:29
Implementa por un lado la función, que te de un valor y por otro el teorema del valor medio, eso si, si te hace falta solo una solución

a=-10;
b=10;
puedes primero dibujar la función para que a ojo cojas unos valores de a y de b adecuados
error = abs(f((a+b)/2));
%f(a) * f(b) ha de ser negativo, sino no funciona, puedes poner un if para comprobar previamente
while (error>0.01)
if (f((a+b)/2) == 0)
error=0; resultado=(a+b)/2
else
if (f((a+b)/2) > 0)
if(f(a)>0)
a=(a+b)/2;
else
b=(a+b)/2;
end
else % f((a+b)/2) < 0
if(f(a)<0)
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error =abs(f((a+b)/2));
end
resultado = a+b/2;

(aproximadamente)
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:resolver ecuación

Publicado por holyo (58 intervenciones) el 18/03/2009 18:53:57
Muchas gracias por la respuesta pero no he entendido lo que haces. Los valores a y b, de donde salen?

Una cosa que no comenté antes, es que A,B son constantes.
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 18/03/2009 20:32:45
a y b son dos valores cualesquiera que he cogido, lo que han de cumplir como te dique es que f(a)*f(b) sea negativo. Lo que hace el programa es aplicar el teorema de valor medio que dice que si dos puntos de una función continua toman valores positivos y negativos respectivamente entre esos dos puntos existen un valor c que hace que la función se anule en dicho punto. Una vez tenidos a y b (yo los he puesto al azar) la rutina va progando que vale el valor de enmedio para ir acotando los valores del resultado, puede que encuentre el valor exacto o puede que el exacto sea irracional, por eso se acota el error maximo que deseas. Si tienes alguna duda más no dudes en escribirme aquí o al correo.
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:resolver ecuación

Publicado por holyo (58 intervenciones) el 18/03/2009 21:45:56
Gracias otra vez por tu ayuda, he echo un pequeñito programa con lo que me has dicho, me sale un error:

??? Index exceeds matrix dimensions.

Error in ==> nolagrange at 12
error=abs(f((a+b)/2));

no lo entiendo, porque la función la he puesto bien, y además, no sé porque dice lo de la dimensión de la matriz.
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 19/03/2009 09:46:47
No sé, copiame la implementación de la función y lo miro
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:resolver ecuación

Publicado por holyo (58 intervenciones) el 19/03/2009 14:00:21
Hola, al final la ecuación que quiero resolver es más complicada, pero utilizo el mismo método.

clear
syms x
k1=1;
k2=2;
k3=3;
k4=4;
k5=5;
k6=6;
f=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x)^2*cos(x)+k5*sin(x)*cos(x)^2+k6*sin(x)^3;
a=10;
b=10;
error=abs(f((a+b)/2));
while error > 0.001
if f((a+b)/2) == 0
error=0;
resultado=(a+b)/2;
else
if f((a+b)/2) > 0
if f(a)>0
a=(a+b)/2;
else
b=(a+b)/2;
end
else
if f(a)<0
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error=abs(f((a+b)/2));
end
resultado=(a+b)/2
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 20/03/2009 11:42:12
Vamos a hacer una cosa, crea un script llamada f.m y copia esto:

function y = f (x),
k1=1;
k2=2;
k3=3;
k4=4;
k5=5;
k6=6;
y=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x).^2*cos(x)...
+k5*sin(x)*cos(x).^2+k6*sin(x).^3;
end

a continuación crea otro llamado, bueno este como quieras que no es una función, yo lo llamé solventar

% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
% Esta rutina solventara la solucion no solo de esta sino de culaquier
% otra funcion que quieras, tan solo has de sustituir el otro fichero f.m
% con la funcion que desees o con los parametros K, como veras por las
% graficas en este caso, y era de imaginar la funcion al ser suma de
% periodicas es periodica, con lo que no solo tiene un cero como localiza
% esta funcion sino que se repiten periodicamente, si calculas el periodo
% podrias calcular todas las soluciones como la solucion esta +k*periodo
% valiendo k cualquiervalor entero desde -inf hasta +inf.
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
clear
a=-10;
b=10;
y=[];

error=abs(f((a+b)/2));
while error > 0.001
if f((a+b)/2) == 0
error=0;
resultado=(a+b)/2;
else if f((a+b)/2) > 0
if f(a)>0
a=(a+b)/2;
else
b=(a+b)/2;
end
else
if f(a)<0
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error=abs(f((a+b)/2));
end
resultado=(a+b)/2;
error=abs(f((a+b)/2));

Yo lo he probado y funciona, pruebalo
si quieres dibujar la función para probarla
y=[]:
for w=-10:.01:10
y=[y f(w)];
end
figure; plot(y,[-10:.01:10]); grid on;

A ver que tal te va a ti
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:resolver ecuación

Publicado por holyo (30 intervenciones) el 20/03/2009 16:46:40
Hola, perdona pero no entiendo muy bien lo que me explicas, he intentado hacer varias cosas pero no me sale bien. No quiero hacerte perder mucho más el tiempo que ya me ayudas bastante,xd, así qe con tal de qe me expliques un poquito más lo del f.m seguro que ya lo entiendo.

Muchas gracias por tu 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:resolver ecuación

Publicado por Angel (75 intervenciones) el 20/03/2009 23:47:34
f.m es otro fichero en el que guardas una función, como la cabecera es
function y=f(x)

cuando tu desde matlab escribes f(3) por ejemplo, matlab llama a esta función y le pasa el parametro 3 en este caso, la fución opera con ese 3 y te da como resultado 'y'

>>f(3)
ans =
34 por ejemplo, no sé
>>

si haces como se hace en la otra rutina

for n=a:0.001:b
y= [y f(n)]
end

y si no viene en la rutina lo utilicé yo para dibujar, lo que hace es calcular los valores de la función para entradas entre a(-10) y b(10) f(a) y f(b) con una resolución de 0.001.

De este modo, creando la función, puedes acceder en cualquier momento a cualquier valor de la misma más rápido ya que no has de evaluarla por completo previamente.

Si quieres información mas precisa sobre el funcionamiento de el método ya te digo, se llama el teorema del valor medio y esto no es más que una extrapolación del mismo a n iteraciones.

Como te digo si editas el archivo f.m y metes otra ecuación, siempre y cuando f(a)*f(b)<0 las mismas instrucciones te serviran para encontrar la solución a la ecuación, si n cumplen esta condición dibuja antes la función y mira un poco a ojo algun valor que lo cumpla.

No me haces perder el tiempo, no te preocupes, si necesitas saber algo mas o tienes aún alguna duda comentame, otra cosa es que si no tengo tiempo tarde un par de dias pero no me importa, aquí estamos para aprender y el que enseña tambien aprende de los errores de otros.
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:resolver ecuación

Publicado por holyo (30 intervenciones) el 23/03/2009 01:25:10
Hola, he creado un M-FILE de esta forma:

clear
syms x
function y=f(x)
k1=1;
k2=2;
k3=3;
k4=4;
k5=5;
k6=6;
y=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x)^2*cos(x)+k5*sin(x)*cos(x)^2+k6*sin(x)^3;
a=10;
b=10;
y=[];
error=abs(f((a+b)/2));
while error > 0.001
if f((a+b)/2) == 0
error=0;
resultado=(a+b)/2;
else
if f((a+b)/2) > 0
if f(a)>0
a=(a+b)/2;
else
b=(a+b)/2;
end
else
if f(a)<0
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error=abs(f((a+b)/2));
end
resultado=(a+b)/2

Y me da este error:
Error: File: C:UsersXenxoDesktopEÓLICOMatlabMatlab_Xenxo olagrange.m Line: 3 Column: 1
Function definitions are not permitted at the prompt or in scripts.

Espero que me puedas ayudar. Gracias
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 23/03/2009 10:46:25
Crea 2, por un lado la función y por otro el script que la resuelve, dos archivos .m separados
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:resolver ecuación

Publicado por holyo (30 intervenciones) el 23/03/2009 22:05:44
Creé por un lado un programa llamado nolagrange qe hace esto:
clear
syms x
function y=f(x),
k1=1;
k2=2;
k3=3;
k4=4;
k5=5;
k6=6;
y=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x)^2*cos(x)+k5*sin(x)*cos(x)^2+k6*sin(x)^3;

y otro programa nolagrange2

a=10;
b=10;
y=[];
error=abs(f((a+b)/2));
while error > 0.001
if f((a+b)/2) == 0
error=0;
resultado=(a+b)/2;
else
if f((a+b)/2) > 0
if f(a)>0
a=(a+b)/2;
else
b=(a+b)/2;
end
else
if f(a)<0
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error=abs(f((a+b)/2));
end
resultado=(a+b)/2

Yo llamo al programa nolagrange y me da error:

??? Error: File: C:UsersXenxoDesktopEÓLICOMatlabMatlab_Xenxo olagrange.m Line: 3 Column: 1
Function definitions are not permitted at the prompt or in scripts.

y al llamar al programa nolagrange2 me sale otro error.

?? Undefined command/function 'f'.

Error in ==> nolagrange2 at 4
error=abs(f((a+b)/2));
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:resolver ecuación

Publicado por Angel (75 intervenciones) el 24/03/2009 10:39:38
facil, al declarar una función la cabecera de la misma ha de ser empezada por la definición, en este caso
fuction y=f(x)

Has de borrar lo anterior, lo que me recuerda una cosa, ¿qué hace syms?, las dos líneas anteriores las debes borrar, de echo no hacen nada. Solo puedes incluir delante de la primera linea lineas de comentarios que en el caso de hacer en matlab help f serian las que te aparecerían.
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:resolver ecuación

Publicado por holyo (30 intervenciones) el 24/03/2009 14:26:28
Pues utilizo el syms para declarar la variable. De hecho, si hago cómo me has dicho y borro las dos primeras líneas, me sale un error:

function y=f(x),
k1=1;
k2=2;
k3=3;
k4=4;
k5=5;
k6=6;
y=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x)^2*cos(x)+k5*sin(x)*cos(x)^2+k6*sin(x)^3;

Input argument "x" is undefined.

Error in ==> nolagrange at 8
y=k1*sin(x)+k2*cos(x)+k3*sin(x)*cos(x)+k4*sin(x)^2*cos(x)+k5*sin(x)*cos(x)^2+k6*sin(x)^3;

y si llamo a nolagrange2:

a=10;
b=10;
y=[];
error=abs(f((a+b)/2));
while error > 0.001
if f((a+b)/2) == 0
error=0;
resultado=(a+b)/2;
else
if f((a+b)/2) > 0
if f(a)>0
a=(a+b)/2;
else
b=(a+b)/2;
end
else
if f(a)<0
a=(a+b)/2;
else
b=(a+b)/2;
end
end
end
error=abs(f((a+b)/2));
end
resultado=(a+b)/2

El error es igual que antes:

Undefined command/function 'f'.

Error in ==> nolagrange2 at 4
error=abs(f((a+b)/2));
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:resolver ecuación

Publicado por sOFY (1 intervención) el 19/05/2009 17:27:19
Quisiera que por favor me ayudaran a resolver una serie de problemas en MATLAB:

ELABORAR UN ARCHIVO QUE IMPRIMA EL RESULTADO DE LA FUNCION Y. LEER X DESDE EL TECLADO. nOTA: SI X=0 O X=1 ENTONCES MANDAR UN MENSAJE QUE DIGA "FUNCION INDETERMINADA", SI X ES DIFERENTE DE 0 Y 1 , HACER EL CALCULO DE LA FUNCION:


Y=(3x-x^3+e^x)/(x^4-x^2)
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

resolver trigonometri

Publicado por gabriela (1 intervención) el 02/05/2010 01:15:17
como resuelvo esto cosx=-1
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