ppt- nhom 2
TRANSCRIPT
http://bkcar.net/
Trang 1
Câu 1: Viết chương trình tìm nghiệm của hệ Phương trình ñại số tuyến tính Ax=b bằng phương pháp nhân tử LU (SGK,trang 44-48).áp dụng ñối với hệ phương trình có ma trận A=(aij) cấp n=50 với
Giải
1. Phân tích bài toán Theo ñề bài ta thấy ma trận A chính là ma trận 5 ñường chéo.ta áp dụng công thức
Để thể hiện thuật toán Doolittle trong trường hợp ma trận hệ số có dạng ba ñường chéo,thay vì ñưa vào ma trận A,ta ñưa vào 5 vecto :a chứa các phần tử trên ñường chéo chính của A,b là ñường chéo nằm trên ñường chéo chính và c là ñường chéo nằm dưới ñường chéo chính , d là ñường chéo nằm trên ñường chéo b, e là ñường chéo nằm dưới ñường chéo c và một vecto tự do là k.
2. Sử dụng MATLAB
function [x]=matran5duongcheo(N,a,b,c,d,e,k) if nargin<7,error( 'ham co toi thieu 7 doi so' ); end ; u(1)=a(1);v(1)=b(1);r(1)=d(1);l(1)=c(1)/u(1);t(1)=e (1)/u(1);y(1)=k(1); u(2)=a(2)-(l(1)*v(1));y(2)=k(2)-(l(1)*y(1)); t(2)=e(2)/u(2); r(2)=d(2); l(2)=(c(2)-(t(1)*v(1)))/u(2); v(2)=b(2)-(l(1)*r(1)); for i=3:N-2 u(i)=a(i)-(t(i-2)*r(i-2))-(l(i-1)*v(i-1)); t(i)=e(i)/u(i); r(i)=d(i); l(i)=(c(i)-(t(i-1)*v(i-1)))/u(i); v(i)=b(i)-(l(i-1)*r(i-1)); y(i)=k(i)-(l(i-1)*y(i-1))-(t(i-2)*y(i-2)); end ;
http://bkcar.net/
Trang 2
v(N-1)=b(N-1)-(l(N-2)*r(N-2)); u(N-1)=a(N-1)-(t(N-3)*r(N-3))-(l(N-2)*v(N-2)); l(N-1)=(c(N-1)-(t(N-2)*v(N-2)))/u(N-1); y(N-1)=k(N-1)-(l(N-2)*y(N-2))-(t(N-3)*y(N-3)); u(N)=a(N)-(t(N-2)*r(N-2))-(l(N-1)*v(N-1)); y(N)=k(N)-(l(N-1)*y(N-1))-(t(N-2)*y(N-2)); x(N)=y(N)/u(N) x(N-1)=(y(N-1)-(v(N-1)*x(N)))/u(N-1); for i=N-2:-1:1 x(i)=(y(i)-(r(i)*x(i+2))-(v(i)*x(i+1)))/u(i); end ;
CHẠY CHƯƠNG TRÌNH
>>N=50;
>> a=linspace(4,4,50);
>> b=linspace(-1,-1,49);
>> c=linspace(-1,-1,49);
>> d=linspace(-1,-1,48);
>> e=linspace(-1,-1,48);
>> k=linspace(1,1,50);
>> x=matran5duongcheo(N,a,b,c,d,e,k)
x =
Columns 1 through 9
6.9862 11.0276 15.9173 20.2067 24.4489 28.4328 32.2389 35.8366 39.2375
Columns 10 through 18
42.4371 45.4373 48.2372 50.8372 53.2372 55.4372 57.4372 59.2372 60.8372
Columns 19 through 27
62.2372 63.4372 64.4372 65.2372 65.8372 66.2372 66.4372 66.4372 66.2372
Columns 28 through 36
65.8372 65.2372 64.4372 63.4372 62.2372 60.8372 59.2372 57.4372 55.4372
http://bkcar.net/
Trang 3
Columns 37 through 45
53.2372 50.8372 48.2372 45.4373 42.4371 39.2375 35.8366 32.2389 28.4328
Columns 46 through 50
24.4489 20.2067 15.9173 11.0276 6.9862
http://bkcar.net/
Trang 4
Câu 2: cho hệ phương trình vi phân cấp một:
Sử dụng phương pháp runge – kutta bậc 4,hãy xấp xỉ các hàm x(t),y(t) trong [0,1] với bước h=0.1.vẽ ñồ thị của các hàm x(t) và y(t) trên cùng một hệ trục tọa ñộ.
Giải
1. Phân tích cách giải và công thức tổng quát
ñây là hệ phương trình vi phân cấp 1.ta dung phép biến ñổi sau ñể ñưa về dạng quen làm
Hệ phương trình sẽ có dạng:
Với các thong số h=0.1,khoảng xấp xỉ nghiệm [0,1],ta dùng công thức runge – kutta như sau:
2. Sử dụng MATLAB
function [x,y1,y2]= Kutta4(a,b,y1a,y2a,n) x=[];x=[x,a];h=(b-a)/n; for i=1:n,x(i+1)=x(i)+h; end; %tinh cac gia tri cua x1 den xn y1=[];y1=[y1,y1a]; %dua y1 ra dang ma tran
http://bkcar.net/
Trang 5
y2=[];y2=[y2,y2a]; % dua y2 ra dang ma tran for i=1:n k11=h*f(x(i),y1(i),y2(i)); k12=h*g(x(i),y1(i),y2(i)); k21=h*f(x(i)+h/2,y1(i)+k11/2,y2(i)+k12/2); k22=h*g(x(i)+h/2,y1(i)+k11/2,y2(i)+k12/2); k31=h*f(x(i)+h/2,y1(i)+k21/2,y2(i)+k22/2); k32=h*g(x(i)+h/2,y1(i)+k21/2,y2(i)+k22/2); k41=h*f(x(i)+h,y1(i)+k31,y2(i)+k32); y1(i+1)=y1(i)+(k11+2*k21+2*k31+k41)/6; %gia tri y1 k42=h*g(x(i)+h,y1(i)+k31,y2(i)+k32); y2(i+1)=y2(i)+(k12+2*k22+2*k32+k42)/6; %gia tri y2 end; % Vong lap tinh cac gia tri cua y1(1) va y2(1) den y1(n) va y2(n) function [f1] = f(x,y1,y2) %ham f1 f1=(x+1)*y1+y2-0.2*x ; function [f2] = g(x,y1,y2) %ham f2 f2= y1-sin(x)*y2+x*cos(x); Chạy chương trình
ta dùng lệnh inline cho hàm f1,f2.
>> a=0;
>> b=1;
>> y1a=0;
>> y2a=0;
>> n=10;
>> f1=inline('(x+1)*y1+y2-0.2*x','x');
>> f2=inline('y1-(sinx)*y2+x*cosx','x');
>> [x,y1,y2]= Kutta4(a,b,y1a,y2a,n)
http://bkcar.net/
Trang 6
x =
0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000
y1 =
0 -0.0009 -0.0029 -0.0054 -0.0076 -0.0088 -0.0084 -0.0059 -0.0006 0.0078 0.0197
y2 =
0 0.0049 0.0194 0.0424 0.0726 0.1083 0.1475 0.1883 0.2285 0.2662 0.2997
3. Vẽ ñồ thị
Ta dùng lệnh plot ñể vẽ ñồ thị
>> plot(x,y1,x,y2)
http://bkcar.net/
Trang 7
Câu 3: Hàm y(x) là nghiệm của bài toán biên tuyến tính cấp hai:
1. Sử dụng phương pháp sai phân hữu hạn,tìm nghiệm gần ñúng hàm y(x) trong ñoạn [0,100] với bước h=0.1
2. Với kết quả vừa tìm ñược,hãy vẽ ñồ thị của hàm
Giải:
1. Sử dụng MATLAB
1, M-file 1:
function [x]=c3tridiag(N,a,b,c,d) % chuong trinh giai he pt 3 duong cheo theo pp Doolittle
if nargin<5, error('Ham phai co toi thieu 5 doi so');
end;
u(1)=a(1);v(1)=b(1);l(1)=c(1)/u(1); y(1)=d(1);
% tu Ly=B suy ra y
for i=2:N-1
u(i)=a(i)-l(i-1)*v(i-1);
v(i)=b(i);
l(i)=c(i)/u(i);
y(i)=d(i)-l(i-1)*y(i-1);
end;
% tinh gia tri x(N)
u(N)=a(N)-l(N-1)*v(N-1);
y(N)=d(N)-l(N-1)*y(N-1);
x(N)=y(N)/u(N);
http://bkcar.net/
Trang 8
% tinh gia tri x con lai (Ux=y suy ra x=y/U) for i=N-1:-1:1 x(i)=(y(i)-v(i)*x(i+1))/u(i); end ;
2, M-file 2:
function [y]=bientuyentinh(p,q,r,f,a,b,n,alpha,beta)
if nargin<9, error('Ham co it nhat 9 doi so');
end;
h=(b-a)/n;
for i=1:n+1, x(i)=a+(i-1)*h;
end;
% gan cac gia tri bien
y(1)=alpha;
y(n+1)=beta;
% vecto duong cheo chinh
for i=1:n-1,
A(i)=r(x(i+1))-2*p(x(i+1))/h/h;
end;
% vecto nam tren duong cheo chinh
for i=1:n-2,
B(i)=p(x(i+1))/h/h+q(x(i+1))/2/h;
end;
% vecto nam duoi duong cheo chinh
for i=1:n-2,
C(i)=p(x(i+2))/h/h-q(x(i+2))/2/h;
http://bkcar.net/
Trang 9
end;
% vecto tu do
for i=1:n-1,
D(i)=f(x(i+1));
end;
D(1)=D(1)-(p(x(2))/h/h-q(x(2))/2/h)*alpha;
D(n-1)=D(n-1)-(p(x(n))/h/h+q(x(n))/2/h)*beta;
% chay chuong tring giai he voi cac vecto tren
[Y]=c3tridiag(n-1,A,B,C,D);
% gan lai gia tri Y
for i=1:n-1,
y(i+1)=Y(i);
end;
3,Chạy chương trình:
Ta dùng câu lệnh inline ñể nhập hàm cho p,q,r,f.
>> p=inline('x*x','x');
>> q=inline('x+1','x');
>> r=inline('(x*x-2.5)','x');
>> f=inline('x*(sqrt(x+1))','x');
>> a=0;
>> b=100;
>> alpha=0;
>> beta=0;
>> n=1000;
>> y=bientuyentinh(p,q,r,f,a,b,n,alpha,beta)
http://bkcar.net/
Trang 10
y =
Columns 1 through 6
0 0.1433 0.1151 0.1710 0.2287 0.2951
Columns 7 through 12
0.3701 0.4531 0.5433 0.6397 0.7416 0.8479
Columns 13 through 18
0.9577 1.0700 1.1836 1.2977 1.4111 1.5228
Columns 19 through 24
1.6318 1.7371 1.8378 1.9328 2.0215 2.1029
Columns 25 through 30
2.1762 2.2409 2.2962 2.3417 2.3769 2.4014
Columns 31 through 36
2.4149 2.4173 2.4085 2.3885 2.3574 2.3154
Columns 37 through 42
2.2627 2.1998 2.1271 2.0452 1.9546 1.8560
Columns 43 through 48
1.7503 1.6382 1.5205 1.3983 1.2724 1.1437
Columns 49 through 54
1.0134 0.8823 0.7515 0.6219 0.4946 0.3705
Columns 55 through 60
0.2504 0.1354 0.0261 -0.0766 -0.1719 -0.2594
Columns 61 through 66
-0.3383 -0.4083 -0.4688 -0.5196 -0.5603 -0.5909
……
http://bkcar.net/
Trang 11
Columns 937 through 942
0.0292 0.0045 -0.0191 -0.0415 -0.0624 -0.0816
Columns 943 through 948
-0.0990 -0.1143 -0.1274 -0.1382 -0.1465 -0.1524
Columns 949 through 954
-0.1557 -0.1564 -0.1545 -0.1500 -0.1431 -0.1336
Columns 955 through 960
-0.1218 -0.1078 -0.0917 -0.0736 -0.0539 -0.0325
Columns 961 through 966
-0.0099 0.0139 0.0385 0.0638 0.0893 0.1150
Columns 967 through 972
0.1406 0.1657 0.1902 0.2138 0.2362 0.2573
Columns 973 through 978
0.2768 0.2945 0.3103 0.3240 0.3354 0.3445
Columns 979 through 984
0.3512 0.3553 0.3570 0.3561 0.3526 0.3466
Columns 985 through 990
0.3382 0.3274 0.3144 0.2993 0.2822 0.2633
Columns 991 through 996
0.2428 0.2209 0.1978 0.1738 0.1491 0.1239
Columns 997 through 1001
0.0985 0.0732 0.0482 0.0237 0
http://bkcar.net/
Trang 12
2. Dùng hàm plot ñể vẽ ñồ thị:
>> plot(y)