Matlab - Trapecio compuesto en matlab

   
Vista:

Trapecio compuesto en matlab

Publicado por jairo sanchez (5 intervenciones) el 06/04/2015 01:35:02
Buen dìa tengo el siguiente inconveniente con un algoritmo, cuando agrego una funcion como x^2+3x+4 muy larga me sale el siguiente error. Pero si pongo una funcion pequeña como x^2+3, me arroja un resultado sin ningun inconveniente. Gracias

Error using inlineeval (line 14)
Error in inline expression ==> x^2+3x+4
Error: Unexpected MATLAB expression.

Error in inline/subsref (line 23)
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);

Este es el codigo
clc
clear
f='x^2+3x+4';
a=2;
b=-2;
n=8;

% f funcion
% a,b intevalo
% n numero partes
disp('Funcion: ');
f

disp('De [a: ');
a

disp('Hacia b]: ');
b

f=inline(f);

h=(b-a)/n;

aprox=f(a)+f(b);

for i=1:n-1
x=a+i*h;
aprox=aprox+2*f(x);
end

aprox=(h/2)*aprox;a=0;

disp(aprox);
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
Imágen de perfil de JESUS

Trapecio compuesto en matlab

Publicado por JESUS (749 intervenciones) el 06/04/2015 02:34:28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
%sin modificar mucho tu código
clc
clear
f='x^2+3*x+4';
a=2;
b=-2;
n=8;
% f funcion
% a,b intevalo
% n numero partes
disp('Funcion: ');
f
disp(strcat('De [a: ',num2str(a),'Hacia b : ',num2str(b),']'));
f=inline(f);
h=(b-a)/n;
aprox=f(a)+f(b);
for i=1:n-1
x=a+i*h;
aprox=aprox+2*f(x);
end
aprox=(h/2)*aprox;a=0;
disp(aprox)
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

Trapecio compuesto en matlab

Publicado por jairo sanchez (5 intervenciones) el 06/04/2015 02:49:50
Si ya lo probe y si, muchas gracias eres muy gentil
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
Imágen de perfil de JESUS

Trapecio compuesto en matlab

Publicado por JESUS (749 intervenciones) el 06/04/2015 02:53:16
de nada, solo recuerda separar la variable de una constante con un * 3x--> 3*x
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

metodo biseccion

Publicado por Jairo (5 intervenciones) el 13/04/2015 02:13:10
Hola Jesus buenas noches mira que tengo un problema con el metodo de biseccion mira

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
clc;
clear all
fun=input('Introduzca la funcion: f(x)=','s');
i=input('Introduzca el número de iteraciones : ');
a=input('Introduzca a : ');
b=input('Introduzca b : ');
e=input('Introduzca la tolerancia : ');
n=1;
f=inline(fun);
fprintf('\n %6s %7s %8s %10s %8s %8s %8s \n ','a','b','c','f(a)','f(b)','f(c)','|c-a|');
while n<=i
    c=(a+b)/2;
     fprintf('\n %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f \n',a,b,c,f(a),f(b),f(c),abs(c-a));
    if f(c)==0
        fprintf('La raiz exacta es: \n %8.4f \n',c);
        break;
    elseif (b-a)/(2^n)<e
        fprintf('La raiz aproximada es: \n %8.4f \n',c);
        break;
    elseif f(a)*f(c)<0
        b=c;
    else
        a=c;
    end
n=n+1;
end

