매트랩을 이용한 미분방정식 풀이.docx




매트랩 Matlab 프로그램을 이용한 미분방정식 풀이


매트랩 Matlab의 diff() 함수와 dsolve() 함수를 이용하여 미분방정식을 푼다.


환경:   OS – Windows 7 Ultimate K SP1 64bit

MATLAB – R2016a (9.0.0341360) 64-bit


예시: 매트랩 Matlab의 명령창 Command Window에서 dsolve() 함수를 아래와 같이 사용할 수 있다.


설명: 매트랩의 미분방정식을 푸는 함수인 dsolve() 함수는 아래와 같이 사용된다.

dsolve(f)

dsolve(f, x)

dsolve(f, cond1, cond2)

즉, dsolve() 함수의 인자로 반드시 미분방정식 하나를 입력해야 하고, 필요에 따라서 독립변수 또는 초기값 조건과 경계값 조건을 입력한다. dsovle() 함수로 풀이할 미분방정식과 초기 및 경계 조건의 종속 및 독립변수는 반드시 심볼릭 함수 Symbolic functions과 심볼릭 변수 Symbolic variables로 구성되어 있어야 한다. 이때 독립변수와 초기, 경계 조건은 같이 사용할 수 없는데, 독립변수 인자는 입력하지 않아도 되므로 이후의 설명에서는 생략한다. 정리하면 dsolve() 함수는 다음과 같은 형식으로 사용된다.

dsolve([미분방정식:심볼릭 변수/함수], {초기/경계 조건}, {초기/경계 조건}, …, {초기/경계 조건})

[인자] 대괄호 안의 심볼릭 변수와 함수로 이루어진 미분방정식은 반드시 입력되어야 하지만, {인자} 중괄호 안의 인자는 초기값 조건 또는 경계값 조건에 대한 식으로 미분방정식에 따라 입력한다. 초기/경계 조건이 없으면 풀이된 미분방정식의 해에는 상수가 포함되어 나타나게 된다.


초기/경계 조건없이 dsolve() 함수를 이용하여 미분방정식을 풀면 위와 같이 미분방정식의 해는 적분상수를 포함하고 있다. 적분상수는 C14, C24, C25 등등 대문자 C와 숫자로 표현되며, 매트랩 프로그램에서 자동으로 할당하므로 과정에 따라 적분상수 이름의 숫자는 매번 바뀐다. 다음과 같이 초기/경계 조건이 주어질 경우 미분방정식의 해는 다음과 같이 출력된다.


미분방정식은 위와 같이 도함수를 다른 변수에 할당하고 미분방정식을 만들거나 diff() 함수 자체를 포함한 미분방정식을 변수에 할당 또는 dsolve() 함수에 바로 사용할 수 있다. 초기/경계 조건의 경우, 심볼릭 함수를 이용하여 값을 입력하여 사용하거나 subs() 함수를 이용하여 독립변수에 값을 할당하여 초기/경계 조건을 설정할 수 있다. 위와 같은 방법들로 dsolve() 함수를 사용하여 미분방정식을 풀 수 있지만, 복잡한 수식이나 고계 미분방정식에서는 변수와 함수 사용이 복잡하다. 이때 dsolve() 함수에는 다음과 같이 미분방정식 및 초기/경계 조건을 사용할 수 있다.


위와 같이 미분방정식 및 초기/경계 조건을 문자열로 할당하고 도함수는 문자열 D를 이용하여 표현한다. 즉, 함수 y의 도함수는 Dy, 2계 도함수는 D2y, 3계 도함수는 D3y 등으로 표현되며 반드시 문자열 내에서만 사용가능하다. 위와 같은 방법은 개인적으로 미분방정식 풀이 사용에 더 편하다고 생각되어 이후의 내용에는 문자열로 표현하여 풀이한다. 단, 위와 같이 문자열을 이용하여 미분방정식을 풀 때 심볼릭 변수 사용에 주의해야 한다.


문자열로 미분방정식을 표현하여 미분방정식을 풀이할 때 독립변수는 이전의 어떠한 변수 선언과 상관없이 t로 선언되므로 이에 주의하며, 종속변수를 따로 설정하지 않아도 D 문자 뒤의 문자를 종속변수로 자동 인식한다. 하지만 위와 같이 심볼릭 변수를 사용하지 않고 미분방정식을 풀 경우 아래와 같이 모든 문자가 변수로 인식되지 않으므로 해 함수에 대입, subs() 함수를 이용한 대입을 사용할 수 없다.


