Matlab - calculo de una integral por sumatorias dos

 
Vista:

calculo de una integral por sumatorias dos

Publicado por Nelson (7 intervenciones) el 25/10/2007 22:23:31
Se necesita una "funcion programada" que calcule el valor de la integral de una funcion f(x) mediante sumatorias,la funcion seria la siguiente:

f(x)=d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c

donde: a,b,c,d,e,f,g,w1,w2,w3,w4, son constantes de f(x).

Ademas, se tiene que indicar a la funcion los limites de la misma, la cantidad de diviciones que se utilizaran para calcular la integral(0 el valor de la division) y se necesita que se grafique la funcion asi como la curvade aproximacion.

creo que este tipo de integracion se llama integral de Riemann, y por favor espèro que alguien me ayude ha hacer este programa por que no se ni por donde empezarlo.


Esto es lo que he hecho hasta ahora:

%calculo de una integral por sumatorias
function A= area(a,b,c,d,e,f,g,w1,w2,w3,w4,x,xmax,delta)
%function A= area(a,b,c,d,e,f,g,w1,w2,w3,w4,x,xmax,delta)
fx=(d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c)
A=fx
end
fx=(d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c)
x=(x:delta:xmax)
y=zeros(1,delta)
for(i=1:delta)
y(1,i)=(d*cos(w1*x(1,i))^2+e*sin(w2*x(1,i))^2+f*cos(w3*x(1,i))+g*sin(w4*x(1,i))+a*x(1,i)^2+b*x(1,i)+c)
end
plot(x,y)

pero lo que pasa esque el matlab me dice lo siguiente:

??? Input argument 'd' is undefined.

Error in ==> C:\MATLAB6p5\work\area.m
On line 4 ==> fx=(d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c)
y no me corre el programa y no se porque, y la primera grafica de la linea curva de la funcion no me la muestra, y tampoco he podido sacar la segunda grafica de la escalera que es el area que se supone calcula la integral de la funcion programada
fx=(d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+casi que espero que puedan ayudarme.

gracias y puravida
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:calculo de una integral por sumatorias dos

Publicado por Kike (304 intervenciones) el 25/10/2007 22:53:25
Lo que sucede es que area es una función de Matlab que necesita dos o tres argumentos de entrada según el help de Matlab, quizá eso causa problemas. Lo que debes hacer es cambiar el nombre de tu función, por ejemplo areanelson o miarea, etc.
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:calculo de una integral por sumatorias dos

Publicado por Nelson (7 intervenciones) el 25/10/2007 23:32:24
gracias y ahora voy por la parte de la graficar las funciones, y no se que valores darleha x2 y y2 para que me grafique la funcion y la escalera( que seria el area) juntas.

%calculo de una integral por sumatorias
function A= miarea(a,b,c,d,e,f,g,w1,w2,w3,w4,xmin,xmax,delta)
%function A= miarea(a,b,c,d,e,f,g,w1,w2,w3,w4,xmin,xmax,delta)
f(x)=d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c
A=f(x)

%grafica de la funcion programada
f(x)=d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c
x=(xmin:delta:xmax)
y=zeros(1,xmax)
x2=
y2=zeros
for(i=1:xmax)
y(1,i)=d*cos(w1*x(1,i))^2+e*sin(w2*x(1,i))^2+f*cos(w3*x(1,i))+g*sin(w4*x(1,i))+a*x(1,i)^2+b*x(1,i)+c
y2(1,i)=
end
hold on
plot(x,y)
plot(x2,y2,'.r')
hold off
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:calculo de una integral por sumatorias dos

Publicado por Kike (304 intervenciones) el 26/10/2007 01:04:28
Si x es un vector, esta función dará error:
f(x)=d*cos(w1*x)^2+e*sin(w2*x)^2+f*cos(w3*x)+g*sin(w4*x)+a*x^2+b*x+c

Debe escribirse:
A=d*cos(w1*x).^2+e*sin(w2*x).^2+f*cos(w3*x)+g*sin(w4*x)+a*x.^2+b*x+c

Si escribes f(x) Matlab buscará un archivo de función llamado f.m que necesite un argumento de entrada, y como no lo encontrará dará error. Entonces:
Primero defino a x:
x = xmin:delta:xmax;

Luego evalúo la función para los valores de x, y me ahorro un lazo (bucle) for:
f=d*cos(w1*x).^2+e*sin(w2*x).^2+f*cos(w3*x)+g*sin(w4*x)+a*x.^2+b*x+c
Esto se ejecuta en menos tiempo que usando for. Matlab es más eficiente si se trabaja con vectores y matrices.

Luego hago la primera gráfica:
plot(x,f,'r'); % línea de color rojo

Para hacer un poco más bonito tu programa te sugiero lo siguiente:
Dado que son muchas variables de entrada es fácil equivocarse al introducirlas, y lo más probable es que olvides una de ellas. Para evitar esto introduce los valores por medio de input.
a=input('\nValor de a:\n');
...
xmin=input('\nValor de xmin:\n');

Nota:
no estoy corrigiendo la matemática, sino la sintaxis de Matlab. Si recuerdo bien el concepto de una suma de Riman (no me interesa cómo se llama ese señor) era la suma de las áreas de rectángulos cuyas alturas eran las ordenadas de la función y, y la base eran deltas de x. Por lo tanto, la gráfica es de la función y (o f(x), como sea que la llames... es lo mismo), y la integral es la suma de todos los valores de A, es decir A=sum(y), y es un solo valor numérico que lo puedo graficar como una línea continua (se vería feo), o lo puedo presentar en la línea de comandos: fprintf('\nArea de la funcion: %f\n', sum(A))

No sé qué es la curva de aproximación.
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