cuando pongo estos valores

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Introduzca la funcion: f(x)='x^3+2*x^2+10*x-20'
Introduzca el número de iteraciones : 30
Introduzca a : 1
Introduzca b : 2
Introduzca la tolerancia : 0.001
 
      a       b        c       f(a)     f(b)     f(c)    |c-a|
 
   1.0000   2.0000   1.5000 120.0000  94.0000  51.0000  43.0000
 
  50.0000  42.0000 120.0000  94.0000  50.0000  43.0000  49.0000
 
  48.0000  42.0000 120.0000  45.0000  50.0000  48.0000 120.0000
 
  94.0000  51.0000  43.0000  50.0000  42.0000 120.0000  94.0000
 
  50.0000  43.0000  49.0000  48.0000  42.0000 120.0000  45.0000
 
  50.0000  48.0000 120.0000  94.0000  51.0000  43.0000  50.0000
 
  42.0000 120.0000  94.0000  50.0000  43.0000  49.0000  48.0000
 
  42.0000 120.0000  45.0000  50.0000  48.0000   0.5000 Error using  *
Inner matrix dimensions must agree.


me da este error

Que pena tu me podrias ayudar en eso

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
Imágen de perfil de JESUS

metodo biseccion

Publicado por JESUS jesus.royeth@gmail.com (749 intervenciones) el 13/04/2015 22:13:09
puedo corregirte el error pero no veo muy claro el método de la bisección ahí , se supone que quién limita el número de limitaciones es la tolerancia aquí esta la correción de tu error mas no del método:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
clc;
clear all
fun=input('Introduzca la funcion: f(x)=','s');
i=input('Introduzca el número de iteraciones : ');
a=input('Introduzca a : ');
b=input('Introduzca b : ');
e=input('Introduzca la tolerancia : ');
n=1;
f=inline(fun);
fprintf('\n %6s %7s %8s %10s %8s %8s %8s \n ','a','b','c','f(a)','f(b)','f(c)','|c-a|');
while n<=i
    c=(a+b)/2;
     fprintf('\n %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f %8.4f \n',a,b,c,f(a),f(b),f(c),abs(c-a));
    if f(c)==0
        fprintf('La raiz exacta es: \n %8.4f \n',c);
        break;
    elseif (b-a)/(2^n)<e
        fprintf('La raiz aproximada es: \n %8.4f \n',c);
        break;
    elseif f(a).*f(c)<0
        b=c;
    else
        a=c;
    end
n=n+1;
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

metodo newton raphson

Publicado por Jairo (5 intervenciones) el 15/04/2015 18:07:41
Hola Jesús

Tu me puedes colaborar con lo siguiente por favor me muestra error para estas indicaciones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
* el primer punto es con la funcion e^-x-x   con      x0=0
con 5 iteracciones, sin tolerancia
 
 
* el segundo punto  es con la funcion e^-x-x   con      x0=0
con 5 iteraccciones   y tolerancia de 10^-8
 
%Método de newton raphson
clear, clc
disp('METODO NEWTON RAPHSON');
disp('-------------------');
 
cf = input('ingrese funcion a evaluar: ');% lemos fucion que se dese evaluar
 
syms x % variable simbolica 
 
 
f = inline (cf);% transformo esa cadena en una funcion inline le asigno variable f
 
derivada = diff(cf, x);% diff derivada requiere de la cadena cf y de la variable que se va a deriva x
df = inline (derivada);% variable df que al final usare
tol = input ('ingrese tolerancia: ');% ingreso de la tolerancia
error = 50;% establecer un error grande para exceda al bucle while
x = input ('ingrese un valor inicial: ');% valor variable x
n=0;% inicio conteo de iteraciones igual a 0
disp ('    n     xi     error')% encabezado al ejecutar el programa, xo x1 aproximados a la raiz y error que se comete en cada x
while(error>tol)% mientras el errosr sea mayor que la tolerancia continuara iterando hasta llegar que el error sea menor o igual a la tolerancia
    fprintf('\t%i\t%3.5f\t%f\n', n, x, error);
    n = n+1;% aumentar numero de iteraciones
    x = x - f(x)/df(x);% calcular nuevo valor de x
    error = abs (f(x));% error se actualiza como valor absoluto de evalluar x de fx
end


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

metodo biseccion

Publicado por Jairo (5 intervenciones) el 15/04/2015 18:12:52
Muchas pero muchas gracias por tu ayuda, la verdad estoy muy agradecido
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