phương pháp số (1 người xem)

  • Thread starter Thread starter geotech
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

geotech

Thành viên mới
Tham gia
24/6/06
Bài viết
29
Được thích
16
Em xin hỏi có phương pháp nào để giải phương trình dạng này không?
T(y) = b + 2 * z * y
A(y) = (b + z * y) * y
f(y) = Q ^ 2 * T(y) - g * A(y) ^ 3
Giải phương trình f(y)=0 tìm được chiều sâu phân giới trong kênh hình thang.
 
Lần chỉnh sửa cuối:
phương pháp secant method

Chiều nay search mạng thấy thuật toán được viết bằng Fortran (giải ptF(X)=COS(X)-X=0), hình như
phương pháp này cũng được dùng cho ví dụ tính chiều cao phân giới, các cao thủ phân tích giùm em với.




C***********************************************************************
C *
C SECANT ALGORITHM 2.4 *
C *


016 IF ( I .GT. N0 ) GOTO 020
C STEP 3
C COMPUTE P(I)
P=P1-Q1*(P1-P0)/(Q1-Q0)
FP=F(P)
IF (FLAG.EQ.2) THEN
WRITE(OUP,5) I,P,FP
5 FORMAT(1X,I3,2X,E15.8,2X,E15.8)
ENDIF
C STEP 4
IF( ABS(P-P1) .LT. TOL ) THEN
WRITE(OUP,2) P,I,TOL
GOTO 040
END IF
C STEP 5
I=I+1
C STEP 6
C UPDATE P0, Q0, P1, Q1
P0=P1
Q0=Q1
P1=P
Q1=FP
GOTO 016
020 CONTINUE
 
Lần chỉnh sửa cuối:
Em viết lại chương trình tính chiều cao phân giới trong kênh hình thang, anh em test thử, nhớ đổi đuôi thành exe nhé
 
Lần chỉnh sửa cuối:
geotech đã viết:
Em xin hỏi có phương pháp nào để giải phương trình dạng này không?
T(y) = b + 2 * z * y
A(y) = (b + z * y) * y
f(y) = Q ^ 2 * T(y) - g * A(y) ^ 3
Giải phương trình f(y)=0 tìm được chiều sâu phân giới trong kênh hình thang.

Bạn nên mô tả chi tiết các đại lượng, cái nào là số liệu, cái nào là cần tìm, cái nào là công thức,...
Thì bạn tính theo phương pháp thử dần, có mấy dạng sau:

- Chạy dần với bước tăng nhỏ
- hoặc Thuật toán chia đôi,
- hoặc Thuật toán phân đoạn thu nhỏ vùng (đoạn) tính
- hoặc theo Phương pháp Newton

cuối cùng, độ sâu phân giới hk của hình thang có công thức kinh nghiệm cơ mà
 
tigertiger đã viết:
Bạn nên mô tả chi tiết các đại lượng, cái nào là số liệu, cái nào là cần tìm, cái nào là công thức,...
Thì bạn tính theo phương pháp thử dần, có mấy dạng sau:

- Chạy dần với bước tăng nhỏ
- hoặc Thuật toán chia đôi,
- hoặc Thuật toán phân đoạn thu nhỏ vùng (đoạn) tính
- hoặc theo Phương pháp Newton

cuối cùng, độ sâu phân giới hk của hình thang có công thức kinh nghiệm cơ mà
Thứ nhất, mình giải thích về các đại lượng:
b: chiều rộng đáy kênh; z: độ dốc mái kênh; Q: lưu lượng tính toán; g: gia tốc trọng trường; T(y): chiều rộng mặt thoáng nước trong kênh;
A(y) : diện tích ướt trong kênh, y chiều cao cột nước ( biến cần giải hk)
Thứ hai có nhiều phương pháp để giải, ngoài secant method còn có Bisect, Newton Raphson...
Thứ ba lời giải hk chỉ mang tính lý thuyết vì đã có công thức thực nghiệm.
Cuối cùng cám ơn bạn đã reply.
 
Lần chỉnh sửa cuối:
geotech đã viết:
Thứ nhất, mình giải thích về các đại lượng:
b: chiều rộng đáy kênh; z: độ dốc mái kênh; Q: lưu lượng tính toán; g: gia tốc trọng trường; T(y): chiều rộng mặt thoáng nước trong kênh;
A(y) : diện tích ướt trong kênh, y chiều cao cột nước ( biến cần giải hk)
Thứ hai có nhiều phương pháp để giải, ngoài secant method còn có Bisect, Newton Raphson...
Thứ ba lời giải hk chỉ mang tính lý thuyết vì đã có công thức thực nghiệm.
Cuối cùng cám ơn bạn đã reply.

Oh, thế bạn biết rùi còn gì? thế thì bạn hỏi?
tốt nhất bạn post thuật toán chúng ta cùng bàn
thanks
 
Hôm trước chưa biết nên hỏi các bạn, mình cũng mới đọc về những cái này:
còn đây là thuật toán sử dụng secant method, code bằng Delphi

procedure TForm1.BtnCalClick(Sender: TObject);
var
y2,yn,Ti,T2,Tn,Ai,A2,An,fi,fp,f2,fn,yc: real;
k: integer;
begin
{Giai chieu cao phan gioi trong kenh hinh thang}
yc:=yi;
y2:= yi+0.1;
k:=1;
while k<nmax do
begin
Ti:=b+2*m*yi;
Ai := (b + m * yi) * yi ;
fi := Q*Q * Ti - g * Ai*Ai*Ai ;
T2:=b+2*m*y2;
A2 := (b + m * y2) * y2 ;
f2 := Q*Q * T2 - g * A2*A2*A2 ;
fp:=(f2-fi)/(y2-yi) ;
yn:=yi-fi/fp ;
Tn:=b+2*m*yn;
An:=(b+m*yn)*yn ;
fn:=Q*Q*Tn-g*An*An*An;
if abs(fn)<epsilon then
begin
yc:= yn;
{showMessage('gia tri yc'+floattostr(yc)) ;}
break;
end;
y2:=yi;
yi:=yn;
k:=k+1;
end;
Edtyc.Text:=floattostr(yc);
if k>Nmax then ShowMessage('No convergent after'+inttostr(k)+'iterations');

end;
 
Web KT

Bài viết mới nhất

Back
Top Bottom