즉, 아래와 같이 필요한 심볼릭 변수를 선언하여 값을 대입할 수 있도록 한다.


요약: 미분방정식 풀이에 사용될 변수와 함수는 모두 심볼릭 변수와 심볼릭 함수로 미리 선언하여 후에 상수를 대입할 수 있도록 하며, 문자열을 이용하여 미분방정식과 초기/경계 조건 식을 나타낸다. 문자열로 수식을 표현할 때, 미분식은 [D 문자 + n 계수 + 종속변수]를 이용하여 나타내고, 독립변수는 t로 자동 할당되므로 이에 유의하여 심볼릭 변수를 선언한다.

Posted by 귀여운촌아
:

매트랩을 이용한 적분.docx




매트랩 Matlab 프로그램을 이용한 적분


매트랩 Matlab의 int() 함수를 이용하여 주어진 식을 적분한다.


환경:   OS – Windows 7 Ultimate K SP1 64bit

MATLAB – R2016a (9.0.0341360) 64-bit


예시: 매트랩 Matlab의 명령창 Command Window에서 int() 함수를 아래와 같이 사용할 수 있다.


설명: 매트랩의 int() 함수는 아래와 같이 사용되며,

int(f)

int(f, x)

int(f, x, a, b)

int() 함수는 반드시 하나의 함수식을 입력해야 하고, 필요에 따라서 적분 변수와 적분 구간을 정할 수 있다. int() 함수에 사용할 함수식과 변수는 반드시 심볼릭 함수 Symbolic functions과 심볼릭 변수 Symbolic variables여야 한다. 즉, int() 함수는 다음과 같은 형식으로 사용된다.

int([함수식:심볼릭 변수/함수], {적분변수:심볼릭 변수}, {하한, 상한})

[인자] 대괄호 안의 인자는 반드시 입력되어야 하지만, {인자} 중괄호 안의 인자는 필요에 따라 사용 및 생략이 가능하다. 즉, int() 함수에 함수식만 입력할 경우 매트랩에서 자동으로 독립변수를 선택하여 부정적분하며 하한과 상한을 입력하면 정적분한다.

int(f) – 부정적분

int(f, x) – 부정적분

int(f, a, b) – 정적분

int(f, x, a, b) – 정적분


위와 같이 int() 함수에 적분 구간의 인자가 주어지지 않으면 주어진 식을 부정적분 할 수 있다. 단, int() 함수를 이용한 부정적분의 결과에는 적분 상수가 없으므로 이에 주의해야 한다.


정적분의 경우 임의의 구간과 주어진 구간에 대해 모두 정적분이 가능하다.


추가: 매트랩에서 사용하는 int() 함수의 다른 사용방법과 또 다른 정적분 함수인 integral()에 대한 자세한 내용은 매트랩 Matlab의 도움말이나 공식 홈페이지의 문서를 참고하기 바랍니다.

Posted by 귀여운촌아
:

매트랩을 이용한 미분.docx




매트랩 Matlab 프로그램을 이용한 미분


매트랩 Matlab의 미분 함수 diff()를 이용하여 주어진 식을 미분한다.


환경:   OS – Windows 7 Ultimate K SP1 64bit

MATLAB – R2016a (9.0.0341360) 64-bit


예시: 매트랩 Matlab의 명령창 Command Window에서 diff() 함수를 아래와 같이 사용할 수 있다.


설명: 매트랩의 diff() 함수는 아래와 같이 사용된다.

diff(f)

diff(f, x)

diff(f, x1, x2, …)

diff(f, x, n)

diff(diff(diff(diff(f), x1), x2), n)

위의 내용을 정리하면 diff() 함수의 인자는 반드시 함수식 하나를 입력 해야하고, 필요에 따라서 미분할 독립변수와 계수를 입력할 수 있다. diff() 함수에 사용할 함수식과 변수는 반드시 심볼릭 함수 Symbolic functions과 심볼릭 변수 Symbolic variables여야 한다. 또한 계수는 미분 계수이므로 반드시 0 이상의 자연수이다. diff() 함수는 위와 같이 중복 및 복합되어 사용할 수도 있다. 즉, diff() 함수는 다음과 같은 형식으로 사용된다.

diff([함수식:심볼릭 변수/함수], {독립변수:심볼릭 변수}, … , {계수:자연수}, …)

