2

나는 (가상의) 질문을 가지고 있으며, 해결책은 동적으로 코드를 생성하는 것이라고 생각합니다.동적 코드 생성을위한 옵션

사용자가 입력 한 임의의 수학 함수를 신속하게 계산하여 i = 3 + 2i^2 + 6i + 1의 합계 i = 1 ~ N을 찾습니다. N은 임의이고 i^3 + 2i^2 + 6i + 1도 임의로 (다항식 일 필요는 없으며 삼각 함수와 다른 함수도 포함 할 수 있습니다). N이 매우 클 수 있다고 가정 해보십시오. 나는 내 프로그램이 이해할 수있는 바이트 코드 또는 다른 것에 대한 사용자 입력을 이미 파싱했다고 가정하고 대답을 빨리 평가할 수있는 방법을 알고 싶다.

가능한 경우 내 코드를 다른 운영체제 (모바일 포함)에서 쉽게 컴파일하고 실행할 수 있기를 바랍니다.

나는 몇 가지의 생각 :

1) 해석하고 내 바이트 코드에서 각 명령을 실행하는 인터프리터를 작성합니다. 이로 인해 어떤 언어 든 자유롭게 사용할 수 있지만 느립니다.

2) Java/C#으로 작성하고 동적 코드 생성 (예 : Is it possible to dynamically compile and execute C# code fragments?)을 사용하십시오. 이것은 C#/Java가 JIT로 컴파일 된 코드이기 때문에 약간의 속도 저하만으로도 내 소스 코드에 직접 함수를 작성한 것처럼 빨리 실행됩니다. Java는 모바일에서 널리 지원되지 않으며 C#은 Windows 전용입니다.

3) 내가 사용하는 컴파일 언어에 상관없이 어셈블러/C++ 컴파일러/컴파일러를 포함하십시오. 제한 사항은 모바일에서도 작동하지 않는다는 것입니다. 데이터 파일을 실행할 수 없습니다.

4) HTML/자바 스크립트를 작성한 다음 웹 브라우저 컨트롤에 삽입하고 응용 프로그램에 넣으십시오 (일부 사람들이 어디서나 실행할 수있는 범용 앱을 만드는 방법이라고 생각합니다). 하지만 너무 느리고 자바 스크립트로 실제 응용 프로그램을 작성하는 것은 쉽지 않습니다.

어떤 옵션이 가장 적합하다고 생각하십니까? 또는 어쩌면 내가 어쩌면 내 응용 프로그램 코드를 생성하고 생성 된 자바 스크립트 함수를 실행하는 믹스와 함께 가야합니까?

+0

왜이 태그가 자바 스크립트입니까? 자바 스크립트에서 바이트 코드 인터프리터 또는 Java/C# 컴파일러를 작성 하시겠습니까? 실제 환경은 무엇입니까 - 브라우저 또는 OS 실행 파일로 앱을 실행합니까? 실제로 사용자가 출력 할 수있는 (무엇을?) 언어로 읽을 수있는 코드를 생성하고 싶습니까? 아니면 그 수학적 합계 표현을 평가할 수있는 유일한 목적입니까? – Bergi

+0

간단한 해결책 : [네트워크로 연결] (https://www.wolframalpha.com/input/?i=sum+i^3%2B2i^2%2B6i%2B1+over+i=1+to+N) :-) – Bergi

+0

코멘트 주셔서 감사합니다; 나는 내가 분명하지 않다는 것을 깨달았다.원래 의도는 모바일 앱을 작성하는 것이므로 모바일 앱에 웹 브라우저 컨트롤을 삽입하고 페이지를 표시하도록 할 수 있습니다. 나는 더 나은 솔루션이 있는지를보기 위해 데스크탑으로 질문을 확장하고 있습니다. 유일한 목표는 가능한 한 빨리 수치적인 답을 얻는 것입니다. – Bernard

답변

0

N의 큰 값에 대해 이러한 계산을 수행하는 가장 빠르고 간단한 방법은 반복 계산 대신 원시 계산을 사용하는 것입니다.

여기서 상기 식에서 각각의 항목을 계산하는 식의 모든 항목이 수행하는 식의 작업이 완료된다

sum x = 1 to N for x^k

H는 [n]은 n 번째 Harmonic number이다.

H [n]을 계산하는 데는 여러 가지 방법이 있습니다. 일부는 가장 큰 필요한 수를 계산하고 그 수까지 모든 수를 생성하여 필요한 다른 값을 저장합니다. 교대로 매 10,000 번째 항목을 파일에 교대로 저장하고 가장 가까운 항목에서 H [n]을 계산합니다.

+0

이것은 작동하지만 다항식에만 국한되어 있습니다. 과학적인 계산기가 할 수있는 어떤 수학적 표현에도 도움이 될만한 것을 기대하고있었습니다. 미안 해요 내 질문에 명시 적으로 명시하지 않은, 그것을 편집합니다 – Bernard

+1

과학적인 계산기와 같은 임의의 표현? 나는 당신이 자신의 [CAS] (http 대신 앱에 삽입 할 수있는 소프트웨어를 찾으십시오. – Bergi

+0

흠 나는 CAS를 고려하지 않았지만 고려해야 할 흥미로운 생각입니다. 내가 과학적인 계산기를 언급했을 때, 대수학 분석을하는 "더 똑똑한"알고리즘을보고 싶지 않았기 때문에 수학적으로 수치를 평가하는 ("대수학을하지 않습니다") "멍청한"계산기를 의미했습니다. 그러나 당신의 제안은 재미 있다고 생각합니다. 그래서 나는 업보 트를 할 것입니다! – Bernard