2011-05-12 4 views
2

제 작품에서 필자는 수학 함수 샘플을 텍스트 스트림 형태로 필요로합니다. 예를 들어, 이산 시간 지점에서 사인 함수의 값을 생성하고이를 stdout에 인쇄하는 프로그램이 필요합니다. 그런 다음 몇 가지 형식으로이 샘플을 결합해야합니다 (예 : 합계 2 개 샘플을 일부 위상으로 이동). 그래서 2로 내 질문에 수도를 분할 할 수 있습니다 :리눅스 용주기 함수 발생기

  1. 지정된 파라미터에 – 주파수, 위상, 진폭, 시간 단계 –와 같은 사인과 같은 수학 함수의 샘플을, 생성하는 꽤 표준 방법이 있나요 두 개의 열이있는 간단한 텍스트 스트림의 형태 : 시간과 함수 값? Perl/Tcl의 간단한 스크립트가이 작업을 수행 할 수 있다는 것을 알고 있지만 제레릭 솔루션을 알고 싶습니다.

  2. 어떤 프로그램이 이러한 스트림을 조작 할 수 있습니까? 내가 awk에 대해 알고 있지만 스트림을 입력으로했을 때 awk으로 무엇을 할 수 있습니까? 예를 들어, 두 개 또는 세 개의 사인 샘플을 합 또는 곱으로 만들려면 어떻게해야합니까?

것은 내가 데비안 리눅스를 사용하고 있는데 각 프로그램은 간단한 작업을 수행하고 그것을 완벽하게 수행하고, 별도의 프로그램의 결과가 다른 프로그램에 의해 결합 될 수있다 때 나는, 유닉스 방법을 선호합니다.

감사합니다.

답변

3

bc으로 간단한 숫자 계산을 수행 할 수 있습니다. 매뉴얼 페이지를 참조하십시오. 더 복잡한 계산은 무료 Matlab 클론 인 octave으로 수행 할 수 있습니다.

$ octave -q --eval 'printf ("%f\n", sin([0:0.1:pi/2]))'|nl|tee y.txt 
1 0.000000 
2 0.099833 
3 0.198669 
4 0.295520 
5 0.389418 
6 0.479426 
7 0.564642 
8 0.644218 
9 0.717356 
10 0.783327 
11 0.841471 
12 0.891207 
13 0.932039 
14 0.963558 
15 0.985450 
16 0.997495 

그리고 join 명령은 두 개의 파일에 가입하도록 사용될 수있다 :

을이 죄 값을 계산

$ octave -q --eval 'printf ("%f\n", [0:0.1:pi/2])'|nl|tee x.txt 
1 0.000000 
2 0.100000 
3 0.200000 
4 0.300000 
5 0.400000 
6 0.500000 
7 0.600000 
8 0.700000 
9 0.800000 
10 0.900000 
11 1.000000 
12 1.100000 
13 1.200000 
14 1.300000 
15 1.400000 
16 1.500000 

:

예를 들어이 간격의 값을 계산

$ join -1 1 -2 1 -o 1.2 2.2 x.txt y.txt 
0.000000 0.000000 
0.100000 0.099833 
0.200000 0.198669 
0.300000 0.295520 
0.400000 0.389418 
0.500000 0.479426 
0.600000 0.564642 
0.700000 0.644218 
0.800000 0.717356 
0.900000 0.783327 
1.000000 0.841471 
1.100000 0.891207 
1.200000 0.932039 
1.300000 0.963558 
1.400000 0.985450 
1.500000 0.997495 

하지만 전체 계산을 위해 옥타브에 머물러있는 것이 좋습니다. :

$ octave -q --eval 'for x = .1:0.1:pi/2 ; printf ("%f %f\n", x, sin(x)); end' 
0.100000 0.099833 
0.200000 0.198669 
0.300000 0.295520 
0.400000 0.389418 
0.500000 0.479426 
0.600000 0.564642 
0.700000 0.644218 
0.800000 0.717356 
0.900000 0.783327 
1.000000 0.841471 
1.100000 0.891207 
1.200000 0.932039 
1.300000 0.963558 
1.400000 0.985450 
1.500000 0.997495 
+0

옥타브에 대해 생각했습니다. 차트를 PDF 형식으로 그리려면 gnuplot을 사용합니다. Octave 플로팅 기능이 충분히 풍부합니까? – Andrey

+0

http://www.gnuplot.info/ ;-)를 사용합니다. – ceving

1

bc을 살펴 보셨습니까?

3

일반 텍스트 조작 프로그램에 유용 할 것이라고 :

  • paste 또는 join는 (함께 두 파일을 병합)
  • combine (파일의 라인 프리폼 설정 등의 작업) colrm (열 제거)
  • sort (일반 정렬)
  • sed
  • grep
  • awk (일반 텍스트 조작)
  • tee (A T 접합 (검색) (검색 및 교체, 기타 에드 명령 등)을 선택합니다. 비록 당신이 이것을 원한다면 당신은 아마 너무 복잡하고 무언가를 다뤄야 할 것이다.)

나는 perl 스크립트를 사용하여 값을 생성하는데 아무런 문제가 없다. 물론 bc 스크립트를 사용하는 것도 옵션 일 수 있습니다.