Red de conocimiento del abogados - Ley de patentes - integrales simbólicas y numéricas de matlab

integrales simbólicas y numéricas de matlab

En MATLAB, int se usa principalmente para la integración simbólica y trapz, dblquad, quad, quad8, etc. se usan para la integración numérica.

int(s) La integral indefinida de la expresión simbólica s

int(s,x) La integral indefinida de la expresión simbólica s con respecto a la variable x

int( s,a,b) La integral definida de la expresión simbólica s, a,b son los límites superior e inferior de la integral respectivamente

int(s,x,a,b) La integral definida de la expresión simbólica s con respecto a la variable x Integración, a y b son los límites superior e inferior de la integral respectivamente

método de integración trapezoidal trapz(x,y), cuando x representa la vector discretizado del intervalo de integración, y es un vector de la misma dimensión que x, lo que significa Integrade, z devuelve el valor integral.

quad8('fun',a,b,tol) Integración numérica con tamaño de paso variable, fun representa el nombre de la función M del integrando, a, b son los límites superior e inferior de la integración respectivamente, tol es la precisión, falta La provincia es 1e-3.

fblquad('fun',a,b,c,d) Integración numérica doble en un área rectangular, fun representa el nombre de la función M del integrando, a y b son respectivamente. Los límites superior e inferior de x, c, d son los límites superior e inferior de y respectivamente.

Ejemplo 1 Calcular integral doble

Primero escribe cuatro Archivos de funciones M,

% Archivo de algoritmo integral doble dblquad2.m

función S=dblquad2(f_name,a,b,c_lo,d_hi,m,n)

%donde f_name es la cadena de función del producto, 'c_lo' y 'd_hi' son las funciones de límite inferior y superior de y, ambas son funciones escalares de x, b son el límite inferior y el límite superior de x respectivamente; m, n son fracciones iguales en las direcciones x e y respectivamente (el valor predeterminado es 100).

if nargin<7, n=100 end

if nargin<6; , m=100; end

if m<2|n<2

error('Número de intervalos no válido');

end

mpt=m+1; hx=(b-a) /m; x=a+(0:m)*hx;

para i=1:mpt

ylo= feval_r(c_lo,x(i)); yhi=feval_r( d_hi,x(i));

hy=(yhi-ylo)/n;

para k=1 :n+1 y(i,k)=ylo+(k -1)*hy; f(i,k)=feval_r(f_name,x(i),y(i,k)); p> G(i)=trapz(y(i,: ),f(i,:));

fin

S=trapz(x,G);

%integrand eg3_fun.m

función z=eg3_fun(x,y)

z=1+x+y;

% integral función de límite inferior eg3_low.m

función y=eg3_low(x)

y=-sqrt(1-x^2);

% límite superior integral function eg3_up.m

function y= eg3_up(x)

y=sqrt(1-x^2);

Después de guardar, use el código MATLAB en la ventana de comando:

>>clear

>>dblquad2('eg3_fun',-1,1,'eg3_low','eg3_up')

El resultado es

ans =3.1383

Para obtener una solución numérica más precisa, el intervalo debe ser más refinado. Por ejemplo, las direcciones x e y se dividen en partes iguales. 1000 puntos código MATLAB:

>>clear; dblquad2('eg3_fun', -1,1,'eg3_low','eg3_up',1000,1000)

El resultado es. respuesta = 3,1415.

Este problema también se puede resolver usando símbolos int. El código de MATLAB es:

>clear;syms x y;

>iy=int(1+x). +y,y,-sqrt(1-x^2),sqrt(1-x^2));

>>int(iy,x,-1,1)

El resultado es

ans =pi

Ejemplo 2 cálculo quad8 de integral definida

Función %M fun1.m

función y= fun1(x)

y=x.^4;

Después de guardar, use el código MATLAB en la ventana de comandos:

>>clear;

>>quad8('fun1',-2,2)

>>vpa(quad8('fun1',-2,2),10) %Mostrar el resultado con 10 cifras significativas

El resultado es

ans =12.8000

ans =12.80000000

Para integración numérica con tamaño de paso variable, quad y quad8 se usan comúnmente Comando, quad usa el método Simpson de tamaño de paso adaptativo, quad8 usa el método Newton-Cotes de octavo orden de tamaño de paso adaptativo, recomendamos usar quad8, que no solo tiene mayor precisión, sino que también tiene cierta adaptabilidad a la convergencia falsa y el singular falso integrales, y quad es peor.

Método integral de Roberg código de programa MATLAB

función [I, paso]=Roberg(f,a,b,eps)

if(nargin==3)

eps=1.0e-4;

fin;

M=1;

tol =10;

k=0;

T=zeros(1,1);

h=b-a;

T ( 1,1)=(h/2)*(subs(sym(f),findsym(sym(f)),a)+subs(sym(f),findsym(sym(f)),b));

mientras tol>eps

k=k+1;

h=h/2;

Q=0;

para i=1:M

x=a+h*(2*i-1);

Q=Q+subs(sym(f), findsym (sym(f)),x);

end

T(k+1,1)=T(k,1)/2+h*Q;

M=2*M;

para j=1:k

T(k+1,j+1)=T(k+1,j) + (T(k+1,j)-T(k,j))/(4^j-1);

end

tol=abs(T(k+ 1 ,j+1)-T(k,j));

fin

I=T(k+1,k+1);

step =k;

Código de programa MATLAB para el método de integración adaptativa

función I=SmartSimpson(f,a,b,eps)

if(nargin== 3)

eps=1.0e-4;

fin;

e=5*eps;

I=SubSmartSimpson(f ,a,b,e);

función q=SubSmartSimpson(f,a,b,eps)

QA=IntSimpson(f,a,b,1,eps);

QLeft=IntSimpson(f,a,(a+b)/2,1,eps);

QRight=IntSimpson(f,(a+

b)/2,b,1,eps);

if(abs(QLeft+QRight-QA)<=eps)

q=QA;

else

q=SubSmartSimpson(f,a,(a+b)/2,eps)+SubSmartSimpson(f,(a+b)/2,b,eps);

end

Código MATLAB del método integral Wilson θ para análisis de respuesta de vibración lineal

% ver también

% contáctame matlabsky@gmail.com

% 2010-02-26 16:52:12

%

clc

clear

% Parámetros de la ecuación de movimiento estructural

M=1500000;

K=3700000;

C=470000;

% parámetro de Wilson θ

theta=1.4;

dt=0.02; % intervalo de tiempo

tau=dt*theta;

% procesamiento de datos

eqd =load('acc_ElCentro_0.34g_0.02s.txt'); % Estímulo de aceleración, la primera columna es tiempo, la segunda columna es aceleración

n=size(eqd,1);

t=0:dt:(n-1)*dt;

xg=eqd(:,2)*9.8; % Aceleración del proceso

dxg=diff( xg) *theta; %

F=-M*xg;

% D2x velocidad; x desplazamiento

D2x=ceros(n,1);

Dx=ceros(n,1);

x=ceros(n,1);

para i=1:n-1

K_ba=K+3/tau*C+6/tau^2*M;

dF_ba=-M*dxg(i)+(M*6/tau+3* C) *Dx(i)+(3*M+tau/2*C)*D2x(i);

dx=dF_ba/K_ba;

dD2x=(dx* 6/ tau^2-Dx(i)*6/tau-3*D2x(i))/theta;

D2x(i+1)=D2x(i)+dD2x;

Dx(i+1)=Dx(i)+D2x(i)*dt+dD2x/2*dt;

x(i+1)=x(i)+Dx(i )* dt+D2x(i)*dt^2/2+dD2x/6*dt^2;

fin

subtrama(311)

trama (t ,x) % desplazamiento

subtrama(312)

trama(t,Dx) % velocidad

subtrama(313)

trama (t,D2x)% de aceleración

El código del programa matlab del algoritmo de Runge-Kutta de cuarto orden para resolver ecuaciones diferenciales ordinarias

función [x,y] = MyRunge_Kutta(fun ,x0, xt,y0,PointNum,varargin)

El método %Runge-Kutta resuelve la ecuación diferencial en la forma y'(t) = f(x,y(x))

%Este programa puede resolver ecuaciones diferenciales de alto orden.

Simplemente escriba su forma como la forma vectorial de la ecuación diferencial anterior

% El rango de x es [x0, xt], el valor inicial es y0, PointNum es el número de puntos discretos y varargin es un elemento de entrada opcional Puede pasar los parámetros apropiados a la función f(x,y)

si nargin < 4 | PointNum <= 0

PointNum= 100;

fin

si nargin < 3

y0 = 0;

fin

y(1,:) = y0(:) '; %El valor inicial se almacena en forma de vector de fila

h = (xt-x0)/(%PointNum-1); PointNum]'*h; %Obtener x valor del vector

para k = 1:PointNum % cálculo iterativo

f1 = h*feval_r(fun,x(k),y(k ,:),varargin {:});

f1 = f1(:)'; %get k1 en la fórmula

f2 = h*feval_r(fun,x(k) + h/2,y(k,:) + f1 /2,varargin{:});

f2 = f2(:)'; %get k2 en la fórmula

f3 = h*feval_r(fun,x(k) + h /2,y(k,:) + f2/2,varargin{:});

f3 = f3(:)'; obtenga k3 en la fórmula

f4 = h *feval_r(fun,x(k) + h,y(k,:) + f3,varargin{:});

f4 = f4(:)'; %Obtener k4 en la fórmula

y(k + 1,:) = y(k,:) + (f1 + 2*(f2 + f3) + f4)/ 6;%