[인자] 대괄호 안의 인자는 반드시 입력되어야 하지만, {인자} 중괄호 안의 인자는 필요에 따라 사용 및 생략이 가능하다. 즉, diff() 함수에 함수식만 입력할 경우 매트랩에서 자동으로 독립변수를 선택하여 한번 미분 또는 편미분한다. 2계 미분 이상의 고계 미분은 아래와 같이 diff() 함수를 여러 번 사용하거나 추가 인자를 이용하여 아래와 같이 사용할 수 있다.

diff(diff(diff(f))) – 3계 미분

diff(diff(diff(f, x), x), x) – 3계 미분

diff(f, x, 3) – 3계 미분

diff(diff(f, x), 2) – 3계 미분

diff(diff(diff(f, x), 1)) – 3계 미분


diff() 함수로 미분하는 함수식은 아래와 같이 심볼릭 변수로 이루어진 식 또는 등식이거나


(매트랩에서 = 기호는 대입 연산자이므로 등식에서는 ‘같다’라는 의미의 == 기호를 사용해야한다.)

심볼릭 함수 Symbolic functions로 선언된 변수이여야 하므로 다음과 같이 사용할 수도 있다.


또한 상수 대신 심볼릭 변수를 이용한 미지 함수를 미분하거나


미지의 함수 자체를 diff() 함수를 이용하여 아래와 같이 미분 가능하다.


미지의 함수의 경우 위와 같이 미분 자체로 표현되며 이를 이용하여 미분방정식을 세울 수 있다. 예를 들어 다음의 2계 선형 상미분방정식의 경우 아래와 같이 매트랩에서 표현할 수 있다.



추가: diff() 함수의 다른 기능인 값의 차이를 구하는 부분은 설명을 생략하며, 이 부분에 대한 자세한 내용은 매트랩 Matlab의 도움말이나 공식 홈페이지의 문서를 참고하기 바랍니다.

Posted by 귀여운촌아
:


propertyGrant.txt




이번 npc는 비교적 간단한 무기 속성 부여 npc 입니다.

Hercules 및 rAthena 에뮬레이터에서 스크립트 실행 구문 오류만 테스트 했습니다.

오류가 있을 수 있으며 다른 곳에서 사용을 삼가주시기 바랍니다.


가격 설정과 지속 시간 설정을 할 수 있으며

적용되는 효과의 이펙트를 추가하였습니다.


다른 곳에서의 배포는 삼가주시기 바라며

오류 및 개선점을 비롯한 여러 의견은 이 글의 댓글로 알려주시면 감사하겠습니다.

이 스크립트의 수정 사항은 이 글의 아래에 추가하도록 하겠습니다.




Posted by 귀여운촌아
:


tempBuff2.txt



이 전 글의 버프 npc보다는 조금은 합리적인 npc 입니다.

파티, 길드, 가족 등의 조건을 포함하여 다른 플레이어에게 버프 효과를 줄 수 있는

버프 스킬만 골라냈고, 개인적인 기준으로 등급을 나누어 가격을 지불하고

버프 효과를 받을 수 있도록 하였습니다.


등급은 S, A, B, C, D로 buffGrade 배열에 5, 4, 3, 2, 1로 설정하였습니다.

즉, S 등급은 5로 A 등급 스킬들은 4로... 설정하였습니다.


또한 높은 등급은 낮은 등급의 스킬을 포함하여 적용하도록 하였습니다.


파티, 길드, 가족 등의 조건에서 다른 플레이어에게 적용할 수 있는 스킬이므로

직업에 따라 잘 적용될 수 있을 것으로 생각되며, 다른 이펙트 효과는 설정하지 않았습니다.

차후에 적용해 보도록 하겠습니다.


npc 추가 방법은 이전 글을 참고하여 추가하시면 됩니다.


추가할 점이나 잘못된 점, 오류 등은 댓글로 알려주시고 반드시 Athena의 스크립트만 다뤄주십시오.

-업로드 되어있는 파일은 직접 만든 것이니 다른 곳에 배포는 하지 말아주세요-


'기타 > Athena' 카테고리의 다른 글

여러 아이템 버프 효과 npc  (0) 2015.07.25
버프 아이템 상점 npc  (0) 2015.07.22
8. Athena의 npc 추가와 설정  (2) 2015.06.09
7. 그 외의. etc  (20) 2015.04.02
6. 서버 주요 설정하기. (Configurations)  (36) 2014.05.18
Posted by 귀여운촌아
: