2012-06-08 28 views
11

Tôi đang triển khai thuật toán cho trường học và đang gặp sự cố khi hiểu cách tích phân được xác định trong lập trình. Ví dụ tôi biết rằng phương trình tổng kết có thể được thực hiện như ví dụ sau:
enter image description hereGặp sự cố khi triển khai phương trình toán học trong lập trình

giả sử y = f (x)

if(x==0){ 
    y=x+1; 
}else{ 
    for(int i = 0; i < n; i++){ 
     y = y + (x - 1); 
    } 
} 

Làm thế nào tôi sau đó sẽ đại diện cho một số không thể thiếu, ví dụ:
enter image description here
Các phương trình được trồng ở đây có thể không có ý nghĩa toán học nhưng mục tiêu của tôi là thực hiện các phương trình tương tự trong C# cho một dự án lập trình trường mà tôi phải thực hiện trong đó tôi phải thực hiện một thuật toán chứa tích phân. Tôi đã được đọc rằng có những phương pháp số để giải quyết tích phân xác định như quy tắc simpson; tôi có phải sử dụng các phương pháp như vậy để thực hiện phương trình hay một tích phân có thể được biểu diễn trong lập trình như vòng lặp hay thứ gì đó thuộc loại đó?

+0

Vì vậy, bạn muốn có trình phân tích cú pháp công thức? Hay bạn muốn học cách thay đổi công thức toán học thành mã? – SQLMason

+0

Tôi muốn thay đổi công thức toán học thành mã số – user1327159

+0

Chào mừng bạn đến với lập trình! Như đã đề cập bên dưới, bạn không thể có tổng số vô hạn. Bạn phải suy nghĩ về những bước bạn sẽ thực hiện để giải quyết vấn đề và viết mã liên quan. – SQLMason

Trả lời

1

Tùy thuộc vào những gì bạn đang cố gắng làm. Nếu đây là triển khai cụ thể, bạn có thể chỉ cần tích hợp công thức x-1 trở thành (x^2)/2 - x và sau đó trả về giá trị lớn nhất trừ đi giá trị tối thiểu.

Hoặc nó có thể được thực hiện như một ước tính chọn kích thước bước thích hợp cho dx.

decimal dx=0.1; 

if(x==0){ 
    y=x+1; // could just return y=1 
}else{ 
    decimal tempY=0; 
    for(decimal i = 3; i <= 20; i+=dx){ 
     tempY += (i - 1); 
    } 
    // Either return tempY as decimal or 
    y= Convert.ToInt32(tempY); 
} 
1

Có lẽ tôi không hiểu nhưng bạn có muốn biết cách tính toán tích phân bằng số không?

Nếu có, có nhiều phương pháp. Đối với một giới thiệu ngắn chăm nhìn vào: http://en.wikipedia.org/wiki/Numerical_integration

Từ bạn ví dụ bạn có thể chỉ cần làm:

int f(int x) { 
    if(x == 0) { 
     y = x + 1; 
    }else{ 
     y = computeIntegral() 
    } 
    return y 
} 

nơi computeIntegral() là một chức năng bạn phải viết để tính toán một thể thiếu.

Nhưng tôi nghĩ có vấn đề với hàm f (x) của bạn bởi vì nếu x không phải là số không f (x) chỉ là một giá trị. Có lẽ ranh giới tách rời phải phụ thuộc vào x?

Nhận xét cuối cùng. Nếu x là số nổi x == 0 không được khuyến nghị vì số thực không có biểu diễn nhị phân duy nhất do làm tròn cắt.

+0

Tôi biết rằng phương trình không có nghĩa là chúng chỉ có hai hình ảnh tôi gõ trong Word để đưa ra ý tưởng chung về những gì tôi muốn làm nhưng mục tiêu của tôi là tìm hiểu cách thể hiện tích phân không nhất thiết là tích phân trong mã, nhưng từ những gì tôi hiểu là tôi sẽ phải tính toán tích phân bằng cách sử dụng ví dụ một phương pháp số, nếu tôi không hiểu lầm những gì bạn đang nói – user1327159

+0

Các tiêu chuẩn IEEE fp yêu cầu +0 và -0 so sánh bằng nhau , do đó, thực tế là chúng có các biểu diễn khác nhau không làm cho x == 0.0 là một hoạt động không hợp lệ (hoặc phiền hà). Và điều này không liên quan gì đến 'làm tròn cắt ngắn' –

+0

@HighPerformanceMark Ok đối với 'x == 0' nhưng nhìn chung nó có ý nghĩa hơn khi so sánh hai số thực với' == '? – Ger

0

Bạn không thể thể hiện tích phân đơn giản chỉ bằng vòng lặp, vì tích phân là tổng vô hạn. Bạn phải sử dụng phương pháp xấp xỉ hoặc sửa đổi phương trình để loại bỏ dấu tích. Không thể tách rời trong phương trình thứ hai của bạn.

1

Chủ đề tích hợp số là lớn và có thể cực kỳ phức tạp vì vậy tôi sẽ không đề cập đến tất cả trong câu trả lời này.

Quy tắc của Simpson là một phương pháp để tích hợp số về phía đầu đơn giản và gần đúng (chứ không phải là phức tạp, chính xác hoặc cả hai) của quang phổ. Nó không phải là một lựa chọn tồi cho bạn để bắt đầu điều tra của bạn về chủ đề, vì nó rất đơn giản để hiểu và chương trình. Tôi không có nghi ngờ rằng bạn có thể trực tiếp thực hiện the formula as presented on Wikipedia trong ngôn ngữ lập trình yêu thích của bạn.

Bây giờ, để buộc các vòng lặp và quy tắc của Simpson với nhau: độ chính xác của xấp xỉ quy tắc của Simpson làm cho giá trị thực của tích phân được cải thiện khi giới hạn tích hợp (3 và 20 trong ví dụ) gần nhau hơn. Vì vậy, một cách tiếp cận mà bạn có thể thực hiện là viết một vòng lặp tính toán tích phân từ 3 đến 4, từ 4 đến 5, ... và thêm tất cả chúng vào cuối. Tích hợp tạo ra các khu vực, thêm các khu vực với nhau tạo ra (thường) một khu vực khác, lớn hơn, diện tích.

Và với tất cả các chuyên gia khác về hội nhập số, có tôi biết rằng có nhiều cách tiếp cận khác, và nhiều phương pháp khác là 'tốt hơn' (trong nhiều giác quan khác nhau) và tôi biết quy tắc của Simpson sẽ gặp rắc rối với một số (nhiều) chức năng, nhưng nó không phải là một nơi tồi tệ để bắt đầu.

Các vấn đề liên quan