ID:
PW:

     0 분
     7 분


무료 수학프로그램. SMath 강좌.


손으로 쓴 것처럼 표현하고 계산하는 프로그램.
프로그램 사이트 : http://en.smath.info


[SMath] Symbolic, Solve기능+VBA
이석종  2021-03-30 21:24:27, 조회 : 754, 추천 : 48
- Download #1 : djdg_pm_a.sm (78.1 KB), Download : 13
- Download #2 : DJDGxls.xlsm (89.6 KB), Download : 18

축력부재의 a값 구하기


이 게시물은 smath 게시판에 올려야 하는지 엔지니어링 소셜코딩 게시판에 올려야 하는 지 고민했는데 양쪽에 다 올리기로 했다. ^^



얼마전 직원이 일을 하면서 엑셀의 목표값 찾기를 한다는 말을 들었다. 목표값 찾기가 편하고 좋은데 ‘엔지니어는 방정식을 바로 풀면 되는데 왜 목표값 찾기를 하지?’라는 생각이 들었다.



그래서 엑셀파일을 달라고 해서 봤다.

a를 구하는 공식에도 Pn이 있고 Pn을 구하는 공식에도 a가 있다. 그래서 a를 가정한 후 Pn을 이용해서 구한 a값이 가정한 a값이 나오도록 a값을 목표값 찾기를 한 것이다.





물론 책을 찾아보면 다른 방법으로 Pn을 구하는 방법이 있을 것 같기는 하지만 일단 수학 프로그램인 Smath의 기능을 이용해보기로 했다.



Smath에는 해를 구해주는 solve기능도 있고, symbolic연산이 가능하다. symbolic연산이란 것은 숫자로 계산하는 것이 아니라 symbol로 계산을 한다는 것이다.



그래서 일단 Excel의 pn과 a의 수식을 찾아서 손으로 써봤다.



 



이걸 Smath로 입력한다.



Smath는 손으로 쓴 수식처럼 읽기가 좋다. 눈에 잘 들어온다.

Pn은 a로 a는 Pn으로 표현되어있다. 그냥 한쪽으로 대입하면 쉽게 풀릴 것이지만 수식이 복잡해서 귀찮다. 그래서 Smath의 도움을 받으려는 것이다.

이렇게 두개의 수식을 정의한 다음 a → 를 누르면  a식에 pn을 대입한 결과를 보여준다.



이때 주의할 것은 =을 누르면 안된다는 것이다. → 와 =은 둘다 결과를 보여주라는 뜻이지만 =은 숫자 결과를 보여주라는 것이고 → symbolic결과를 보여달라는 것이다. 그래서 → 를 누른 것이다.

pn → 이렇게 해도 된다. a와 pn 둘다 해봤는데 pn의 결과가 훨씬 길었다. pn식에는 a가 여러군데 출현하기 때문일 것이다.

Smath symbolic 연산은 아래의 문서에 설명이 되어있다.

https://en.smath.com/wiki/GetFile.aspx?File=Symbolic%20mathematic%2Fsymbolic.pdf

자 이제 a로 표현이 되었으니 a를 구하면 된다.

지금까지는 symbolic 연산이었지만 해를 구하기 위해서 각 기호에 값을 대입해준다.



주어진 조건이다.

그런다음 함수를 만든다. a = ~ 이석의 a를 우변으로 넘겨서 a의 함수로 만들면 a에 관한 2차 방정식이 된다.

뭔가 방법이 있을 것 같은데 못 찾았다. f(a):= 을 입력하고 그대로 타이핑 해준다.



이제 solve 기능을 쓸 차례다.



사용법은 간단하다. 단지 범위를 주는 것이 필요하다. 즉 0~ 608의 범위에서 해를 찾으라는 뜻다. 이런 경우 a값이 d값을 넘을 수 없으므로 608을 입력해준다. d로 입력해도 된다.

해가 바로 나왔다. 128.855다.

