MỤC LỤC MỞ ĐẦU ......................................................................................................................... 1 CHƯƠNG 1: CÁC KIẾN THỨC CƠ BẢN CỦA LƯỢC ĐỒ SAI PHÂN ....................3 1.1 LƯỚI VÀ CÁC BƯỚC LƯỚI: ............................................................................3 1.2 XẤP XỈ SAI PHÂN CÁC TOÁN TỬ VI PHÂN ĐƠN GIẢN ............................ 6 1.4 THIẾT LẬP MỘT BÀI TOÁN SAI PHÂN ....................................................... 14 1.5 VỀ SỰ HỘI TỤ VÀ ĐỘ CHÍNH XÁC CỦA CÁC LƯỢC ĐỒ SAI PHÂN........17 1.6. PHƯƠNG PHÁP XẤP XỈ CÁC ĐIỀU KIỆN BIÊN VÀ ĐIỀU KIỆN BAN ĐẦU ........................................................................................................................... 19 1.7 CÁC VÍ DỤ VỀ LƯỢC ĐỒ SAI PHÂN ỔN ĐỊNH VÀ KHÔNG ỔN ĐỊNH ........21 1.8 VỀ KHÁI NIỆM TÍNH ĐÚNG ĐẮN CỦA BÀI TOÁN SAI PHÂN ................23 CHƯƠNG 2: PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN Ô NHIỄM KHÍ QUYỂN ......................................................................................................................... 25 2.1 MÔ HÌNH TOÁN HỌC CỦA QUÁ TRÌNH LAN TRUYỀN KHÍ THẢI (VẬT CHẤT) TRONG MÔI TRƯỜNG KHÍ (NƯỚC)....................................................... 25 2.2 GIỚI THIỆU BÀI TOÁN ....................................................................................25 2.3 GIỚI THIỆU HÀM DELTA DIRACT ................................................................ 27 2.4 PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN Ô NHIỄM KHÍ QUYỂN ...........27 2.4.1 XÂY DỰNG LƯỢC ĐỒ SAI PHÂN ....................................................... 28 2.4.2 NGHIÊN CỨU LƯỢC ĐỒ SAI PHÂN (3.2.12)(3.2.15) ............................ 30 2.4.3 MỘT VÀI KẾT QUẢ BỔ TRỢ ....................................................................30 2.4.4 TÍNH GIẢI ĐƯỢC ........................................................................................ 33 2.4.5 TÍNH ỔN ĐỊNH ............................................................................................ 34 2.4.6 PHƯƠNG PHÁP GIẢI CHO HỆ (3.2.12)(3.2.15) ......................................34 CHƯƠNG 3: KẾT QUẢ TÍNH TOÁN THỬ NGHIỆM ..............................................37 KẾT LUẬN ...................................................................................................................41 TÀI LIỆU THAM KHẢO ............................................................................................. 42 PHỤ LỤC ...................................................................................................................... 43
LỜI CAM ĐOAN MỤC LỤC Tôi xin cam đoan : Luận văn công trình nghiên cứu thực cá MỞ ĐẦU nhân, thực hướng dẫn khoa học Tiến PHÂN CHƯƠNG 1: CÁC KIẾN THỨC CƠ BẢN CỦA LƯỢC ĐỒ SAIsĩ Nguyễn Công 1.1 Tôi xin chịu trách nhiệm Điều LƯỚI VÀ CÁC BƯỚC LƯỚI:nghiên cứu 1.2 XẤP XỈ SAI PHÂN CÁC TOÁN TỬ VI PHÂN ĐƠN GIẢN Học viên 1.4 THIẾT LẬP MỘT BÀI TOÁN SAI PHÂN 14 1.5 VỀ SỰ HỘI TỤ VÀ ĐỘ CHÍNH XÁC CỦA CÁC LƯỢC ĐỒ SAI PHÂN 17 1.6 PHƯƠNG PHÁP XẤP XỈ CÁC ĐIỀU KIỆN BIÊN VÀ ĐIỀU KIỆN BAN Lưu Xuân Trường ĐẦU 19 1.7 CÁC VÍ DỤ VỀ LƯỢC ĐỒ SAI PHÂN ỔN ĐỊNH VÀ KHÔNG ỔN ĐỊNH 21 1.8 VỀ KHÁI NIỆM TÍNH ĐÚNG ĐẮN CỦA BÀI TOÁN SAI PHÂN 23 CHƯƠNG 2: PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN Ô NHIỄM KHÍ QUYỂN 25 2.1 MÔ HÌNH TOÁN HỌC CỦA QUÁ TRÌNH LAN TRUYỀN KHÍ THẢI (VẬT CHẤT) TRONG MÔI TRƯỜNG KHÍ (NƯỚC) 25 2.2 GIỚI THIỆU BÀI TOÁN 25 2.3 GIỚI THIỆU HÀM DELTA DIRACT 27 2.4 PHƯƠNG PHÁP SAI PHÂN GIẢI BÀI TOÁN Ô NHIỄM KHÍ QUYỂN 27 2.4.1 XÂY DỰNG LƯỢC ĐỒ SAI PHÂN 28 2.4.2 NGHIÊN CỨU LƯỢC ĐỒ SAI PHÂN (3.2.12)-(3.2.15) 30 2.4.3 MỘT VÀI KẾT QUẢ BỔ TRỢ 30 2.4.4 TÍNH GIẢI ĐƯỢC 33 2.4.5 TÍNH ỔN ĐỊNH 34 2.4.6 PHƯƠNG PHÁP GIẢI CHO HỆ (3.2.12)-(3.2.15) 34 CHƯƠNG 3: KẾT QUẢ TÍNH TOÁN THỬ NGHIỆM 37 KẾT LUẬN 41 TÀI LIỆU THAM KHẢO 42 PHỤ LỤC 43 Thang Long University Libraty MỞ ĐẦU DANH MỤC CÁC HÌNH VẼ Hình 1: Nhiềuchính chương trình 38 Form toán thực tiễn dẫn đến việc nghiên cứu toán biên Hình 2: Form liệu chương trình 38 phương trình vật lý toán, giải toán đến đáp số số yêu cầu Hình 3: Form nghiệm chương trình 39 quan trọng thực tiễn Hình 4: Form vẽ đồ thị hàm mật độ theo trục x 39 Trong số trường hợp, thật đơn giản việc làm nhờ Hình 5: Form vẽ đồ thị hàm mật độ theo trục z 40 vào nghiệm tường minh toán dạng công thức sơ cấp, tích phân chuỗi hàm Còn đại đa số trường hợp khác, đặc biệt toán có hệ số biến thiên, toán phi tuyến, toán miền nghiệm tường minh toán không có, có phức tạp Trong trường hợp việc tính nghiệm phải dựa vào phương pháp gần Thế giới phải đối mặt với việc môi trường bị ô nhiễm ngày nghiêm trọng Trên giới xảy nhiều trận mưa axit, khí hậu nóng lên làm cho băng tan dẫn đến mực nước biển dâng lên đe dọa vùng đồng ven biển, tượng nước mặn xâm nhập sâu vào đất liền… Với việc công nghiệp hóa đại hóa với tốc độ ngày nhanh, nhà máy mọc lên không khu công nghiệp xa dân cư mà xây dựng vùng đông dân Khói độc từ nhà máy thải gây hại cho người dân sống xung quanh Luận văn tập trung vào giải hoán ô nhiễm khí nhà máy thải “phương pháp sai phân” nhằm mục đích dự đoán trước ảnh hưởng mật độ chất gây ô nhiễm để hạn chế tác hại Luận văn gồm phần mở đầu ba chương, sau tài liệu dẫn phần phụ lục Chương trình bày kiến thức lược đồ sai phân nhằm phục vụ cho chương hai Chương hai phần khóa luận, trình bày toán ô nhiễm khí nhà máy thải từ ống khói xây dựng thuật toán để giải Chương ba đưa kết tính toán thử nghiệm toán thực tiễn nhằm minh họa cho thuật toán xây dựng chương hai Phần phụ lục toàn văn chương trình lập trình ngôn ngữ C++ Thang Long University Libraty Em xin chân thành cảm ơn TS CHƯƠNG Điều – Viện Công nghệ Nguyễn Công Thông tin đãKIẾN THỨC CƠ BẢN CỦA LƯỢC ĐỒ SAI PHÂN CÁC tận tình hướng dẫn em thời gian em làm khóa luận, đồng thời em xin cảm ơn thầy cô giáo khoa Toán bạn lớp nhiệt tình giúp đỡ em làm khóa luận này.kiến thức sở cần thiết sử dụng Trong chương trình bày chươngDo thờinghiên cứu lược đồ saibản thân em toánchế nên hai để gian kiến thức phân ẩn hạn ô nhiễm khí chắn luận văn thiếu sót, mong đóng góp ý kiến thầy cô bạn CÁC BƯỚC LƯỚI: 1.1 LƯỚI VÀ Để viết lược đồ sai phân tìm nghiệm số xấp xỉ cho toán vật lý phương trình vi phân cho cần thực hai bước: Thay miền biến thiên liên tục biến số miền biến thiên rời rạc nó, toán tử vi phân toán tử sai phân đó, xác định biểu thức sai phân điều kiện biên điều kiện ban đầu Sau nhận hệ phương trình đại số dẫn đến việc xác định nghiệm toán phương trình vi phân cho đưa tìm nghiệm hệ phương trình đại số nhận Khi giải số toán đó, ta xác lập lại giá trị nghiệm sai phân biến số biến đổi liên tục miền không gian Euclid Vì ta cần chọn miền tập hợp hữu hạn điểm tìm nghiệm điểm Tập hợp điểm gọi lưới Hàm xác định nút lưới gọi hàm lưới Như miền biến thiên liên tục đối số thay lưới, tức miền biến thiên rời rạc đối số Và vậy, xấp xỉ không gian nghiệm phương trình vi phân không gian hàm lưới Các tính chất nghiệm sai phân đặc biệt xấp xỉ nghiệm xác phụ thuộc vào việc chọn lưới Ta xét vài ví dụ lưới Thang Long University Libraty Ví dụ 1: Lưới đoạn thẳng Chia đoạn đơn vị [0,1] N phần nhau, khoảng nút lân cận x1i i1.h1 , i1 1, 2, gọi bước lưới, điểm chia Xi=ih (i = 0,1, ,N) gọi nút lưới, tập tất nút lưới: h xi ih : i 1, , N1 lập thành lưới Có thể xem x = , x N = nút lưới Ký hiệu: h xi ih : i 0,1 , N Trên đoạn [0,1], thay cho hàm biến số liên tục y(x) xét hàm biến số rời rạc yh xi , giá trị hàm tính từ nút lưới Còn thân hàm phụ thuộc bước lưới h phụ thuộc vào tham số Ví dụ 2: Lưới mặt phẳng Xét tập hàm hai biến u(x,t) Để đơn giản xét miền xác định hình chữ nhật: G 0 x 1,0 t T Chia đoạn [0,1] [0,T] thành N1,N2 phần Giả sử h 11 , N1N2 Qua điểm chia ta vạch đường song song với trục tọa độ tương ứng Giao đường thẳng nút lưới: 1T hr xi , t j : xi ih, t j j , i 0, , N1 ; j 0, , N ,2 ; h N1N2 Ta có bước lưới h tương ứng với hai trục x t Các nút lân cận nút nằm đường thẳng có khoảng cách bước lưới h Ví dụ 3: Lưới miền hai chiều Giả sử mặt phẳng x = (x1,x2), cho miền G dạng tùy ý với biên G Ta vạch đường thẳng: x1i1 i1.h1 , i1 0, 1, 2, x i2 h , i2 0, 1, 2, i 22 hi 0, i 1, Do mặt phẳng x1 , x2 ta có lưới với nút i1h1 , i2h2 , i1 , i2 0, 1, 2, Lưới theo hướng riêng biệt (Ox ì,Ox2) Ta cần ý nút thuộc miền G G G Các nút nằm miền G gọi nút trong, lập h thành lưới Những điểm giao đường x i1.h1 , i1 i 11 i x22 i2 h , i2 0, 1, 2, với biên G gọi nút biên Ký hiệu tập hợp nút biên yh Ta thấy có nút biên mà khoảng cách đến nút gần nhỏ h hay h2 Như vậy, lưới mặt phẳng theo hướng x1 , x1 lưới h h h miền G không lân cận biên Như miền G biến x thay lưới h , tức tập hữu hạn điểm xi ( xi , xi ) G Thay cho hàm u(x) biến liên tục x G ta xét hàm lưới y ( xi ) , nghĩa hàm nút lưới xi Hàm lưới y ( xi ) viết dạng vecto Nếu đánh số lại nút theo thứ tự đó: x1 , x2 , , xN giá trị hàm lưới nút xem thành phần vecto cột: yT ( y1 , y2 , , yN ) Nếu miền G hữu hạn, chiều N vecto y hữu hạn Nếu G vô hạn, lưới có vô số nút lưới, số chiều vecto y vô hạn Người ta thường xét tập hợp lưới h phụ thuộc vào bước lưới h tham số Vì vậy, hàm lưới yh ( x) phụ thuộc vào tham số h (hoặc vào số nút lưới ) Nếu lưới h không phải xem h vecto h (h1 , h2 , , hN ) với phần tử h1 , h2 , , hN Cũng tương tự vậy, với trường hợp miền G nhiều chiều: x = (x,,x2, ,xp), h (h1 , h2 , , hp ) , lưới h theo hướng xi (i 1, , p) Hàm u(x) biến số liên tục x G phần tử không gian hàm H Tập hàm lưới yh(x) lập thành không gian H h Như vậy, sử dụng phương pháp sai phân hữu hạn, người ta thay không gian H không gian H h hàm lưới yh(x) Thang Long University Libraty Khi xét tập hợp lưới h ta có tập hợp H h không gian hàm lưới phụ thuộc vào tham số h Trong không gian tuyến tính H h đưa vào chuẩn ||.|| tương tự lưới || ||0 chuẩn không gian xuất phát H Giả sử u(x) nghiệm toán liên tục xét u H , yh nghiệm toán sai phân ( xấp xỉ ), yh H h Điều yếu giải gần đánh giá độ xấp xỉ yh so với u Giả sử || ||0 chuẩn H , đương nhiên đòi hỏi || ||h xấp xỉ || || theo nghĩa0 sau: lim || uh ||h || u ||0 h 0 Với vecto u H 1.2 XẤP XỈ SAI PHÂN CÁC TOÁN TỬ VI PHÂN ĐƠN GIẢN Giả sử cho toán tử vi phân L tác động lên hàm v=v(x) Khi nghiên cứu xấp xỉ sai phân toán tử L thường người ta xét cách địa phương tức lân cận điểm X cố định không gian v(x) liên tục xem vh (x) = v(x) Tổng quát: vh Ph v H , v H , Ph : H H h Sau cần chọn khuôn lưới, tức rõ tập nút lân cận với nút x mà giá trị hàm lưới v(x) hệ số khác toán tử L dùng để xấp xỉ toán tử L Thay đạo hàm v đại lượng khác toán tử biểu thức sai phân Lh vh , thay cho toán tử Lv Đó tổ hợp tuyến tính giá trị hàm lưới vk khuôn lưới: Lh vh ( x) Ah ( x, )vh ( ) Ah ( xi , x j )vh (x j ) U h ( xi ) Hoặc: ( Lh vh )i xi U h ( xi ) TDataClass *DataClass; = ""; EdtZCount->Text // EdtXCount->Text = ""; fastcall TDataClass::TDataClass(TComponent* Owner) EdtWg->Text = ""; EdtSigma->Text : TForm(Owner) = ""; { EdtAlpha->Text = ""; } EdtQ->Text = ""; // EdtH->Text = ""; void fastcall TDataClass::RepairDataClick(TObject *Sender) Edteps->Text = ""; } { // Caption = "Sua du lieu"; void fastcall TDataClass::RecoverDataClick(TObject *Sender) EdtHz->Enabled = true; { EdtHx->Enabled = true; EdtHz->Text = Hz; EdtZCount->Enabled = true; EdtHx->Text = Hx; EdtXCount->Enabled = true; EdtZCount->Text = ZCount; EdtWg->Enabled = true; EdtXCount->Text = = true; EdtSigma->Enabled XCount; EdtWg->Text = Wg; EdtAlpha->Enabled = true; EdtSigma->Text Sigma; EdtQ->Enabled ==true; EdtAlpha->Text = Alpha; EdtH->Enabled = true; EdtQ->Text = Q; Edteps->Enabled = true; EdtH->Text = H; EdtHz->SetFocus(); } Edteps->Text = Eps; // Edtfu->Text = fu; void fastcall TDataClass::NewDataClick(TObject *Sender) Edtfd->Text = fd; } { // RepairData->Enabled = false; void fastcall TDataClass::SolveProplemClick(TObject *Sender) RepairDataClick(Sender); { Caption = "Nhap du lieu:"; Hide(); EdtHz->Text = ""; SolutionClass->GiaiHe(); EdtHx->Text = ""; 63 62 Thang Long University Libraty EdtQ->Enabled Visible = true; = false; } EdtH->Enabled = false; // Edteps->Enabled = false; void fastcall TDataClass::CloseDataClick(TObject *Sender) Edtfu->Enabled = false; { Edtfd->Enabled = false; } Application->Terminate(); // -} // /* void fastcall TDataClass::FormCreate(TObject *Sender) { Tệp SolveProplem.h -*/ Hz = EdtHz->Text; // Hx = EdtHx->Text; ZCount = EdtZCount->Text; #ifndefXCount = EdtXCount->Text; SolveProplemH #defineWg = EdtWg->Text; SolveProplemH // Sigma = EdtSigma->Text; #include Alpha = EdtAlpha->Text; #include H = EdtH->Text; #include Q = EdtQ->Text; #include Eps = Edteps->Text; #include fd = Edtfd->Text; // fu = Edtfu->Text; class TSolutionClass : public TForm { EdtHz->Enabled = false; published: EdtHx->Enabled = false; // IDE-managed Components TLabel *Label1; EdtZCount->Enabled = false; TStringGrid *Nghiem; = false; EdtXCount->Enabled TButton *PaintX; = false; EdtWg->Enabled TButton *PaintZ; EdtSigma->Enabled = false; TButton *BackSolution;false; EdtAlpha->Enabled = 65 64 Thang Long University Libraty // TButton *CloseSolution; fastcall TSolutionClass::TSolutionClass(TComponent* Owner) void fastcall PaintXClick(TObject *Sender); void fastcall PaintZClick(TObject *Sender); : TForm(Owner) { void fastcall BackSolutionClick(TObject *Sender); } void fastcall CloseSolutionClick(TObject *Sender); // private: // User declarations void fastcall TSolutionClass::BackSolutionClick(TObject *Sender) public: // User declarations { fastcall TSolutionClass(TComponent* Owner); void GiaiHe() ; DataClass->RepairData->Enabled = true; }; Close(); } // // extern PACKAGE TSolutionClass *SolutionClass; void TSolutionClass::GiaiHe() // { #endif /* MainClass->GiaiHePT(); Nghiem->ColCount = MainClass->XCount+1; Tệp SolveProplem.cpp -*/ Nghiem->RowCount = MainClass->ZCount+1; // String tmp; #include int i,j; #pragma hdrstop Nghiem->Cells[0][0] = " Z \\ X "; for(i=1;iRowCount;i++) #include "SolveProplem.h" Nghiem->Cells[0][i] = DataClass->EdtHz->Text.ToDouble()*(i-1); #include "Data.h" for(j = 1;jColCount;j++) #include "MainUnit.h" Nghiem->Cells[j][0] = DataClass->EdtHx->Text.ToDouble()*(j-1); #include "PaintDensity.h" for(i=1;iColCount;i++) for(j=1;jRowCount;j++) // { #pragma package(smart_init) if(MainClass->GetNghiem(i-1,j-1) > 0.00005){ #pragma resource "*.dfm" tmp.sprintf("%0.4f", MainClass->GetNghiem(i-1, j-1)); TSolutionClass *SolutionClass; SolutionClass->Nghiem->Cells[i][j] = tmp; 67 66 Thang Long University Libraty #define PaintDensityH }else // tmp = 0; #include SolutionClass->Nghiem->Cells[i][j] = tmp; #include } #include ShowModal(); #include MainClass->GiaiPhongBN1(); #include "CGRID.h" } #include void fastcall TSolutionClass::PaintXClick(TObject *Sender) // { class TDensityClass : public TForm DensityClass->Init(true); { } published: // -// IDE-managed Components void fastcall TSolutionClass::PaintZClick(TObject *Sender) TPanel *Panel1; { TLabel *Label8; TComboBox *RowColPaint; DensityClass->Init(false); } TComboBox *PenStyle; // TLabel *Label6; void fastcall TSolutionClass::CloseSolutionClick(TObject *Sender) TLabel *Label5; { TCColorGrid *PenColor; TPanel *Panel2; Application->Terminate(); } TLabel *CaptionDensity; // -TLabel *Label4; TCheckBox *NhieuDuong; TButton *Paint; /* TButton *BackDensity; TButton *CloseDensity; Tệp PaintDensity.h -*/ void fastcall PaintClick(TObject *Sender); // void fastcall BackDensityClick(TObject *Sender); void fastcall FormCreate(TObject *Sender); #ifndef PaintDensityH void fastcall CloseDensityClick(TObject *Sender); 69 68 Thang Long University Libraty #include "PaintDensity.h" void fastcall FormClose(TObject *Sender, TCloseAction &Action); void fastcall FormPaint(TObject *Sender); const TPenStyle PenStyles[] = {psSolid,psDashDotDot,psClear,psInsideFrame}; private: // TPoint goc; #pragma public: package(smart_init) #pragma link "cgrid" bool PaintX,Ve; #pragma link "cgrid" int Cao,Xa,Sodinh; #pragma resource "*.dfm" double DoChiaX,DoChiaY; TDensityClass*ToaDo; TPoint *DensityClass; // fastcall TDensityClass(TComponent* Owner); fastcall TDensityClass::TDensityClass(TComponent* Owner) void VeTruc(); : TForm(Owner) void Init(bool Ve); { void VeMatDo(); } }; // void TDensityClass::VeTruc() extern PACKAGE TDensityClass *DensityClass; { // #endif Canvas->Pen->Style = psSolid; Canvas->Pen->Width = 2; /* Canvas->Pen->Color = clBlack; Tệp PaintDensity.cpp -*/ Canvas->MoveTo(goc.x,goc.y); // Canvas->LineTo(goc.x,goc.y-Cao); #include Canvas->MoveTo(goc.x,goc.y); #pragma hdrstop Canvas->LineTo(goc.x + Xa,goc.y); #include "MainUnit.h" Canvas->MoveTo(goc.x,goc.y - Cao); #include "Data.h" Canvas->LineTo(goc.x - 3,goc.y - Cao + 3); #include "SolveProplem.h" 71 70 Thang Long University Libraty int i,n = RowColPaint->ItemIndex; Canvas->MoveTo(goc.x,goc.y - Cao); for(i=0;iLineTo(goc.x + 3,goc.y - Cao + 3); { Canvas->MoveTo(goc.x +Xa,goc.y); ToaDo[i].x = goc.x + i*DoChiaX; Canvas->LineTo(goc.x + Xa - 3,goc.y + 3); if(PaintX) ToaDo[i].y = goc.y-MainClass->GetNghiem(i,n)*DoChiaY; Canvas->MoveTo(goc.x + Xa,goc.y); else Canvas->LineTo(goc.x + Xa - 3,goc.y - 3); ToaDo[i].y = goc.y-MainClass->GetNghiem(n,i)*DoChiaY; } if(NhieuDuong->Checked) Canvas->Pen->Width = 1; Canvas->TextOut(goc.x+5,goc.y - Cao - 7, Label4->Caption); VeMatDo(); else int Giatrikhoang = MainClass->GetNghiem(0,MainClass->K)/10; Invalidate(); } for(int i = 1; iMoveTo(goc.x - 4,goc.y - *Sender,TCloseAction &Action) Canvas->LineTo(goc.x + 4,goc.y - i*Giatrikhoang*DoChiaY); { Canvas->TextOut(goc.x-40,goc.y - i*Giatrikhoang*DoChiaY- 7,i*Giatrikhoang); delete ToaDo; } } // -} void TDensityClass::Init(bool Ve) // { void _fastcall TDensityClass::FormPaint(TObject *Sender) { if(Ve) VeTruc(); { VeMatDo(); Caption = CaptionDensity->Caption + " x:"; } Label8->Caption = "Chon gia tri z:"; // PaintX=true; void fastcallSodinh = MainClass->XCount; TDensityClass::PaintClick(TObject *Sender) { ToaDo = new TPoint[Sodinh]; 73 72 Thang Long University Libraty { for(int i = 0;i < MainClass->ZCount;i++) Canvas->Pen->Color = clBlack; RowColPaint->Items->Add(i*MainClass->Hz); }else Canvas->MoveTo(goc.x+2*i*DoChiaX,goc.y - 4); { Canvas->LineTo(goc.x+2*i*DoChiaX,goc.y + 4); Canvas->TextOut(goc.x+2*i*DoChiaX-5,goc.y+10,2*i); Caption = CaptionDensity->Caption + " z:"; } Label8->Caption = "Chon gia tri x:"; if(PaintX) PaintX=false; Canvas->TextOut(goc.x+Xa,goc.y+10,"x=i*"+DataClass->EdtHxSodinh = MainClass->ZCount; >Text); else for(int i = 0;i < MainClass->XCount;i++) RowColPaint->Items->Add(i*(MainClass->Hx)); Canvas->TextOut(goc.x+Xa,goc.y+10,"z=i*"+DataClass->EdtHzToaDo = new TPoint[Sodinh]; >Text);} } DoChiaX=(Xa - 5)/Sodinh; DoChiaY=(Cao - 5)/MainClass->GetNghiem(0,MainClass->K); // -RowColPaint->ItemIndex = 0; void fastcall TDensityClass::BackDensityClick(TObject *Sender) NhieuDuong->Checked = false; { SolutionClass->Hide(); RowColPaint->Items->Clear(); Invalidate(); Close(); ShowModal(); } SolutionClass->Visible = true; // } // -void TDensityClass::VeMatDo() fastcall TDensityClass::FormCreate(TObject *Sender) { goc.x = 50; Canvas->Pen->Style = PenStyles[PenStyle->ItemIndex]; goc.y = Panel2->Top 30; Canvas->Pen->Width-= 1; Cao = goc.y - Panel1->Top - Panel1->Height - 20; Canvas->Pen->Color = PenColor->ForegroundColor; Xa = DensityClass->Width - 100; PenStyle->ItemIndex = 0; Canvas->Polyline(ToaDo,Sodinh-1); } for(int i = 1;iTerminate(); } // - 76