Tải bản đầy đủ (.ppt) (106 trang)

Advanced-numerical-method-2

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.69 MB, 106 trang )

University of Technical Education HCM City, 2013


Chapter 4 – Numerical methods for ODE and PDE problems
ODE
5.1 Euler Method
5.2 Runge-Kutta method
5.3 Laplace’s Transform
5.4 Analytic solution
PDE

5.5 Examples


 Initial Valuation Problem


Moõ hỡnh thửùc
teỏ

Moõ hỡnh vaọt lớ


dy
= f (t , y );
dt

y (0) = y0
Phương pháp
Cho h = t – t và điều kiện ban đầu, y
Euler


1

0

= y(t0), tính :

y1 = y 0 + hf (t 0 , y 0 )

y 2 = y1 + hf (t1 , y1 )

...

y j +1 = y j + hf (t j , y j )
Hoặc

y j = y j −1 + hf (t j −1 , y j −1 ) + O(h 2 )

Dùng pháp Euler Tính

dy
= t − 2y
dt
Kết quả chính
xác

y(0) = 1
1
y = [2t − 1 + 5e − 2t ]
4



j

tj

f (t j −1 , y j −1 )

Euler
yj=yj+hf(tj-1,yj-1)

C.xác
y(tj)

0
1
2
3

0.0
0.2
0.4
0.6

NaN
0-(2)(1) = - 2.000
0.2 – (2)(0.6) = -1.000
0.4 – (2)(0.4) = -0.4

(Đk ban đầu) 1.000
1.0 + (0.2)(-2.0) = 0.60

0.6 + (0.2)(-1.0) = 0.40
0.4 + (0.2)(- 0.4) = 0.32

1.000
0.688
0.512
0.427

Sai số
yj-y(tj)
0
-0.0879
-0.1117
-0.1065

So sánh với
đồ thò :
Đối với h đã
biết, sai số lớn nhất
trong kết quả số đó
là sai số rời rạc
toàn cục

max (∑ ( y j − y (t j )) )
j


Đánh giá sai
số :
Sai số đòa phương tại mỗi

bước là:

ej = yj – y(tj)

với y(tj) là kết quả chính xác tại tj
GDE = max( ej )
1, …
h

max(ej )

0.200
0.100
0.050
0.025

0.1117
0.0502
0.0240
0.0117

j=

Giải bằng Matlab:
function [t,y] = odeEuler(diffeq,tn,h,y0)]
t = (0:h:tn)’;
n = length(t);
y = y0 + zeros(n , 1);
for j = 2 : n
y(j) = y(j – 1) + h* feval(diffeq,t(j -1),y(j-


1));
>> rhs = inline(‘cos(t)’,’t’,’y’) ;
end
>> [t,Y] = odeEuler(rhs,2*pi,0.01, 0) ;
>> plot(t,Y,’o’) ;


Matlab code
2.4

% (i) Exact solution
2.2
sol = dsolve('Dz = z^2 * cos(2*t)', ...
'z(0)=1', 't');
2
pretty(sol)
1.8
t = linspace(0, 6, 601);
z = eval(vectorize(sol));
1.6
% (ii) Euler's method
1.4
tn = 6; z0 = 1; h = 0.125;
[teul,zeul] =odeEuler(@f,tn,h,z0);
1.2
% Exact solution - Euler approximate solution
1
plot(t,z, teul,zeul,'r-.')
legend('Exact', 'Euler')

0.8
grid on
0.6
%
0.4
echo off; diary off
0
1
%-------------------------------------------------------function [t,z]=odeEuler(f,tn,h,z0)
% Function M-file f.m
t=(0:h:tn)';
function zp = f(t,z)
n=length(t);
zp = z.^2 .* cos(2.*t);
z=z0+zeros(n,1);
%----------------------------- for j=2:n
z(j)=z(j-1)+h*feval(f,t(j-1),z(j-1));
end

Exact
Euler

2

3

4

5


6

dz
= z 2 cos 2t z (0) = 1
dt
z (6) = 0.788465


Phương pháp RungeTính độ dốc ở
4 vò trí ứng với mỗi bước lặp:
Kutta
k1 = f (t j , y j )
h
h
k 2 = f (t j + , y j + k1 )
2
2
h
h
k 3 = f (t j + , y j + k 2 )
2
2

y j +1

k 4 = f (t j + h, y j + hk 3 )

 k1 k2 k3 k4 
= y j + h  + + + ÷+ O (h5 )
6 3 3 6


Sử dụng hàm thư viện Matlab:
Sử dụng ode45
Cú pháp :
[t,Y] = ode45(diffep,tn,y0)
[t,Y] = ode45(diffep,[t0 tn],y0)
[t,Y] = ode45(diffep,[t0 tn],y0,options)
[t,Y] = ode45(diffep,[t0 tn],y0,options,arg1,arg2,…)


Giaỷi baống Matlab

>> rhs = inline(cos(t),t,y) ;
>> [t,Y] = odeRK4(rhs,2*pi,0.01, 0
function [t,y] = odeRK4(diffeq,tn,h,y0)
>> plot(t,Y,o) ;

t = (0:h:tn);
n = length(t) ;
y = y0+ zeros(n , 1) ;
h2= h /2 ; h3= h /3 ; h6= h /6 ;
for j = 2 : n
k1 = feval(diffeq, t(j -1), y(j-1)) ;
k2 = feval(diffeq , t(j -1)+h2, y(j1)+h2*k1 ) ;
k3 = feval(diffeq , t(j -1)+h2, y(j1)+h2*k2 ) ;
k4 = feval(diffeq , t(j -1)+h , y(j1)+h*k3) ;
y(j) = y(j 1) + h6* (k1+k4) +

Haứm thử vieọn Matlab


[t,Y] = ode45(diffeq,tn,y0)

>> rhs = inline(cos(t),t,y) ;
>> [t,Y] = ode45(rhs,[0 2*pi], 0
>> plot(t,Y,r,linewidth,2) ;


Ví duï

dy
= cos( t )
dt

y(0) = 0

clear all
clc
rhs = inline('cos(t)','t','y') ;
[t,Y] = odeRK4(rhs,2*pi,0.01, 0) ;
plot(t,Y,'o') ;
hold on
rhs = inline('cos(t)','t','y') ;
[t,Y] = ode45(rhs,[0 2*pi], 0) ;
plot(t,Y,'r','linewidth',2) ;

function [t,y] = odeRK4(diffeq,tn,h,y0)
t = (0:h:tn)';
n = length(t) ;
y = y0+ zeros(n , 1) ;
h2= h /2 ; h3= h /3 ; h6= h /6 ;

for j = 2 : n
k1 = feval(diffeq, t(j -1), y(j-1)) ;
k2 = feval(diffeq , t(j -1)+h2, y(j-1)+h2*k1 ) ;
k3 = feval(diffeq , t(j -1)+h2, y(j-1)+h2*k2 ) ;
k4 = feval(diffeq , t(j -1)+h , y(j-1)+h*k3) ;
y(j) = y(j-1) + h6* (k1+k4) + h3*(k2+k3);
end

2
1.8
1.6
1.4
1.2
1
0.8
0.6
0.4
0.2
0

0

1

2

3

4


5

6

7


dy
= x, y ( x = 0) = y0
dx

Exact

x2
y = + y0
2


Code Matlab


 4th Order Runge-Kutta Couple




Code Matlab




 General Procedure for Higher Order ODEs


 Hệ cấu trúc với TMD
Hình 2 Hệ SDOF với một TMD

Hình 4. Tải động đất EL-Centro 1940
Hình 3 Mô hình vật lý


 Dạng ma trận cấu trúc và TLD
 Runge-Kutta với Matlab code

Đặt


clear; clc;
options = odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5 1e-5]);
[t,dz] = ode45(@RK,[0 20],[0.01 0 0 1],options);
figure;
plot(t,dz(:,1),'color','b', 'linewidth',2.5);hold on
plot(t,dz(:,3),'color',‘r', 'linewidth',2.5);
title('BIEU DO GIAI BANG PHUONG PHAP RUNGEKUTTA');
xlabel('Thoi gian t')
ylabel(‘Dap ung dao dong')
Legen(‘chuyen vi cau truc’,’ chuyen vi TLD’)
grid on;
%-----------------------------------------------function dz = RK(t,z)
ms =3;md= 5; ks = 10; kd=8;cs=0.5, cd=0.3 ; w = 2;ugg=0.1
dz = zeros(4,1);

dz(1) = z(2);
dz(2) =(10*sin(w*t)-ms*ugg+cd*z(4)+kd*z(3))/ms (cs/ms)*z(2)-(ks/ms)*z(1);
dz(3) = z(4);
dz(4) = =(md*ugg-md*z(2)/md-(cd/md)*z(4)-(kd/md)*z(3);



Scripts

file

m file


 Mô hình 1 cấu trúc SDOF có kháng chấn

Hình 8: Hệ 1 cấu trúc SDOF với kháng chấn


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×