1. Trang chủ
  2. » Luận Văn - Báo Cáo

thuật toán xác định công thức tính giá trị của đa thức, ghi ở dạng chính tắc, trên cơ sở dùng công thức nội suy lagrange

16 1,5K 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 427,73 KB

Nội dung

Chủ Đề 4: THUẬT TOÁN XÁC ĐỊNH CÔNG THỨC TÍNH GIÁ TRỊ CỦA ĐA THỨC, GHI Ở DẠNG CHÍNH TẮC, TRÊN CƠ SỞ DÙNG CÔNG THỨC NỘI SUY LAGRANGE Giảng viên hướng dẫn: TS.. TRỊNH CÔNG DIỆU Nhóm thực hi

Trang 1

Chủ Đề 4:

THUẬT TOÁN XÁC ĐỊNH CÔNG THỨC TÍNH GIÁ TRỊ CỦA ĐA THỨC, GHI Ở DẠNG CHÍNH TẮC, TRÊN CƠ SỞ DÙNG CÔNG THỨC NỘI SUY LAGRANGE

Giảng viên hướng dẫn: TS TRỊNH CÔNG DIỆU

Nhóm thực hiện:

1 Ma Xuân Út

2 Lê Thị Diễm Kiều

3 Nguyễn Văn Tùng

Tháng 12/2014

Trang 2

NỘI DUNG TRÌNH BÀY

Trang 3

1 ĐẶT VẤN ĐỀ:

Cho P là một hàm đa thức bậc bé hơn hoặc bằng n Khi P cho ở dạng chính tắc 0

n i i i

a x

=

,

ta đã có thể tính giá trị của đa thức tại α ∈ℜdễ dàng.

Yêu cầu đặt ra: giải quyết bài toán bằng công thức nội suy Lagrane Tuy nhiên, việc tính giá trị của P(x) tại α ∈ℜ nào đó với công thức dạng Lagrane gặp nhiều khó khăn

hơn so với việc tính giá trị khi đa thức ở dạng chính tắc Một cách tự nhiên, ta tìm hiểu

xem có phương pháp nào có thể tính giá trị của P(x),∀ ∈ℜx khi biết một số giá trị

( )i , 0,1, 2, , n

P x i= trong đó x i là các giá trị đôi một khác nhau bằng công thức dạng chính tắc hay không

Một trong những cách có thể thực hiện điều này là dựa vào công thức nội suy Lagrane với mục tiêu là tìm thuật toán biến đổi đa thức từ dạng Lagrane về dạng chính tắc

Để thuận lợi trong việc kí hiệu và trình bày thuật toán, nhóm xin

chọn cách viết dạng chính tắc của hàm đa thức P ở dạng:

0

n

i

P x a xa x a xa

=

với a a0, , 1 a n∈ℜ

2 CƠ SỞ LÝ LUẬN:

2.1 Định lí 1:

Cho các cặp (x y i i, i), =0,n với x ix j nếu ij Khi đó tồn tại duy nhất P(x) là đa thức

bậc nhỏ hơn hoặc bằng n sao cho y i =P x i( )i , =0,n

CM:

Điều kiện cần và đủ để tồn tại duy nhất đa thức P(x) bậc nhỏ hơn hoặc bằng n sao cho

( ), 0,

y =P x i= n là hệ n+1 phương trình (I): ( )

0

0,

n

n i

i

y a xi n

=

theo các ẩn a a0, , , a1 n có nghiệm duy nhất

Gọi A là ma trận hệ số của (I) Ta có:

1

0 0

1

1 1

1

1 1

1

x x

x x

A

x x

Xét

Trang 4

0 0

1

1

1

n n

n

B

, 0,

i j n

x x

=

(Định thức Vandermond) , hay detB 0≠ Tùy theo giá trị của n, ta có det( )A =det B( )

hoặc det( )A = −det B( ) , do đó Hệ (I) có

(n+1) phương trình, (n+1) ẩn với định thức ma trận các hệ số khác 0 nên là hệ Crame Hệ này

có nghiệm duy nhất

Định lí đã được chứng minh

2.2 Định lý 2: (Định lý Bezout):

Cho α ∈ℜ, P x( )∈R x[ ]là đa thức ở dạng chính tắc ( ) 1

0

n n i i

P x a x

=

=∑

Khi đó dư của phép chia P(x) cho (x−α) là P( )α

CM:

Nếu ta chia P(x) cho (x−α) dư hoặc bằng 0 hoặc một đa thức bậc 0 vì bậc (x−α) bằng 1

Vậy dư là một phần tử r∈ℜ Ta có P x( ) (= −x α) ( )q x +r

Thay x bằng αta được: P( )α =0.q x( ) +r hay P( )α =r

