Tải bản đầy đủ (.doc) (13 trang)

phương pháp giải lặp NewtonRaphson giải hệ phương trình phi tuyến để xác định nồng độ cân bằng của các ion trong dung dịch

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 (137.95 KB, 13 trang )

MỞ ĐẦU
Các bài toán thực tế dẫn đến việc cần phải giải các phương trình phi
tuyến, tuy nhiên, các phương trình này thường phức tạp, do đó nói chung khó có
thể giải được (đưa được về các phương trình cơ bản) bằng các biến đổi đại số. Hơn
nữa, vì các công thức nghiệm của phương trình phi tuyến thường phức tạp, cồng
kềnh, nên cho dù có công thức nghiệm, việc khảo sát các tính chất nghiệm qua
công thức cũng vẫn gặp phải rất nhiều khó khăn. Vì vậy, ngay từ thời Archimedes,
các phương pháp giải gần đúng đã được xây dựng trong đó phương pháp NewtonRaphson giải gần đúng phương trình phi tuyến đã trở thành kinh điển và được sử
dụng rộng rãi trong thực tế. Tuy nhiên, để giải một phương trình bằng tay trên
giấy, có khi phải mất hàng ngày với những sai sót dễ xảy ra song với sự phát triển
của công cụ tin học công việc này chỉ cần thực hiện trong vài phút thậm chí vài
giây và các phương pháp giải gần đúng lại càng có ý nghĩa thực tế lớn.
Nghiên cứu và phát triển khoa học luôn được xem là một trong những vấn
đề quan trọng hàng đầu trong việc định hướng sự phát triển của toàn xã hội. Các
cơ sở máy móc, thiết bị trong các phòng thí nghiệm luôn được trang bị đầy đủ và
không ngừng cải tiến nhằm tạo nhiều điều kiện thuận lợi hơn cho người làm khoa
học. Tuy nhiên trong thực tế không phải lúc nào chúng ta cũng có đủ các điều kiện
cần thiết để thực hiện các thí nghiệm như mong muốn. Lúc này máy tính đóng vai
trò là một công cụ thực sự hữu ích. Sự xuất hiện của máy tính không chỉ dùng
trong việc nghiên cứu, phân tích, đo đạc các kết quả thực nghiệm mà nó còn được
sử dụng như một công cụ để mô phỏng thí nghiệm, cung cấp cho chúng ta những
kết quả mà các thí nghiệm thuần túy thường gặp phải nhiều khó khăn và hạn chế
trong quá trình thực hiện.
Hóa học phân tích là môn học nghiên cứu xây dựng, phát triển và ứng dụng
các phương pháp cho phân tích hóa học. Hóa phân tích lúc ban đầu chủ yếu dựa
vào các phương pháp hóa học với các phương pháp: phân tích hóa học định lượng
và phân tích hóa học định tính.

1



Tuy nhiên do đòi hỏi của sự phát triển kinh tế xã hội, sự giao lưu thương
mại toàn cầu, các phương pháp hóa học dùng trong phân tích đã không đáp ứng
được sức ép ngày một tăng lên là cần có một kết quả phân tích đáng tin cậy. Vì
vậy bên cạnh các phương pháp hóa học người ta còn sử dụng các phương pháp vật
lí, sinh học và cả toán học.
Ngôn ngữ lập trình Pascal là một ngôn ngữ lập trình bậc cao có cấu trúc rõ
ràng làm cho người dùng dễ sử dụng. Do đó việc áp dụng các phương pháp toán
học và ngôn ngữ Pascal trong việc tính toán kết quả phân tích định lượng là hết
sức cần thiết, đặc biệt là trong việc xác định nồng độ cân bằng các ion trong dung
dịch.
Vì vậy trong tiểu luận này tôi đã chọn đề tài là: “Áp dụng phương pháp
giải lặp Newton-Raphson giải hệ phương trình phi tuyến để xác định nồng độ
cân bằng của các ion trong dung dịch” và áp dụng tính toán với bài toán cân bằng
tạo phức trong dung dịch Cu2+ và EDA ( Ethylenediamine C2H4(NH2)2.)

2


