You are on page 1of 9

Họ và Tên: Võ Triều Đạt

MSSV:19200271

Câu 1:
syms x;
fx=@(x) x.^2-2*sin(x)+ 0.5;
fx(2)

câu 2:
với phương pháp chia đôi:

function [x1,n]=ppchiadoi(fx,a,b,saiso)
%f=@(x) x-sin(x)-0.25
%a=-1
%b=2
%f=@(x) x-sin(x)-0.25
%a=1
%b=2
syms x;
fxi=str2func(['@(x)' char(fx(x))]);
n=0;
while (abs(a-b)>saiso)
x1=(a+b)/2;
if (fxi(a)*fxi(x1)<=0)
b=x1;
else
a=x1;
end
n=n+1;
end
s=sprintf("nghiem=%f,sovonglap=%d",x1,n)
disp(s)
end
Với phương pháp lặp:
function [x1,n]=pplap(fp,a,b,saiso)
%fp=@(x) 0.25+sinx
syms x;
fxi=str2func(['@(x)' char(fp(x))]);
n=0;
x1=a;
x2=fxi(x1);
while(abs(x2-x1)>saiso)
x1=x2;
x2=fxi(x1);
n=n+1;
end
c=x1;
s=sprintf("nghiem=%f,sovonglap=%d",x1,n)
disp(s)
end
Với phương pháp tiếp tuyến
function [x1,n]=giaitieptuyen(fx,a,b,saiso)
syms x;
fxi=str2func(['@(x)' char(fx(x))]);
fxi1=str2func(['@(x)' char(diff(fx(x)))]);
fxi2=str2func(['@(x)' char(diff(diff(fx(x))))]);
n=0;
x0=0;
for i=a:saiso:b
if (fxi(i)*fxi2(i))>0
x1=i;
break;
end
end
while (abs(x1-x0)>saiso)
x0=x1;
x1=x0-fxi(x0)/fxi1(x0);
n=n+1;
end
end
Với phương pháp dây cung
function [x1,n]=ppdaycung(fx,a,b,saiso)
x0=a;
x1=(a*fx(b)-b*(fx(a)))/(fx(b)-fx(a));
e=abs(x1-x0);
n=0;
while e>=saiso
n=n+1
if (fx(x1)*fx(a)<0)
b=x1;
else
a=x1;
end
x0=x1;
x1=(a*fx(b)-b*fx(a))/(fx(b)-fx(a));
e=abs(x1-x0);
end
s=sprintf("nghiem=%f,sovonglap=%d",x1,n)
disp(s)
end

a) Tìm nghiệm gần đúng của phương trình 𝑥– 𝑠𝑖𝑛𝑥 = 0.25 với khoảng phân
li
nghiệm [-1, 2] và sai số không lớn hơn 0.005
Pp chia đôi
f=x-sin(x)-0.25=0
f[-1]=-0.4085
f[2]=0.8407
tính c=a+b/2
=>f(c)=f[(-1+2)/2]=f[0.5]=-0.2294<0 => αϵ[0.5;2]
f[1.25]=0.0510>0 =>αϵ[0.5;1.25]
f[0.875]=-0.1425>0 =>αϵ[0.875;1.25]
tương tự cách làm t có kết quả cuối:
f[1.1709]=-2 =>αϵ[1.1709;1.17383]
lấy cận b-a=0.0029<0.005
vậy nghiệm cuối là 1.1709
Với phương pháp lặp
F=x-sin(x)-0.25=0
-ta chuyển hết qua vế phải để vế trái còn mỗi x
=>x=0.25+sinx
-cho hàm vế phải là g(x)
-đạo hàm vế phải ta có g’(x)=cosx
|g’(x)|=cosx<=cos(-1)<1
 Phép lặp hội tụ
+Cho x0=1 với phép lặp 0.25+sinx
Xn-1 Xn

-1 -0.5915
-0.5915 -0.3076
-0.03076 -0.0528
-0.0528 0.1972
0.1972 0.4459
0.4459 0.6813
0.6813 0.8798
0.8798 1.0206
… …
1.1666 1,1694
Lấy xn trừ cho xn-1=1.1694-1.1666=0.0028<0.005
Vậy x~1.1694