2.3 Định lý 3:

Cho P(x) là một đa thức dạng chính tắc

1 0

n n i i

a x

=

, αlà một số thực bất kỳ Khi đó, ta có đẳng

thức: ( ) 1 1 ( )

P x a x − − b x − − x α b

Trong đó:

0 0

1,i 1, 2, , n

b a

b a αb

=

Chứng minh:

Theo định lý Bezout thì đẳng thức trên tồn tại

Ta chỉ cần chứng minh đẳng thức truy hồi:

1

VPb x − − αb x − − b b xb xb αb xb x b αb x

Đồng nhất hệ số của hai vế, ta có:

0 0

1,i 1, 2, , n

b a

b a αb

=

Hệ quả:

Trang 5

Cho Q(x) là đa th c h s th c có d ng chính t cứ ệ ố ự ạ ắ

1

1 0

,

n

n i i i

a x α

− −

=

∈ℜ

Khi đó, ta có đẳng thức:

1 1 ( )

a x x α a b x

(I) + Bi n đ i t v trái sang v ph i c a (I) đó chính là dùng ph ng phápế ổ ừ ế ế ả ủ ươ dùng sơ đồ hoocner ngược với các hệ số cho bởi :

0 0

1,i 1, 2, , n

b a

b a αa

=

 + Bi n đ i t v ph i sang v trái (ế ổ ừ ế ả ế I) đó chính là phương pháp dùng sơ đồ hoocner với các

hệ số cho bởi

0 0

1 b ,i 1, 2, , n

a b

a αa

=

2.4 Cách xây dựng đa thức nội suy Lagrange:

Cho n+1 mốc nội suy ( , ) n n

i i

x yR xR với x ix jnếu ij,i, j 1, 2, , n= Ta xây dựng đa thức P(x) bậc bé hơn hoặc bằng n sao cho y i =P x i( )i , =1, 2, ,n

Theo định lý 2, P(x) tồn tại và duy nhất

- Ta xây dựng P(x), với nhận xét ( ) ( )

0

n

i i i

P x y Q x

=

=∑

(1), với Q x là đa thức có bậc i( )

n

≤ và Q x i( )

thỏa tinh chất :

( ) 10

i

khi j i

Q x

khi j i

=

i j, =1, 2, ,n

Ta thấy x x0, , ,1 x x i−1, i+1, ,x n

là nghiệm của phương trình Q x i( ) =0 Theo tính ch t c a đa th c :ấ ủ ứ

( ) ( 0) ( 0) ( 1) ( 1) ( ) ( ) ( ) ( )

0

n

j

j i

Q x x x x x x xx x+ x x P x x x R x

=

Do b c c a ậ ủ Q x i( )

là nghiệm nên R x i( ) =C i,∀x

Mặt khác khi x i =x j thì Q x i( ) =1 vậy ta có:

( ) ( )

0

.C 1

n

j

j i

Q x x x

=

0

1

j

j i

C

x x

=

V y ta có công th c d i d ng t ng quát c a P(x) là ậ ứ ướ ạ ổ ủ

Trang 6

( )

0 0

0 ( )

j

j i n

j i

j i

j

x x

P x y

x x

=

=

=

=

∑ ∏

3 THUẬT TOÁN:

Thuật toán xác định P(x) ở dạng chính tắc trên cơ sở dùng công thức nội suy Lagrange

3.1 Nhận xét:

a) Để tìm được P(x) ở dạng chính tắc: ( )

0

n

n i

i

P x a x

=

=∑

bằng cách giải hệ phương trình

tuyến tính ( ) ( )

0

, 1, 2, ,

n

n k

k

y P x a xi n

=

b) Từ công thức nội suy Lagrange:

( )

( ) ( )

0 0 0

n

j

j i n j

i n i

j i j

x x

P x y

x x

=

=

=

=

Bằng thuật toán nhân chia cộng trừ đa thức, và rút gọn ta cũng thu được một biểu thức P(x) được biểu diễn dưới dạng chính tắc , nhưng thuật tón này cần nhiều phép tính, các phép tính dài , phức tạp dễ gây sai sót trong quá trình tính toán

c) Do đó chúng ta tìm một phương pháp sao cho các thao tác tính toán đơn giản hơn , có thể viết được thành một chương trình mà có thể dùng máy tính ứng dụng

3.2 Xây dựng thuật toán xác định dạng chính tắc của

đa thức trên cơ sở dùng công thức nội suy Lagrange:

Cho

( )

0

0

;

n

j

j i

j

n k

j i j

x x

P x a x y

x x

=

=

(a chưa biết) k:

Ta đặt: ( ) ( )

0

n

j j

W x x x

=

( ) ( )

0

n

j

j i

W x x x

