밑에 계산 부분은 신경쓰지 마세요, 어떤 수학 공식을 베낀거예요... 전체 구성좀 봐주시면 감사드립니다....
밑에 에러 부분나는 부분하고 case 정의 부분(메인으로 다시 돌아오게 되있나요?)을 집중적으로 봐주시면 감사... (생략부분엔 에러요인 없다고 생각... 식이라서)
Dim a, b, c, d, e, f, g, h, o, p, q, r, s, t, u, v, w, x, y, z
------------------------------------------------------------------------------
Private Sub Command1_Click()
....DIm ap(16) As Double 등의 변수랑 배열 지정부분생략(m은 밑에 있습니다)....
Dim m(15) As Double
Dim y(26) As Double
Dim dy(26) As Double
Dim er(26) As Double
Open "c:\My Documents\traj.out" For Output As #1
delt = Val(delt.Text)
tstop = Val(tstop.Text)
For i = 1 To 26
y(i) = 0#
dy(i) = 0#
Next
t = 0#
y(1) = 1#
y(2) = 2#
n = 2
Write #1, t; y(1); y(2)
Call gnum(n, t, delt, y, dy, er, 1) --> 인덱스 1번 끝난 후 다시 돌아와
Call gnum(n, t, delt, y, dy, er, 2) 인덱스 2번에 해당하는 부분 실행하게
1111: 되어 있나요?
Call gnum(n, t, delt, y, dy, er, 3)
Write #1, t; y(1); y(2)
If (t < tstop) Then GoSub 1111
Stop
End Sub
-------------------------------------------------------------------------------
Public Function gnum(n, t, delt, y() As Double, dy() As Double, er() As Double, index)
....DIm ap(16) As Double 등의 변수랑 배열 지정부분생략(m은 밑에 있습니다)....
Dim sumy(24) As Double
Dim sumdy(24) As Double
Dim ty(26) As Double
Dim m(15) As Double
Select Case index
Case index = 1 ' index값이 1일 때 이부분 실행
kd = 1
kstart = 4
kstep = 4
..... ap(1) ~ ratio 등을 지정한 부분입니다.(단순한 숫자임. 생략) .........
For j = 1 To kstep ' j의 값을 배열 m에 입력(m(1)~m(4)=1~4)?
m(j) = j
Next
Return
Case index = 2 ' 1실행 후 index값이 2일 때 실행
kount = 1
rkd = kd
deltt = delt / rkd
Call eom(t, y, dy) ' eom에 t,y,dy를 인수로 사용해 계산 ?
' eom후에 y(2),dy(1),dy(2)값이 결정됨
m1 = m(1) ' 배열 m(1) 값을 m1으로 지정
For i = 1 To n ' m1과 i를 이용한 새로운 배열 만듬(n=2)
yy(i, m1) = y(i)
dyy(i, m1) = dy(i)
Next
Return
Case index = 3
If (kount < kstart) Then GoSub 4444 ' 3번까지만 4444로 그다음 밑으로
End Select
For i = 1 To n
sumy(i) = 0#
sumdy(i) = 0#
For j = 1 To kstep
mj = m(j)
sumy(i) = sumy(i) - ap(j + 1) * yy(i, mj)
sumdy(i) = sumdy(i) + bp(j + 1) * dyy(i, mj)
Next
ty(i) = sumy(i) + delt * sumdy(i)
Next
Call eom(t + delt, ty, dy)
For i = 1 To n
......... 이 부분 내용 생략합니다. 너무 길어지는 듯해서.....
Next
Call eom(t + delt, y, dy)
6666:
mkstep = m(kstep)
j = kstep ' 이것도 empty라고 뜨네요...
3019:
If j < 2 Then GoSub 3010
m(j) = m(j - 1) -> ' 에러나는 부분 : 첨자사용이 잘못되었습니다. '
j = j - 1 j값이 empty라고 뜨던데요... 위에 kstep도 마찬가지구요
GoSub 3019
3010:
m(1) = mkstep
m1 = m(1)
For i = 1 To n
yy(i, m1) = y(i)
dyy(i, m1) = dy(i)
Next
t = t + delt
Return
4444:
tt = t ' t값을 t에 대입
For j = 1 To kd
............ sumdy에 관한 2중 for 구문인데 생략합니다........
Next
kount = kount + 1
GoSub 6666
End Function
.............. 밑부분 eom 정의 부분은 생략 ............
여기 너무 매달립니다... 도움 좀 주세요, 울고 싶습니다. 왜 에러가 나는지...
참고로 미분을 하여 근사값을 출력하는 프로그램입니다(딴 프로그램 바꾼것임)
그런데 위 소스에서도 보듯이 에러부분 바로 위에 kstep라고 지정되어 있고 case1 부분에서 분명 kstep를 4라고 지정했자나요... 그런데 왜 값자기 kstep값이 epmty로 되는지 이해간 안가용~ ㅜㅜ case1을 실행을 안하는 건가요? 왜? WAY? 으...
첫댓글 j 값이 들어가는 부분을 확인하세요, j값이 없기때문에 0으로 계산하여 -1의 배열을 찾기 때문에 발생되는 에러 입니다.
그런데 위 소스에서도 보듯이 에러부분 바로 위에 kstep라고 지정되어 있고 case1 부분에서 분명 kstep를 4라고 지정했자나요... 그런데 왜 값자기 kstep값이 epmty로 되는지 이해간 안가용~ ㅜㅜ case1을 실행을 안하는 건가요? 왜? WAY? 으...
전엔 안그랬는데, 몇개 수정하니깐 kstep=4 이렇게 지정한 부분 kstep값도 이상하게 Empty값으로 뜨네요... 어떻게 4라고 지정을 했는데도 Empty값으로 뜨죠? 말이 안돼... 수정할수록 더 망가져가는 거 같다...ㅜㅜ
kstart가 ... 생략... 이당!!
오류가 발생해서 못찾으면 소스를 자료실에 등록하신던가?? 아님, 함수를 샹략하지 말구 올려 줘야 봐줄꺼아니에요. 보니까 kstart가 어디에 선언된지도 안나오는데.. 어디에 오류가 났는지 찾아 달라는 겁니까???
윽... 중간 부분에 kstart = 4라고 정의 되있는데요...ㅜㅜ. 자료실에 소스 올렸습니다. 지송함다. 부탁드릴께요