I. CƠ SỞ LÝ THUYẾT
1. Lý thuyết bài toán hóa học.
Xét sự tạo phức trong dung dịch của một kim loại M với các phối tử L, đây
là các ion hoặc phân tử có khả năng tạo lien kết cho nhận với kim loại M.
M + nL → MLn
Trong bài toán này chẳng hạn ta xét cụ thể cân bằng tạo phức trong dung
dịch Cu2+ và EDA có dạng:
(1) Cu2+ + EDA →

CuEDA2+

(2) CuEDA2+ + EDA → Cu(EDA)22+


K1
K2

Cho biết nồng độ mol ban đầu của Cu 2+ là C1 và của EDA là C2. Tính nồng
độ cân bằng của các ion và phân tử trung hòa trong quá trình chuẩn độ Cu 2+ bằng
EDA?

Bài giải
Cân bằng (1) và (2) được viết lại dưới dạng sau:
2Cu2+ +

3EDA → CuEDA2+ + Cu(EDA)22+

C0

C1

C2

0

0

[C]

C1 – x – y

C2 – x – 2y


x

y

Ta có các phương trình liên hệ sau:
K1 =

[Cu 2+ ].[EDA]
(C -x-y)(C2 -x-2y)
= 1
2+
[CuEDA ]
x

K2 =

x(C2 -x-2y)
[Cu 2+ ].[EDA]
=
2+
y
[Cu(EDA) 2 ]

Khi đó:
y=

(C2 -x)x
K 2 +2x

(C2 -2x)(K 2 +2x)-2(C 2 x-x 2 )

y’ =
(K 2 +2x) 2

Từ đó ta có thể qui về phương trình 1 ẩn, tìm x và suy ra nồng độ cân bằng
của các ion.

3


Hệ phức Men+ với m phối tử X
Trong dung dịch phức với m=6, khi đạt tới cân bằng có 11 laọi tiểu phân
Mn+, MXn-1, MXn-2, MXn-3, MXn-4, MXn-5, MXn-6, H+, OH-, X-, HX. Để tìm nồng độ
cân bằng chúng ta cần phải giải hệ 11 phương trình tuyến tính, trong đó m phương
trình dạng:
 MX in −i 
Ki =
 MX in−+11−i  +  X − 

Và 5 phương trình còn lại là:
HX = H+ + XH2O = H+ + OHm

Mtotal = [ Mn+] +

∑  MX
i =1

n −i
i




m

Mtotal = [X-] + [HX] +

∑ i  MX
i =1

n −i
i


m

+

+

4

-

-

n+

[H ] + [Na ] – [ClO ] – [OH ] – [X ] + n[M ] +

∑ (n − 1)  MX
i =1


n −i
i

 = 0

ở đây Na+ nằm trong thành phần của muối NaX (có nồng độ C x) và ClO4- nằm
trong thành phần muối M(ClO4)n (có nồng độ Cm).
Hệ phương trình trên đây có thể viết dưới dạng:
i

 MX in −i  = βi  M n +  ×  X −  với β I = K1 K2 … Ki

  

Nếu ký hiệu [X-], [Mn+] và [H+] là x,y,z thì ba ẩn số này được xác định từ 3
phương trình cân bằng vật chất và bảo toàn điện tích:
F(x,y,z) = x +

xz m
+ ∑ i βi yx i − C x = 0
K a i =1
m

i
G(x,y,z) = y + ∑ β i yx − Cm = 0
i =1

H(x,y,z) = z + C x


m
Kw
− nCm − x − ny + ∑ (n − i )yx i β i = 0
z
i =1

trong đó Ka và Kw là hằng số phân li của axit HX và của nước.

4


2. Thuật toán.
Phương pháp Newton-Raphson
Còn gọi là phương pháp Newton hay phương pháp tiếp tuyến. Phương pháp
Newton-Raphson giải một (hệ) phương trình thực bằng cách xấp xỉ dần giá trị của
nghiệm thông qua một dãy số hội tụ về giá trị thật của nghiệm.
Nguyên tắc của phương pháp là nghiệm gần đúng thứ i+1của phương trình
F(x)= 0 có thể tính gần đúng thứ i theo hệ thức sau đây với điều kiện F khả vi tại x i
và F’(x) # 0.
xi +1 = xi −