Với phương pháp dây cung


F=x-sinx-0.25=0
F(-1)=-0.0028.10-3
F(2)=0.84
Chọn xo=-1 xấp xỉ ban đầu
𝑥𝑛−1 .𝑓(𝑑)−𝑑.𝑓(𝑥𝑛−1 )
Xn=
𝑓(𝑑)−𝑓(𝑥𝑛−1 )

𝑥1−1 .𝑓(𝑑)−𝑑.𝑓(𝑥1−1 ) −1∗0.84−2.∗(0.0028∗103 )


=> X1= = =-0.999
𝑓(𝑑)−𝑓(𝑥1−1 ) 0.84−(0.0028∗10−3

F(x1)=-0.4081
Tương tự như x1 ta có:
Xn-1 xn
-0.999 -0.05316
-0.05316 0.7718
0.7718 0.984
0.984 1.0908
1.0908 1.1382
1.1382 1.1582
1.1582 1.1661
1.1661 1.1691

Có 1.1691-1.1661=0.003<0.005=>α=1.1691
b)Lặp lại câu a với khoảng phân li nghiệm [1, 2]. Cho biết phương pháp
nào có số
lần lặp ít nhất và giải thích.
Pp chia đôi
f=x-sin(x)-0.25=0
f[1]=-0.4085
f[2]=0.8407
tính c=a+b/2
=>f(c)=f[(-1+2)/2]=f[0.5]=-0.2294<0 => αϵ[0.5;2]
f[1.25]=0.0510>0 =>αϵ[0.5;1.25]
f[0.875]=-0.1425>0 =>αϵ[0.875;1.25]
tương tự cách làm t có kết quả cuối:
f[1.1709]=-2 =>αϵ[1.1709;1.17383]
lấy cận b-a=0.0029<0.005
vậy nghiệm cuối là 1.1709

Nhận xét : Phương pháp tiếp tuyến có số lần lặp ít nhất có nghiệm gần đúng
với nghiệm của
phương trình. Phương pháp Newton-Raphson còn gọi là phương pháp tuyến
tính hóa, hội tụ rất
nhanh so với phương pháp lặp đơn và phương pháp chia đôi
c) Dùng phương pháp chia đôi, dây cung và tiếp tuyến để tính gần đúng
nghiệm
của phương trình 𝑥2– 𝑠𝑖𝑛𝜋𝑥 = 0 với sai số nhỏ hơn 5.10-5 và khoảng phân li
nghiệm:
[-0.5, 0.5]
Với phương pháp chia đôi ,tiếp tuyến,dây cung ta thực hiện như câu a
và b chỉ cần đổi hàm f(x)=x2-sin𝝅𝒙
Phương pháp chia đôi : x1 = 0.5, n = 15
Phương pháp tiếp tuyền : x1 = -1.1560e-15 , n = 3
Phương pháp dây cung : x1 = 2.6498e-08 , n =4

[-0,05 , 0.5]
Phương pháp chia đôi : x1 = -1.5259e-05, n = 14
Phương pháp tiếp tuyền : x1 = -6.5419e-16 , n = 3
Phương pháp dây cung : x1 = 9.8883e-08 , n = 3

Câu 3 : Viết hàm (function) trong Matlab để tìm đa thức nội suy Lagrange.
Sinh viên được
sử dụng các hàm đã nêu ở phần lý thuyết.
function dathuc = noisuy_Lagrange(x_array, y_array)
l = sym(ones(1,length(x_array)));
syms x;
for i = 1:length(x_array)
for j = 1:length(x_array)
if i~= j
l(i) = l(i)*(x-x_array(j))/(x_array(i)-x_array(j));
end
end
end
dathuc = vpa(simplify(l*y_array'));
end

F(x) : -0.16 ∗ x3 - 0.0035 ∗ x2 + 1.00065 ∗ x - 0.00004

b) Với đa thức tìm được từ a, tính (0.14) và (0.46).


F(0.14): 0.1395
F(0.46): 0.4439
c) So sánh sai số giữa kết quả của b với (0.14)và (0.46)
Kết quả là giống nhau giữa câu B với (0.14)và (0.46), sai sô là rất nhỏ
không đáng kể

You might also like