=

Trang 7

Ta có:

( ) ( ( ) ), , 0,

i

W x

W x x x i n

x x

( ) ( )

0

n

j

j i

W x x x

=

Như vậy ta viết P(x) như sau:

( ) ( ) ( ( ) )

0

n

W x

P x y x x

W x

=

Sau đó ta dùng ý tưởng sau để chuyển P(x) về dạng chính tắc

Bước 1:

Tìm dạng biểu diễn chính tắc của ( ) 1 1

0

n

n k k k

W x + t x + −

=

=∑

bằng sơ đồ hoocner ngược, ta làm nhưa sau: W x( ) (= −x x0) (x x− 1) ( x xi) ( x xn),i 0, n=

Từ công thức:

( )

1

1

a x x α a b x

(I)

0 0

1,i 1, 2, , n

b a

b a αa

=

i) Ta chọn :

( ) 1 1

0

n

n i i

i

Q xa x − −

=

=∑

trong (I) là: x x− 0và αlà x1 Vậy ( ) ( ) 2 2

0

k k k

x x x x λ x

=

Với λ00 =1,λ01= −x0

10 00

1 1 0 0

10 00

11 1 00 01 1 0

12 1 01 1 0

1

, 1, 2 1

:

Hay x x x

x x x

ii) Ta tiến hành lặp như vậy đến (n-1) bước thì ta được:

( ) 1 1

0

n

n k k k

W x + t x + −

=

=∑

Với

( )

0 1 0

1 1 1

n

t

t x

λ

− − −

=

Bước 2: Ta tìm dạng chính tắc của

Trang 8

( )

0

, 0,

n

n k

k

W x b xi n

=

Được suy ra từ W(x) bằng sơ đồ hoocner

( ) ( ) ( )

( )

1

W x x x W x

t x b x x x

+

= −

Với

0 0

1

i

b t

b x bt

=





Bước 3: Ta tính

( )

W x =l

Bằng sơ đồ Hoocner và định lý Bezout

( ) ( ) ( )

W x =T x x x− +l

Ta có:

( )

W x =l

Với

0 0

1

l b

l x cb

=





Bước 4:

Ta tính các hệ số

1 1 0

, , , ,

n n

x xx x

Của đa thức:

( ) ( )i i , 0,

i i

y

W x i n

Lần lượt là:

, , 0,

i

ik

in

y

b k n

l =

Bước 5: Ta cộng các hệ số của

, 0,

n k

xk = n

Thì ta được các hệ số

, 0,

k

a k = n

Của dạng biểu diễn chính tắc:

( )

y

P x a x a b k n

l

Trang 9

III Biểu diễn thuật toán dưới dạng bảng tổng hợp sau:

Bước 1

0

1

x

x

1 1

x

λ

12 λ

i

x

1

a

b

1

i

x+

n

x

t n+1 W x( )

in

y b

i i in

y b

l ….

i in in

y b l

0

0

x

x

00 1

00 1

b l

=

=

01 01

b

0

n n

b

( ) ( )

0

0 0

W x

W x

0 00

in

y b l

0 01

in

y b

0

0n

in

y b l

i

i

x

x

… 0 0

i i

b l

=

c e

2

i i

d x c t

x e d

( ) ( )

i i

i i

W x

W x

… 0

i i in

y b l

… 1

i i in

y b l

i in in

y b l

n

n

x

nn

l

( ) ( )

n

W x

W x 0

n n in

y b l

n m in

y b l

n nn in

y b l

Trang 10

Tính tổng.

Trang 11

BẢNG 1:

0

1

x

x

1 1

x

λ

12 λ

i

x

1

a

b

1

i

x+

n

x

t n+1

BẢNG 2:

0

0

0

x

x

00 1

00 1

b l

=

=

01 01

b

0

n n

b

i

i

x

x

… 0 0

i i

b l

=

c e

2

i i

d x c t

x e d

n

n

x

nn

l

BẢNG 3:

0

i i in

y b

i i in

y b

l ….

i in in

y b l

( )

( )

0

0 0

W x

W x

0 00

in

y b l

0 01

in

y b

0

0n

in

y b l

( )

( )

i i

i i

W x

W x

… 0

i i in

y b l

… 1

i i in

y b l

i in in

y b l

( )

( )

n

W x

W x 0

n n in

y b l

n m in

y b l

n nn in

l

k

Trang 12

3.3 VÍ DỤ:

Cho

( ) 2 3 3 2 2

P x = xx − +x

Các mốc nội suy:

i

i

(x y i i, i), =0,3

Lập Bảng 1: Dùng sơ đồ hoocner ngược để tìm dạng chính tắc của

( ) ( 1) ( 1) ( 2)

W x = +x xx x