구해진 a를 f(a) 에 대입해서 검산을 해보고 Pn을 산정한다.

 

이 방법은 smath로 a를 구하는 방법이다.

우리가 원하는 건 엑셀 계산서에서 목표값 찾기를 하지 않고 a와 Pn을 구하는 것이다. 그래서 a에 관한 2차 방정식을 정리를 했다.

뭔가 기능이 있을 것 같은데 모르니까 그냥 풀어썼다.



이제 구해야 하는 값 a를 x로 보고 x에 관한 함수를 만들고 그 해를 구하면 된다. solve로 푸는 건 검산을 위한 것이고 Excel에서는 aaa, bbb, ccc를 이용해서 근의 공식으로 풀 것이다. 근의 공식에 대입해서 풀어보니 solve기능으로 푼 값과 일치했다.



이제 엑셀에서 시산법으로 a를 구하지 않고 근의 공식을 이용해서 구할 수 있게 되었다. aaa, bbb, ccc를 이용해서 근의 공식을 적용하면 된다.

Excel의 VBA 기능을 열고 module을 하나 추가한다.



Excel의 셀에서 마치 엑셀의 내장함수처럼 쓰기 위해서는 module에서 function으로 정의해주면 된다. UDF라고 한다. User Defined Function

아래와 같이 소스코드를 입력한다. ‘로 시작하는 줄은 comment(주석)이다. Smath에서 구한 aaa, bbb, ccc를 정의해주고 근의 공식을 적용해서 해를 구한다. 해를 함수이름에 대입해주면 UDF가 만들어진다.

Function djdg_pm_a(fck, fy, b, d, dcf, ee, asc, ast) As Double

 

  ' fck : fck

  ' fy : fy

  ' b : width of beam or slab

  ' d : d

  ' dcf : cover of comp side

  ' ee : e' = e + Xp - dc

  ' Asc : area of rebar comp.

  ' Ast : area of rebar tens.

  aa = -1# / 2# / ee

  bb = d / ee - 1

  cc = (40 * ast * fy * ee - 2 * asc * (20 * fy - 17 * fck) * (-d + dcf + ee)) / (34 * ee * fck * b)

   

  djdg_pm_a = (-bb - Sqr(bb ^ 2 - 4 * aa * cc)) / (2 * aa)

 

End Function


이제 원하는 셀에 UDF를 적용하면 된다.



함수를 호출할 때 인자의 순서를 잘 알고 있어야 한다. 함수를 선언할 때 순서를 그대로 지켜줘야 한다. 순서는 다음과 같다. 설명은 소스코드의 주석부분을 참조한다.

fck, fy, b, d, dcf, ee, asc, ast

이 함수를 다른 excel파일에 적용하기 위해서는 그 파일에 module을 추가 하고 이 소스코드를 넣기만 하면 된다.


* 이석종님에 의해서 게시물 복사되었습니다 (2021-03-30 21:35)


  추천하기   목록보기

번호 제목   작성자 작성일 조회
 [SMath] Symbolic, Solve기능+VBA    이석종 2021/03/30 754
8  SMath 강좌(7) Table과 for 반복문  [3]  이석종 2021/02/18 1051
7  SMATH업데이트. SMath Studio 0.97.5737 available    이석종 2015/09/28 4674
6  SMath 강좌 (6) 행렬 (2/2)  [1]  이석종 2014/12/28 5058
5  SMath 강좌 (5) 행렬 (1/2)    이석종 2014/12/26 4189
4  SMath 강좌 (4) 그래프  [140]  이석종 2014/12/23 117894
3  SMath 강좌 (3) 단위사용하기  [2]  이석종 2014/12/16 3121
2  SMath 강좌 (2) 수식 정의 및 편집    이석종 2014/12/16 2788
1  SMath 강좌 (1) 소개 및 설치    이석종 2014/12/16 4768

    목록보기 1
       

Copyright 1999-2021 Zeroboard / skin by zero
구조설계의 미래를 준비하는 모임 [구조설계미래포럼]