F ( xi )
F '( xi )

Trong trường hợp tổng quát không phải lúc nào hệ phương trình phi tuyến
cũng quy được về phương trình 1 ẩn. Lúc đó chúng ta phải giải bài toán hệ phương
trình phi tuyến.
Ta xét nguyên tắc của phương pháp giả trên một trường hợp riêng của hệ 3
phương trình 3 ẩn số sau đây:
F(x,y,z)=0

G(x,y,z)=0
H(x,y,z)=0
Nếu gọi xi, yi, zi, là hệ nghiệm gần đúng trong bước lặp thứ i thì hệ nghiệm
gần đúng trong bước lặp thứ i+1 được xác định bởi:
xi+1 = xi + ∆ x
yi+1

= yi + ∆ y

zi+1 = zi + ∆ z
trong đó ∆ x, ∆ y, ∆ z được xác định từ hệ thức
D = A-1XB
Với

5


 − Fi 
B =  −Gi 
 − H i 

 ∆x 
D =  ∆y 
 ∆z 

 − Fx F ' y F 'z 
i
i
 i


A =  −Gxi G ' yi G 'zi 


 − H x H ' y H 'z 
i
i
i 


Điều kiện để giải lặp hệ phương trình phi tuyến bằng phương pháp NewtonRaphson là các hàm F, G, H phải khả vi với mọi biến.
Việc tính đạo hàm riêng của F, G, H, được thực hiện trong PROCEDURE
FFF. Tiêu chuẩn hội tụ của chương trình là:
Delsum =

∆x ∆y ∆z
+
+
x
y
z

Phương pháp hệ phương trình tuyến tính
Hệ phương trình phi tuyến có thể giải được theo cách quy về hệ phương
trình tuyến tính khi khai triển Taylor các hàm F, G, H.

trong đó

∂F ∂F
=
∂xi ∂x


x = xi

Fi + h

∂F
∂F
∂F
+k
+l
+ ... = 0
∂xi
∂yi
∂zi

Gi + h

∂G
∂G
∂G
+k
+l
+ ... = 0
∂xi
∂yi
∂zi

Hi + h

∂H

∂H
∂H
+k
+l
+ ... = 0
∂xi
∂yi
∂zi

= F ' xi và Fi=F(xi, yi, zi)

Khi bỏ qua các số hạng bậc cao hơn 1 chúng ta được hệ phương trình tuyến
tính:
hF 'xi + kF ' yi + lF 'zi = − F 'i
hG 'xi + kG ' yi + lG 'zi = −G 'i
hH 'xi + kH ' yi + lH 'zi = − H 'i

Sử dụng PROCEDURE giải hệ phương trình tuyến tính chúng ta có thể tính
được nghiệm kế tiếp

6


xi+1 = xi + h
yi+1

= yi + k

zi+1 = zi + l
II. CHƯƠNG TRÌNH

1. Chương trình chạy
program GHPTPT; (*khai trien taylor *)
uses crt;
type
m2 =
array[1..10,1..10] of real;
m1 =
array[1..10] of real;
ft=text;
var
i,k,n,j,d,dem
: integer;
mtbb,mtcc,bb,b
: m2;
x,f,dd
: m1;
delta,esp,K1,K2,C1,C2,CuEDA,CuEDA2,Cu,EDA
:real;
f1,f2
:ft;
procedure xdmt(x: m1;n:integer; VAR bb:m2);
begin
(* writeln(x[1],x[2]); *)
f[1]:=x[1]*x[1]+3*x[1]*x[2]+2*x[2]*x[2]-(C1+C2+K1)*x[1](2*C1+C2)*x[2]+C1*C2;
f[2]:=-x[1]*x[1]-2*x[1]*x[2]+C2*x[1]-K2*x[2];
bb[1,1]:=2*x[1]+3*x[2]-(C1+C2+K1);
bb[1,2]:=3*x[1]+4*x[2]-(2*C1+C2);
bb[2,1]:=-2*x[1]-2*x[2]+C2;
bb[2,2]:=-2*x[1]-K2;
for i:=1 to n do