− =x0 1 1 1

1 0

x

2 1

x

3 2

x

( ) 4 2 3 2 2

W x x x x x

Lập Bảng 2: Dùng sơ đồ hoocner để tìm

W x andW x i i( ) i( )i , =0,λ

( )hoocner i( )hoocner i( )i

W x W x W x

0 1

0 1

1 0

1 0

Trang 13

2 1

2 1

3 2

3 2

( ) 3 3 ( ) 3 3

W x b xW x b x

( ) 3 3 ( ) 3 3

W x b xW x b x

Dùng Bảng 3 để tính

( )

0

, 0,

n

i

y

W x

=

( ik

b

là các hệ số của

( )

i

W x

ở dạng chính tắc )

i

i i in

y b

i i in

y b

i i in

y b

i i in

y b l

0

.1 3 6

6

2 0 0 6

− 1

.1 1

2 = 2 2( ) 2

2 − = − 2 1( ) 1

2 − = − 2.2 2

2 = 2

.1 0

2 =

2 − =

2 − =

0 0 0

2 =

− 2

.1

6 =3 4.0 0

6 = 4 1( ) 2

6 − = −3 4.0 0

6 =

k

a

( ) 2 3 3 2 2

P x x x x

Trang 14

4 MÃ GIẢ

a.Tên thuật toán: NoiSuyLagrange

b Input:

- n { số mốc nội suy }

- x x0, , ,1 x n { giá trị các mốc nội suy}

- y0, y , , y1 n {giá trị của hàm số P tại các mốc nội suy}

c Output: Các hệ số của dạng chính tắc của P: a a0, , ,1 a n

d Giải thuật:

Bước 1: Nhập n

Bước 2: Cho i chạy từ 0 đến n: nhập x i

Bước 3: Cho i chạy từ 0 đến n: nhập y i

Bước 4:

0

1 0 1

2 0 1

1

c

c x x

c x x

=

 = − −

 =

 Bước 5: Cho i chạy từ 3 tới n+1:

- Gán: c i:= −x c i−1 i−1

- Cho j chạy từ i−1 đến 1 gán: c j:= −c j x c i−1 j−1 Bước 6: Cho i tăng từ 0 tới n ta làm phép gán

- b i0 =c0

- l i0 =b i0

- Cho j chạy từ 1 đến n tính:

( ) ( )

1 1

ij j i i j

ij ij i i j

b c x b

l b x l

= +



 = +



Bước 7: Cho i chạy từ 0 đến n

- a i =0

- Cho j chạy từ 0 đến n : a =ai i+(y /l )*bj jn ji

Bước 8: Cho i chạy từ 0 đến n: xuất a i

Trang 15

5 CHƯƠNG TRÌNH

#include <iostream>

#include <stdio.h>

using namespace std;

int main()

{

float *a,*c,*x,*y;

int n,k,s,so;

cout<<"================NHOM 8A================="<<endl;

cout<<"Nhap n (So moc noi suy): ";

cin>>so;

n=so-1;

a=new float[n+1]; float **b;

float **l;

b = new float*[n+1];

l= new float*[n+1];

for(int i=0;i<=n;i++)

{

b[i]=new float[n+1];

l[i]=new float[n+1];

}

c=new float[n+2];

x=new float[n+1];

y=new float[n+1];

cout<<"Nhap cac moc noi suy x:\n";

for(int i =0;i<=n;i++)

{

cout<<"x["<<i<<"]= ";

cin>>x[i];

}

cout<<endl<<endl;

cout<<"Nhap gia tri cua ham so tai cac moc noi suy P: \n";

for(int i=0;i<=n;i++)

{

k=i+1;

cout<<"y["<<i<<"]= ";

cin>>y[i];

}

cout<<endl<<endl;

c[0]=1;

c[1]=-x[0]-x[1];

c[2]=x[0]*x[1];

for(int i=3;i<= n+1;i++)

{

Trang 16

c[i]=-x[i-1]*c[i-1];

for(int j= i-1; j>=1;j )

{

c[j] = c[j]-x[i-1]*c[j-1];

}

}

for(int i=0;i<=n;i++)

{

b[i][0]=c[0];

l[i][0]=b[i][0];

for(int j=1;j<=n;j++)

{

b[i][j] = c[j] + x[i]*b[i][j-1];

l[i][j] = b[i][j] + x[i]*l[i][j -1];

}

}

for(int i=0;i<=n;i++)

{

a[i] = 0;

for(int j=0;j<=n;j++)

{

a[i]+=(y[j]/l[j][n])*b[j][i];

}

cout<<"a["<<i<<"]= "<<a[i]<<endl;

}

cin>>n;

}

Ngày đăng: 29/12/2014, 16:29

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w