![]() |
||
|
Major Member
![]() 加入日期: Dec 2004
文章: 224
|
執行會出現錯誤
== 第一部分.宣告 == '---設定Visual Basic選項--- Option Explicit '---針對節點開一個11x11的矩陣--- Dim M(1 To 11, 1 To 11) As Double Dim i As Integer, j As Integer '---宣告區段到此結束.以下是執行程序--- ' == 第二部分.初始假設 == '---假定矩陣各元素之初始值(由0開始)--- Private Sub Command1_Click() M(1, 1) = 0: M(1, 2) = 0: M(1, 3) = 0: M(1, 4) = 0: M(1, 5) = 0: M(1, 6) = 0: M(1, 7) = 0: M(1, 8) = 0: M(1, 9) = 0: M(1, 10) = 0: M(1, 11) = 0 M(2, 1) = 0: M(2, 2) = 0: M(2, 3) = 0: M(2, 4) = 0: M(2, 5) = 0: M(2, 6) = 0: M(2, 7) = 0: M(2, 8) = 0: M(2, 9) = 0: M(2, 10) = 0: M(2, 11) = 0 M(3, 1) = 0: M(3, 2) = 0: M(3, 3) = 0: M(3, 4) = 0: M(3, 5) = 0: M(3, 6) = 0: M(3, 7) = 0: M(3, 8) = 0: M(3, 9) = 0: M(3, 10) = 0: M(3, 11) = 0 M(4, 1) = 0: M(4, 2) = 0: M(4, 3) = 0: M(4, 4) = 0: M(4, 5) = 0: M(4, 6) = 0: M(4, 7) = 0: M(4, 8) = 0: M(4, 9) = 0: M(4, 10) = 0: M(4, 11) = 0 M(5, 1) = 0: M(5, 2) = 0: M(5, 3) = 0: M(5, 4) = 0: M(5, 5) = 0: M(5, 6) = 0: M(5, 7) = 0: M(5, 8) = 0: M(5, 9) = 0: M(5, 10) = 0: M(5, 11) = 0 M(6, 1) = 0: M(6, 2) = 0: M(6, 3) = 0: M(6, 4) = 0: M(6, 5) = 0: M(6, 6) = 0: M(6, 7) = 0: M(6, 8) = 0: M(6, 9) = 0: M(6, 10) = 0: M(6, 11) = 0 M(7, 1) = 0: M(7, 2) = 0: M(7, 3) = 0: M(7, 4) = 0: M(7, 5) = 0: M(7, 6) = 0: M(7, 7) = 0: M(7, 8) = 0: M(7, 9) = 0: M(7, 10) = 0: M(7, 11) = 0 M(8, 1) = 0: M(8, 2) = 0: M(8, 3) = 0: M(8, 4) = 0: M(8, 5) = 0: M(8, 6) = 0: M(8, 7) = 0: M(8, 8) = 0: M(8, 9) = 0: M(8, 10) = 0: M(8, 11) = 0 M(9, 1) = 0: M(9, 2) = 0: M(9, 3) = 0: M(9, 4) = 0: M(9, 5) = 0: M(9, 6) = 0: M(9, 7) = 0: M(9, 8) = 0: M(9, 9) = 0: M(9, 10) = 0: M(9, 11) = 0 M(10, 1) = 0: M(10, 2) = 0: M(10, 3) = 0: M(10, 4) = 0: M(10, 5) = 0: M(10, 6) = 0: M(10, 7) = 0: M(10, 8) = 0: M(10, 9) = 0: M(10, 10) = 0: M(10, 11) = 0 M(11, 1) = 0: M(11, 2) = 0: M(11, 3) = 0: M(11, 4) = 0: M(11, 5) = 0: M(11, 6) = 0: M(11, 7) = 0: M(11, 8) = 0: M(11, 9) = 0: M(11, 10) = 0: M(11, 11) = 0 '------------------------------------------------------------------------------------------------------------------------------------------------------------ ' == 第三部分.運算部分 == '---1.計算邊界數值--- If 1 <= i <= 11 And j = 1 Then M(i, j) = 0 + i * (30 / 10) End If If 1 <= i <= 11 And j = 11 Then M(i, j) = 50 + i * (50 / 10) End If If 2 <= j <= 10 And i = 1 Then M(i, j) = 0 + j * (50 / 10) End If If 2 <= j <= 10 And i = 11 Then M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4 End If '---2.計算內部數值(每個點之值=鄰近四點和/4)--- If 2 <= i <= 10 And 2 <= j <= 10 Then M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 End If '----------------------------------------------------------------------------------------------------------------------------------------------------------- ' == 第四部分.迴圈結構 == '---Do Loop 由猜值推估修正到正確值--- Dim O As Double Dim N As Double Do If 2 <= i <= 10 And 2 <= j <= 10 Then M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 M(6, 6) = O End If If 2 <= j <= 10 And i = 11 Then M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4 End If If 2 <= i <= 10 And 2 <= j <= 10 Then M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 M(6, 6) = N End If If 2 <= j <= 10 And i = 11 Then M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4 End If Loop Until (O / N) <= 10 ^ (-5) '---如果(舊值/新值)<10^(-5),則離開迴圈--- '-------------------------------------------------------------------------------------------------------------------------------------------------- ' == 第五部分.結果輸出 == '---將此問題的結果輸出(檔案名"solution")--- Open "solution" For Output As #1 Print #1, M(i, j) End Sub |
|||||||
|
|
|
Regular Member
![]() ![]() 加入日期: Sep 2001
文章: 51
|
代碼:
---假定矩陣各元素之初始值(由0開始)--- Private Sub Command1_Click() M(1, 1) = 0: M(1, 2) = 0: M(1, 3) = 0: M(1, 4) = 0: M(1, 5) = 0: M(1, 6) = 0: M(1, 7) = 0: M(1, 8) = 0: M(1, 9) = 0: M(1, 10) = 0: M(1, 11) = 0 M(2, 1) = 0: M(2, 2) = 0: M(2, 3) = 0: M(2, 4) = 0: M(2, 5) = 0: M(2, 6) = 0: M(2, 7) = 0: M(2, 8) = 0: M(2, 9) = 0: M(2, 10) = 0: M(2, 11) = 0 M(3, 1) = 0: M(3, 2) = 0: M(3, 3) = 0: M(3, 4) = 0: M(3, 5) = 0: M(3, 6) = 0: M(3, 7) = 0: M(3, 8) = 0: M(3, 9) = 0: M(3, 10) = 0: M(3, 11) = 0 M(4, 1) = 0: M(4, 2) = 0: M(4, 3) = 0: M(4, 4) = 0: M(4, 5) = 0: M(4, 6) = 0: M(4, 7) = 0: M(4, 8) = 0: M(4, 9) = 0: M(4, 10) = 0: M(4, 11) = 0 M(5, 1) = 0: M(5, 2) = 0: M(5, 3) = 0: M(5, 4) = 0: M(5, 5) = 0: M(5, 6) = 0: M(5, 7) = 0: M(5, 8) = 0: M(5, 9) = 0: M(5, 10) = 0: M(5, 11) = 0 M(6, 1) = 0: M(6, 2) = 0: M(6, 3) = 0: M(6, 4) = 0: M(6, 5) = 0: M(6, 6) = 0: M(6, 7) = 0: M(6, 8) = 0: M(6, 9) = 0: M(6, 10) = 0: M(6, 11) = 0 M(7, 1) = 0: M(7, 2) = 0: M(7, 3) = 0: M(7, 4) = 0: M(7, 5) = 0: M(7, 6) = 0: M(7, 7) = 0: M(7, 8) = 0: M(7, 9) = 0: M(7, 10) = 0: M(7, 11) = 0 M(8, 1) = 0: M(8, 2) = 0: M(8, 3) = 0: M(8, 4) = 0: M(8, 5) = 0: M(8, 6) = 0: M(8, 7) = 0: M(8, 8) = 0: M(8, 9) = 0: M(8, 10) = 0: M(8, 11) = 0 M(9, 1) = 0: M(9, 2) = 0: M(9, 3) = 0: M(9, 4) = 0: M(9, 5) = 0: M(9, 6) = 0: M(9, 7) = 0: M(9, 8) = 0: M(9, 9) = 0: M(9, 10) = 0: M(9, 11) = 0 M(10, 1) = 0: M(10, 2) = 0: M(10, 3) = 0: M(10, 4) = 0: M(10, 5) = 0: M(10, 6) = 0: M(10, 7) = 0: M(10, 8) = 0: M(10, 9) = 0: M(10, 10) = 0: M(10, 11) = 0 M(11, 1) = 0: M(11, 2) = 0: M(11, 3) = 0: M(11, 4) = 0: M(11, 5) = 0: M(11, 6) = 0: M(11, 7) = 0: M(11, 8) = 0: M(11, 9) = 0: M(11, 10) = 0: M(11, 11) = 0 '------------------------------------------------------------------------------------------------------------------------------------------------------------ 這一段改成 代碼:
For i = 1 To 11
For j = 1 To 11
M(i, j) = 0
Next j, i
會比較方便 第三部份之後 如果是照原先的方式--->i=0,j=0 這樣會產生錯誤. 在第四部份 給N一個初值吧.不然也會出現錯誤. 應該是這樣. |
||
|
|
|
Major Member
![]() 加入日期: Dec 2004
文章: 224
|
請問 還要如何修改
因為還是會出現錯誤 錯誤訊息是 執行階段錯誤 '9' 陣列索引超出範圍 偵錯後說 M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 有問題 thx |
|
|
|
Major Member
![]() 加入日期: Dec 2004
文章: 224
|
此外,第四部分的地方
If 2 <= i <= 10 And 2 <= j <= 10 Then M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 M(6, 6) = O End If ------ If 2 <= j <= 10 And i = 11 Then M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4 End If ------ If 2 <= i <= 10 And 2 <= j <= 10 Then M(i, j) = (M(i + 1, j) + M(i - 1, j) + M(i, j + 1) + M(i, j - 1)) / 4 M(6, 6) =N End If ------ If 2 <= j <= 10 And i = 11 Then M(i, j) = (2 * M(i - 1, j) + M(i, j - 1) + M(i, j + 1)) / 4 End If 我的意思是我原先給定的初始假設值由零開始(第二部分的地方),而在第四部分作迴圈的時候,因為本題外部的右邊界值會影響到內部數值,因此我規劃的流程是: 1.算一次內部值 2.算一次右邊界值 3.再算一次內部值 4.再算一次右邊界值 而為了定出跳出迴圈的條件,我設定了"如果(舊值/新值)<10^(-5),則離開迴圈"的條件.其中我任選擇矩陣中的某一數值作為判斷數值,因此,程式裡面寫到的M(6, 6) = O與M(6, 6) = N,是分別代表內部值的新值(N)與舊值(O)...因為看您的回答,感覺似乎認為M(6, 6) = O是指數值等於零.所以提出這個回應! 不過因為我是第一次撰寫VB,所以有很多地方仍然不太了解,如果我說的部分有需要修正的,還麻煩您幫忙修正.非常謝謝幫忙! 此文章於 2005-01-07 03:35 AM 被 someone_love 編輯. |
|
|
|
Major Member
![]() 加入日期: Dec 2004
文章: 224
|
有人知道嗎 |
|
|