1. Trang chủ
  2. » Cao đẳng - Đại học

tài liệu môn giải tích số giải đa thức bậc n

4 87 0

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 196,85 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Trang 1

GIẢI ĐA THỨC BẬC N 1.Trình bày thuật toán:

Input: Đa thức bậc n có dạng a0xn + a1xn-1 + …… + an-1x + an = 0 (a0 ≠ 0) và sai

số ε cho trước

Output: Nghiệm của đa thức bậc n

Các phương pháp:

• Phương pháp tiếp tuyến để tìm nghiệm bởi tiếp không cần chọn đúng x0 vẫn thực hiện được

• Hoocne tìm đa thức mới không chứa nghiệm của đa thức cũ => bậc đa thức mới giảm 1 bậc so với đa thức cũ

Tóm tắt thuật toán:

Bước 1: Kiểm tra bậc đa thức n=1 thông báo nghiệm x = - a1

a0 và STOP

Bước 2: Chọn x0 = 0 Nếu f’(x0) = 0 thì x0 := x0 + c ,(c = hằng số tùy ý)

Bước 3: Thực hiện 9999 vòng lặp để tính:

xn = xn-1 - f(xn-1)

f'(xn-1) ,n=1,2,… ,9999 Nếu |f(x9999)>0| => Vô nghiệm => STOP

Nếu |xn-xn-1|< ε thì x = xn là 1 nghiệm đa thức và thông báo nghiệm => Chuyển sang Bước 4

Bước 4: Sử dụng Hoocne để tách được đa thức mới không chứa nghiệm vừa tìm được, bậc giảm 1 so với đa thức cũ

Hệ số của đa thức mới:

ai = ai + ai-1x , i=1,…,n-1

Quay lại Bước 1;

Trang 2

Code:

using System;

namespace Giai_phuong_trinh_bac_n

{

class Program

{

static double[] a = new double[1000]; static int n,KL;

static double f(double x)

{

double p = 0;

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

{

p = p * x + a[i];

}

return p;

}

static double fdh(double x)

{

double p = 0;

int m;

m = n;

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

{

p = p * x + m * a[i];

m = m - 1;

}

return p;

}

static double GiaiNghiem(double x)

{

double xs = 0;

int start,finish;

start = 0;

finish = 10000;

if (n == 1)

{

if (a[0]!=0) return -a[1] / a[0]; else return KL = 1;

}

while (fdh(x)==0)

{

x = x + 0.76543;

}

Trang 3

while (start<finish)

{

if (start==(finish-1))

if (Math.Abs(f(x)) > 0.1) KL = 1;

xs = x;

x = x - (f(x) / fdh(x));

if (Math.Abs(x-xs) < 0.000000001) return x;

start++;

}

return x;

}

static void chiadathuc(double x)

{

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

{

a[i] = a[i] + a[i-1] * x;

}

n=n-1;

}

static void Main(string[] args)

{

double x;

int T = 0;

do

{

Console.Write("Giai da thuc bac n voi (n>0), nhap n=

");

n = Int32.Parse(Console.ReadLine());

}

while (n <= 0);

Console.WriteLine("\nNhap cac he so:");

do

{

Console.Write("x^{0} (Khac 0) = ", n);

a[0] = Double.Parse(Console.ReadLine());

} while (a[0] == 0);

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

{

Console.Write("x^{0} = ", n - i);

a[i] = Double.Parse(Console.ReadLine());

}

while(n>0)

{

x = GiaiNghiem(0);

Trang 4

if (KL == 1){if(T==0) Console.WriteLine("PT vo

if (T == 0) Console.WriteLine("\nPhuong trinh co nghiem la:");

Console.WriteLine("X= {0}", x);

chiadathuc(x);

T = 1;

}

Console.ReadKey();

}

}

}

Ngày đăng: 16/07/2019, 20:31

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w