begin
for j:=1 to n do write(bb[i,j]:10:5);
writeln;
end;
end;
{procedure nghiem(a:m2;n:integer;VAR xx:m1);
Begin
xx[1]:=(a[1,3]*a[2,2]-a[1,2]*a[2,3])/(a[1,1]*a[2,2]-a[1,2]*a[2,1]);
xx[2]:=(a[1,1]*a[2,3]-a[2,1]*a[1,3])/(a[1,1]*a[2,2]-a[1,2]*a[2,1]);
end;}
7


procedure ghpttt(a:m2;n:integer; VAR xx:m1);
label 10;
var i , j, k
: integer;
kk,ak,test
: real;
aa
: m2;
Begin
for i:=1 to n do
for k:=1 to n+1 do aa[i,k]:=a[i,k];
for i := 1 to n do
(* Khu x[i] *)
Begin
kk:=aa[i,i];
for j :=i to n + 1 do
Begin

aa[i,j] :=aa[i,j]/kk;
end;
if i=n then goto 10;
for k:= i+1 to n do
begin
for j:= i+1 to n+1 do aa[k,j]:=aa[k,j]-aa[k,i]*aa[i,j];
end;
end;
10: xx[n] := aa[n,n+1];
Writeln (' Nghiem cua phuong trinh');
Writeln (' Xx[',n,']= ', xx[n]);
for i := (n - 1) downto 1 do
Begin
ak:=0;
for j := i + 1 to n do
Begin
ak := ak + xx[j] * aa[i,j];
end;
XX[i] := aa[i,n+1] - ak;
Writeln ('
XX[',I,']= ',XX[i]);
end;
(* thu lai nghiem cua pt *)
writeln(' Thu lai nghiem cua phuong trinh ');
for i:=1 to n do
begin
test:=0;
for j:=1 to n do
begin
test:= aa[i,j]*xx[j]+test;

8


end;
writeln(' test:=':15,test:10:4,' aa[',i,',n+1]:=',aa[i,n+1]:10:4);
end;
end;
procedure hmt(d:m1;n:integer; VAR x:m1);
var
i
: integer;
begin
for i:=1 to n do x[i]:=x[i]-d[i];
end;
BEGIN (* chuong trinh chinh *)
clrscr;
assign(f1,'input1.txt');
rewrite(f1);
writeln('**THANH HA - xac dinh nong do can bang cua ion trong dung dich
Cu2+ va EDA**' );
esp:=1.e-8;
write('nhap hang so can bang K1=');readln(K1);
write('nhap hang so can bang K2=');readln(K2);
write('nhap nong do Cu2+=');readln(C1);
write('nhap nong do EDA= ');readln(C2);
writeln('** Chuong trinh ghptpt bang cach khai trien taylor **' );
esp:=1.e-8;
write(f1,'nhap hang so can bang K1=');write(f1,K1:10:4);writeln(f1,'');
write(f1,'nhap hang so can bang K2=');write(f1,K2); writeln(f1,'');
write(f1,'nhap nong do Cu2+=');write(f1,C1:10:4); writeln(f1,'');

write(f1,'nhap nong do EDA= ');write(f1,C2:10:4); writeln(f1,'');
writeln('nhap cac gia tri gan dung ban dau cua he nghiem');
writeln(f1,'nhap cac gia tri gan dung ban dau cua he nghiem');
n:=2;
for i:=1 to n do
begin
write('x[',i,']=?');readln(x[i]);
write(f1,'x[',i,']+?');write(f1,x[i]:10:4);writeln(f1,'');
end;
readln;
close(f1);
dem:=0;
9


Repeat
inc(dem);
xdmt(x,n,mtbb);readln;
for i:=1 to n do
for k:=1 to n do b[i,k]:=mtbb[i,k];
for i:=1 to n do
b[i,n+1]:=f[i];
ghpttt(b,n,dd);
hmt(dd,n,x);
delta:=0;
for i:=1 to n do
delta:=delta+abs (dd[i]/x[i]);
writeln('delta = ',delta);
readln;
until delta < esp;

writeln(' gia tri cua nghiem ');
for i:=1 to n do write(x[i]:15, ' ');
writeln;
writeln;
CuEDA:=x[1];
CuEDA2:=x[2];
Cu:=C1-x[1]-x[2];
EDA:=C2-x[1]-2*x[2];
assign(f2,'ketqua1.txt');
rewrite(f2);
writeln('Cu',Cu:10);
writeln('EDA',EDA:10);
writeln('CuEDA',CuEDA:10);
writeln('CuEDA2',CuEDA2:12);
writeln('So lan chay la:',dem);
writeln(f2,'Cu',Cu:10);
writeln(f2,'EDA',EDA:10);
writeln(f2,'CuEDA',CuEDA:10);
writeln(f2,'CuEDA2',CuEDA2:12);
writeln(f2,'So lan chay la:',dem:10);
readln ;
close(f2);
end.

10


2. Kết quả
Input:
1.0

1.5
0.1
0.5
0.1
0.3
Output
Nghiem cua phuong trinh
XX[2]= 2.0458715596E-01
XX[1]= 4.0733944954E-01
Thu lai nghiem cua phuong trinh
test:= 0.0800 aa[1,n+1]:= 0.0800
test:= 0.0824 aa[2,n+1]:= 0.2046
delta = 3.4696039035E+00
Nghiem cua phuong trinh
XX[2]= 6.3015396282E-02
XX[1]= -2.9962487853E-01
Thu lai nghiem cua phuong trinh
test:= -0.2591 aa[1,n+1]:= -0.2591
test:= -0.2138 aa[2,n+1]:= 0.0630
delta = 4.0783898521E+01
Nghiem cua phuong trinh
XX[2]= 2.3978233923E-02
XX[1]= -3.6428033911E-02
Thu lai nghiem cua phuong trinh
test:= -0.0271 aa[1,n+1]:= -0.0271
test:= 0.0076 aa[2,n+1]:= 0.0240
delta = 4.1167115195E+00
Nghiem cua phuong trinh
XX[2]= -2.2072033137E-04
XX[1]= 1.7899035425E-04

Thu lai nghiem cua phuong trinh
test:= 0.0001 aa[1,n+1]:= 0.0001
test:= -0.0001 aa[2,n+1]:= -0.0002
delta = 3.1819305302E-02

11


Nghiem cua phuong trinh
XX[2]= -2.9102298084E-08
XX[1]= 3.9040997239E-09
Thu lai nghiem cua phuong trinh
test:= -0.0000 aa[1,n+1]:= -0.0000
test:= -0.0000 aa[2,n+1]:= -0.0000
delta = 3.5051563394E-06
Nghiem cua phuong trinh
XX[2]= -1.7537470291E-14
XX[1]= -3.0767439341E-14
Thu lai nghiem cua phuong trinh
test:= -0.0000 aa[1,n+1]:= -0.0000
test:= -0.0000 aa[2,n+1]:= -0.0000
delta = 3.1080636374E-12
Cu 6.283E-02
EDA 4.542E-01
CuEDA 2.853E-02
CuEDA2 8.63996E-03
So lan chay la:
6
3. Biện luận kết quả
Kết quả thu được gần đúng với kết quả thực, cho thấy ưu điểm của phương

pháp. Như vậy bằng phương pháp giải lặp gần đúng, ta đã xác định được nồng độ
cân bằng của các ion trong dung dịch một cách đơn giản và chính xác. Chương
trình cho phép tính toán nồng độ cân bằng của các ion trong dung dịch bất kì áp
dụng trong các hệ cân bằng tạo phức, acid, base, oxi hóa khử, …
Việc xác định được nồng độ cân bằng của các ion trong dung dịch bằng
cách giải gần đúng có ý nghĩa rất lớn trong việc phân tích, kiểm nghiệm. Áp dụng
thuật toán này với những hệ cân bằng phức tạp sẽ tiết kiệm được nhiều thời gian
và công sức.

12


III. KẾT LUẬN
Như vậy việc áp dụng các thuật toán giải lặp vào bài toán hóa học cho phép
chúng ta có thể xác định được nồng độ cân bằng của các ion trong dung dịch một
cách dễ dàng với những hệ cân bằng phức tạp. Qua đó cho thấy những ứng dụng
của toán học, vật lý, sinh học vào hóa học ngày càng có vai trò quan trọng thu
được những kết quả chính xác và nhanh chóng hơn.

13



×