LoginSignup
0
0

More than 3 years have passed since last update.

整数型で高次方程式を解く(重解なし)

Last updated at Posted at 2021-01-13

今回は、整数型で、高次方程式を解きます。解く方程式は、4台クラスターで高次方程式を解くI 100次方程式を解く で解いた方程式と同じ式です。しかし今回のプログラムは、整数型で加法・減法・乗法の演算をしています。そして最後に1回だけ除法を使って桁数を戻しています。pythonの倍精度浮動小数点型は有効数字桁数が14桁(浮動小数点の仮数部の10進数での桁数)ほどありますが、この時に浮動小数点型に戻ります。つまりこの時、仮数部の桁数によって、解の有効数字のダイナミックレンジ(対数表示の桁数の意味で)は制限されます。ただ計算途中は、整数型により計算精度は格段に上がります。また最後に1000次と10000次方程式も今回追加しました。1000次と10000次方程式になると、計算最後の1回だけ除法の時、今度は倍精度浮動小数点の指数部がオーバーフローします。

以下に今回試行したプログラムを示しました。Raspberry Pi 4Bのメモリー2GBの機種で、Raspberry Pi OS with DESKTOP(2020-DEC-02, 32bit版OS)のThonnyを使っています。USBにディスク等は接続していません。SwapはデフォルトのSDカード100MBです。

3次方程式

4台クラスターで高次方程式を解くIと同じ方程式です。
y = 2.1 - 2.1425*x - 2.3*x^2 + x^3 = 0
今回は整数型で解くプログラムです。

eq-3ji-int.py
import time

#### Input Start ####
x_initZero =-2.0
x_endZero  = 0.0
x_init     = 0.0
x_end      = 3.0
a= 1
b=-2.3
c=-2.1425
d= 2.1
R_f=10000000
#### Input End   ####

print(f"Calculation Start")
if   R_f==10000000:
    print(f" Please wait for 3 minutes.")
elif R_f==1000000:
    print(f" Please wait for 20 seconds.")

X_initZero = int(R_f*x_endZero)
X_endZero  = int(R_f*x_initZero*(-1))
X_init     = int(R_f*x_init)
X_end      = int(R_f*x_end)

A = int((R_f**0)*a)
B = int((R_f**1)*b)
C = int((R_f**2)*c)
D = int((R_f**3)*d)

#a= 1      *1
#b=-2.3    *10000000
#c=-2.1425 *100000000000000
#d= 2.1    *1000000000000000000000

AnswersXY = []
initial_time=time.time()

for X in range(X_initZero, X_endZero):

    X = (-1)*X
    Y = A*(X)**3  + B*(X)**2  + C*X  + D

    if X==X_init:
        Ypre=Y
    if Ypre * Y > 0:
        Ypre=Y
    else:
        if Y == 0.0:
            AnswersXY.append(X)
            AnswersXY.append(Y)
        else:
            Ypre=Y
            AnswersXY.append(X)
            AnswersXY.append(Y)

for X in range(X_init, X_end):

    Y = A*(X)**3  + B*(X)**2  + C*X  + D

    if X==X_init:
        Ypre=Y
    if Ypre * Y > 0:
        Ypre=Y
    else:
        if Y == 0.0:
            AnswersXY.append(X)
            AnswersXY.append(Y)
        else:
            Ypre=Y
            AnswersXY.append(X)
            AnswersXY.append(Y)

print(f"Calculation Finished")

answersXY=[]
for i in range(int(len(AnswersXY)/2)):
    answersXY.append(( (int(AnswersXY[2*i])/R_f),\
                       (int(AnswersXY[2*i+1]))/(R_f**3) ))

print(f"Time :")
print(str(time.time() - initial_time))
print(f"Answers :")
for i in range(len(answersXY)):
    print(answersXY[i])

time.sleep(10)

#Time :
#90.....
#Answers :
#(-1.1501757, -2.83010741445093e-07)
#(0.6526514, -1.02833550915256e-07)
#(2.7975243, 1.11528199673907e-07)

10次方程式

4台クラスターで高次方程式を解くI
と同じ方程式です。今回は整数型で解くプログラムです。
y=
=(x-1)(x-2)(x-3)(x-4)(x-5)(x-6)(x-7)(x-8)(x-9)(x-10)
=x^10 - 55*x^9 + 1320*x^8 - 18150*x^7 + 157773*x^6 - 902055*x^5 + 3416930*x^4 - 8409500*x^3 + 12753576*x^2 - 10628640*x + 3628800
= 0

eq-10ji-int.py
import time
from multiprocessing import Pool

def calc_2s(i0,R_f,X_init,X_end,Keisus):

    Ypre=0
    totalsXY=[i0]
    for X in range(int(X_init), int(X_end)+1):

        Y = Keisus[0]+Keisus[1]*(X)**1+Keisus[2]*(X)**2+Keisus[3]*(X)**3+Keisus[4]*(X)**4+Keisus[5]*(X)**5+\
                      Keisus[6]*(X)**6+Keisus[7]*(X)**7+Keisus[8]*(X)**8+Keisus[9]*(X)**9+Keisus[10]*(X)**10

        if X == int(X_init):
            Ypre=Y
        if Ypre * Y > 0:
            Ypre=Y
        else:
            if Y == 0.0:
                Y=Y
                totalsXY.append(X)
                totalsXY.append(Y)
            else:
                Ypre=Y
                totalsXY.append(X)
                totalsXY.append(Y)
    return totalsXY


def wrapper_func(args):
    return calc_2s(*args)

def multi_processing_pool(Args_Lists):
    p = Pool(4)
    process_XY = p.map(wrapper_func, Args_Lists)
    p.close()
    return process_XY

if __name__=="__main__":


    ####  Input Start  ####
    xx_Range_from = 0
    xx_Range_to   = 12
    aa00= 3628800.0
    aa01=-10628640.0
    aa02= 12753576.0
    aa03=-8409500.0
    aa04= 3416930.0
    aa05=-902055.0
    aa06= 157773.0
    aa07=-18150.0
    aa08= 1320.0
    aa09=-55.0
    aa10= 1.0
    r_f = 1000000
    ji_suu = 10
    ####  Input End  ####


    print(f"Calculation Start")
    if r_f==1000000:
        print(f" Please wait for 40 seconds.")

    x_Range_from = int(r_f*xx_Range_from)
    x_Range_to   = int(r_f*xx_Range_to)
    f_range      = x_Range_to  - x_Range_from

    keisus=[]
    keisus.append( int((r_f**10)*aa00) )
    keisus.append( int((r_f**9) *aa01) )
    keisus.append( int((r_f**8) *aa02) )
    keisus.append( int((r_f**7) *aa03) )
    keisus.append( int((r_f**6) *aa04) )
    keisus.append( int((r_f**5) *aa05) )
    keisus.append( int((r_f**4) *aa06) )
    keisus.append( int((r_f**3) *aa07) )
    keisus.append( int((r_f**2) *aa08) )
    keisus.append( int((r_f**1) *aa09) )
    keisus.append( int((r_f**0) *aa10) )

    initial_time=time.time()
    ArgsLists= [(i,r_f,i*f_range/4,(i+1)*f_range/4,keisus) for i in range(4)]
    processXY = multi_processing_pool(ArgsLists)
    print(f"Calculation Finished")

    processXYstr = str(processXY)
    processXY.clear()
    processXYstr = processXYstr.replace('[[', '')
    processXYstr = processXYstr.replace(']]', '')
    processesXYstr=processXYstr.split('], [')
    process0XYstr=processesXYstr[0]
    process1XYstr=processesXYstr[1]
    process2XYstr=processesXYstr[2]
    process3XYstr=processesXYstr[3]
    processesXYstr.clear()

    process0sXYstr=process0XYstr.split(', ')
    process1sXYstr=process1XYstr.split(', ')
    process2sXYstr=process2XYstr.split(', ')
    process3sXYstr=process3XYstr.split(', ')
    process0XYstr=''
    process1XYstr=''
    process2XYstr=''
    process3XYstr=''

    if   process0sXYstr[0]=='0' or process0sXYstr[0]=='0.0':
        ProcessAA0=process0sXYstr.copy()
    elif process1sXYstr[0]=='0' or process1sXYstr[0]=='0.0':
        ProcessAA0=process1sXYstr.copy()
    elif process2sXYstr[0]=='0' or process2sXYstr[0]=='0.0':
        ProcessAA0=process2sXYstr.copy()
    elif process3sXYstr[0]=='0' or process3sXYstr[0]=='0.0':
        ProcessAA0=process3sXYstr.copy()
    if   process0sXYstr[0]=='1' or process0sXYstr[0]=='1.0':
        ProcessAA1=process0sXYstr.copy()
    elif process1sXYstr[0]=='1' or process1sXYstr[0]=='1.0':
        ProcessAA1=process1sXYstr.copy()
    elif process2sXYstr[0]=='1' or process2sXYstr[0]=='1.0':
        ProcessAA1=process2sXYstr.copy()
    elif process3sXYstr[0]=='1' or process3sXYstr[0]=='1.0':
        ProcessAA1=process3sXYstr.copy()
    if   process0sXYstr[0]=='2' or process0sXYstr[0]=='2.0':
        ProcessAA2=process0sXYstr.copy()
    elif process1sXYstr[0]=='2' or process1sXYstr[0]=='2.0':
        ProcessAA2=process1sXYstr.copy()
    elif process2sXYstr[0]=='2' or process2sXYstr[0]=='2.0':
        ProcessAA2=process2sXYstr.copy()
    elif process3sXYstr[0]=='2' or process3sXYstr[0]=='2.0':
        ProcessAA2=process3sXYstr.copy()
    if   process0sXYstr[0]=='3' or process0sXYstr[0]=='3.0':
        ProcessAA3=process0sXYstr.copy()
    elif process1sXYstr[0]=='3' or process1sXYstr[0]=='3.0':
        ProcessAA3=process1sXYstr.copy()
    elif process2sXYstr[0]=='3' or process2sXYstr[0]=='3.0':
        ProcessAA3=process2sXYstr.copy()
    elif process3sXYstr[0]=='3' or process3sXYstr[0]=='3.0':
        ProcessAA3=process3sXYstr.copy()
    process0sXYstr.clear()
    process1sXYstr.clear()
    process2sXYstr.clear()
    process3sXYstr.clear()
    ProcessAA0.pop(0)
    ProcessAA1.pop(0)
    ProcessAA2.pop(0)
    ProcessAA3.pop(0)

    answersXY=[]
    for i in range(int(len(ProcessAA0)/2)):
        answersXY.append(( (int(ProcessAA0[2*i])/r_f),\
                           (int(ProcessAA0[2*i+1]))/(r_f**ji_suu) ))
    for i in range(int(len(ProcessAA1)/2)):
        answersXY.append(( (int(ProcessAA1[2*i])/r_f),\
                           (int(ProcessAA1[2*i+1]))/(r_f**ji_suu) ))
    for i in range(int(len(ProcessAA2)/2)):
        answersXY.append(( (int(ProcessAA2[2*i])/r_f),\
                           (int(ProcessAA2[2*i+1]))/(r_f**ji_suu) ))
    for i in range(int(len(ProcessAA3)/2)):
        answersXY.append(( (int(ProcessAA3[2*i])/r_f),\
                           (int(ProcessAA3[2*i+1]))/(r_f**ji_suu) ))

    print(f"Time :")
    print(str(time.time() - initial_time))
    print(f"Answers :")
    for i in range(len(answersXY)):
        print(answersXY[i])
    time.sleep(10)

#Time :
#55 ......
#Answers :
#(1.000001, -0.3628789724587281)
#(2.0, 6.650016466826255e-09)
#(3.000001, -0.010079961831267673)
#(4.0, 7.980505643289606e-08)
#(5.000001, -0.0028798142265657276)
#(6.0, 3.560047465463835e-07)
#(7.000001, -0.004319426533713714)
#(8.0, 7.675194067778865e-07)
#(9.000001, -0.04031932725371335)
#(10.0, 1.3557000349574745e-07)

解が0.000001ズレています。因数分解型を展開しただけの式なので、解は整数の1.0, 2.0, 3.0 ...となるはずです。さらにその時のy値は0.0になるはずです。今回のプログラムのどこかがおかしいようです。確認中です。

100次方程式

100次方程式を解く
と同じ方程式です。今回は整数型で解くプログラムです。
y=
(x- 0.950)(x- 0.951)(x- 0.952)(x- 0.953)(x- 0.954)(x- 0.955)(x- 0.956)(x- 0.957)(x- 0.958)(x- 0.959)×
(x- 0.960)(x- 0.961)(x- 0.962)(x- 0.963)(x- 0.964)(x- 0.965)(x- 0.966)(x- 0.967)(x- 0.968)(x- 0.969)×
(x- 0.970)(x- 0.971)(x- 0.972)(x- 0.973)(x- 0.974)(x- 0.975)(x- 0.976)(x- 0.977)(x- 0.978)(x- 0.979)×
(x- 0.980)(x- 0.981)(x- 0.982)(x- 0.983)(x- 0.984)(x- 0.985)(x- 0.986)(x- 0.987)(x- 0.988)(x- 0.989)×
(x- 0.990)(x- 0.991)(x- 0.992)(x- 0.993)(x- 0.994)(x- 0.995)(x- 0.996)(x- 0.997)(x- 0.998)(x- 0.999)×
(x- 1.000)(x- 1.001)(x- 1.002)(x- 1.003)(x- 1.004)(x- 1.005)(x- 1.006)(x- 1.007)(x- 1.008)(x- 1.009)×
(x- 1.010)(x- 1.011)(x- 1.012)(x- 1.013)(x- 1.014)(x- 1.015)(x- 1.016)(x- 1.017)(x- 1.018)(x- 1.019)×
(x- 1.020)(x- 1.021)(x- 1.022)(x- 1.023)(x- 1.024)(x- 1.025)(x- 1.026)(x- 1.027)(x- 1.028)(x- 1.029)×
(x- 1.030)(x- 1.031)(x- 1.032)(x- 1.033)(x- 1.034)(x- 1.035)(x- 1.036)(x- 1.037)(x- 1.038)(x- 1.039)×
(x- 1.040)(x- 1.041)(x- 1.042)(x- 1.043)(x- 1.044)(x- 1.045)(x- 1.046)(x- 1.047)(x- 1.048)(x- 1.049) = 0

eq-100ji-int.py
import time
from multiprocessing import Pool

def calc_2s(i0,R_f,X_init,X_end,\
                    A00,A01,A02,A03,A04,A05,A06,A07,A08,A09,\
                    A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,\
                    A20,A21,A22,A23,A24,A25,A26,A27,A28,A29,\
                    A30,A31,A32,A33,A34,A35,A36,A37,A38,A39,\
                    A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,\
                    A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,\
                    A60,A61,A62,A63,A64,A65,A66,A67,A68,A69,\
                    A70,A71,A72,A73,A74,A75,A76,A77,A78,A79,\
                    A80,A81,A82,A83,A84,A85,A86,A87,A88,A89,\
                    A90,A91,A92,A93,A94,A95,A96,A97,A98,A99):
    Ypre=0
    totalsXY=[i0]
    for X in range( int(X_init), int(X_end)+1 ):

        Y = (X-A00)*(X-A01)*(X-A02)*(X-A03)*(X-A04)*(X-A05)*(X-A06)*(X-A07)*(X-A08)*(X-A09)*\
            (X-A10)*(X-A11)*(X-A12)*(X-A13)*(X-A14)*(X-A15)*(X-A16)*(X-A17)*(X-A18)*(X-A19)*\
            (X-A20)*(X-A21)*(X-A22)*(X-A23)*(X-A24)*(X-A25)*(X-A26)*(X-A27)*(X-A28)*(X-A29)*\
            (X-A30)*(X-A31)*(X-A32)*(X-A33)*(X-A34)*(X-A35)*(X-A36)*(X-A37)*(X-A38)*(X-A39)*\
            (X-A40)*(X-A41)*(X-A42)*(X-A43)*(X-A44)*(X-A45)*(X-A46)*(X-A47)*(X-A48)*(X-A49)*\
            (X-A50)*(X-A51)*(X-A52)*(X-A53)*(X-A54)*(X-A55)*(X-A56)*(X-A57)*(X-A58)*(X-A59)*\
            (X-A60)*(X-A61)*(X-A62)*(X-A63)*(X-A64)*(X-A65)*(X-A66)*(X-A67)*(X-A68)*(X-A69)*\
            (X-A70)*(X-A71)*(X-A72)*(X-A73)*(X-A74)*(X-A75)*(X-A76)*(X-A77)*(X-A78)*(X-A79)*\
            (X-A80)*(X-A81)*(X-A82)*(X-A83)*(X-A84)*(X-A85)*(X-A86)*(X-A87)*(X-A88)*(X-A89)*\
            (X-A90)*(X-A91)*(X-A92)*(X-A93)*(X-A94)*(X-A95)*(X-A96)*(X-A97)*(X-A98)*(X-A99)

        if X == int(X_init):
            Ypre=Y
        if Ypre * Y > 0:
            Ypre=Y
        else:
            if Y == 0.0:
                Y=Y
                totalsXY.append(X)
                totalsXY.append(Y)
            else:
                Ypre=Y
                totalsXY.append(X)
                totalsXY.append(Y)
    return totalsXY


def wrapper_func(args):
    return calc_2s(*args)

def multi_processing_pool(Args_Lists):
    p = Pool(4)
    process_XY = p.map(wrapper_func, Args_Lists)
    p.close()
    return process_XY

if __name__=="__main__":



    ####  Input Start  ####
    xx_Range_from = 0.900
    xx_Range_to   = 1.100
    aa00= 0.950
    aa01= 0.951
    aa02= 0.952
    aa03= 0.953
    aa04= 0.954
    aa05= 0.955
    aa06= 0.956
    aa07= 0.957
    aa08= 0.958
    aa09= 0.959
    aa10= 0.960
    aa11= 0.961
    aa12= 0.962
    aa13= 0.963
    aa14= 0.964
    aa15= 0.965
    aa16= 0.966
    aa17= 0.967
    aa18= 0.968
    aa19= 0.969
    aa20= 0.970
    aa21= 0.971
    aa22= 0.972
    aa23= 0.973
    aa24= 0.974
    aa25= 0.975
    aa26= 0.976
    aa27= 0.977
    aa28= 0.978
    aa29= 0.979
    aa30= 0.980
    aa31= 0.981
    aa32= 0.982
    aa33= 0.983
    aa34= 0.984
    aa35= 0.985
    aa36= 0.986
    aa37= 0.987
    aa38= 0.988
    aa39= 0.989
    aa40= 0.990
    aa41= 0.991
    aa42= 0.992
    aa43= 0.993
    aa44= 0.994
    aa45= 0.995
    aa46= 0.996
    aa47= 0.997
    aa48= 0.998
    aa49= 0.999
    aa50= 1.000
    aa51= 1.001
    aa52= 1.002
    aa53= 1.003
    aa54= 1.004
    aa55= 1.005
    aa56= 1.006
    aa57= 1.007
    aa58= 1.008
    aa59= 1.009
    aa60= 1.010
    aa61= 1.011
    aa62= 1.012
    aa63= 1.013
    aa64= 1.014
    aa65= 1.015
    aa66= 1.016
    aa67= 1.017
    aa68= 1.018
    aa69= 1.019
    aa70= 1.020
    aa71= 1.021
    aa72= 1.022
    aa73= 1.023
    aa74= 1.024
    aa75= 1.025
    aa76= 1.026
    aa77= 1.027
    aa78= 1.028
    aa79= 1.029
    aa80= 1.030
    aa81= 1.031
    aa82= 1.032
    aa83= 1.033
    aa84= 1.034
    aa85= 1.035
    aa86= 1.036
    aa87= 1.037
    aa88= 1.038
    aa89= 1.039
    aa90= 1.040
    aa91= 1.041
    aa92= 1.042
    aa93= 1.043
    aa94= 1.044
    aa95= 1.045
    aa96= 1.046
    aa97= 1.047
    aa98= 1.048
    aa99= 1.049
    r_f    = 10000
    ji_suu = 100
    Yaxis_Zoom = 20
    ####  Input End  ####

    print(f"Calculation Start")
    x_Range_from = int(r_f*xx_Range_from)
    x_Range_to   = int(r_f*xx_Range_to)
    f_range      = x_Range_to  - x_Range_from

    a00= int(r_f *aa00)
    a01= int(r_f *aa01)
    a02= int(r_f *aa02)
    a03= int(r_f *aa03)
    a04= int(r_f *aa04)
    a05= int(r_f *aa05)
    a06= int(r_f *aa06)
    a07= int(r_f *aa07)
    a08= int(r_f *aa08)
    a09= int(r_f *aa09)
    a10= int(r_f *aa10)
    a11= int(r_f *aa11)
    a12= int(r_f *aa12)
    a13= int(r_f *aa13)
    a14= int(r_f *aa14)
    a15= int(r_f *aa15)
    a16= int(r_f *aa16)
    a17= int(r_f *aa17)
    a18= int(r_f *aa18)
    a19= int(r_f *aa19)
    a20= int(r_f *aa20)
    a21= int(r_f *aa21)
    a22= int(r_f *aa22)
    a23= int(r_f *aa23)
    a24= int(r_f *aa24)
    a25= int(r_f *aa25)
    a26= int(r_f *aa26)
    a27= int(r_f *aa27)
    a28= int(r_f *aa28)
    a29= int(r_f *aa29)
    a30= int(r_f *aa30)
    a31= int(r_f *aa31)
    a32= int(r_f *aa32)
    a33= int(r_f *aa33)
    a34= int(r_f *aa34)
    a35= int(r_f *aa35)
    a36= int(r_f *aa36)
    a37= int(r_f *aa37)
    a38= int(r_f *aa38)
    a39= int(r_f *aa39)
    a40= int(r_f *aa40)
    a41= int(r_f *aa41)
    a42= int(r_f *aa42)
    a43= int(r_f *aa43)
    a44= int(r_f *aa44)
    a45= int(r_f *aa45)
    a46= int(r_f *aa46)
    a47= int(r_f *aa47)
    a48= int(r_f *aa48)
    a49= int(r_f *aa49)
    a50= int(r_f *aa50)
    a51= int(r_f *aa51)
    a52= int(r_f *aa52)
    a53= int(r_f *aa53)
    a54= int(r_f *aa54)
    a55= int(r_f *aa55)
    a56= int(r_f *aa56)
    a57= int(r_f *aa57)
    a58= int(r_f *aa58)
    a59= int(r_f *aa59)
    a60= int(r_f *aa60)
    a61= int(r_f *aa61)
    a62= int(r_f *aa62)
    a63= int(r_f *aa63)
    a64= int(r_f *aa64)
    a65= int(r_f *aa65)
    a66= int(r_f *aa66)
    a67= int(r_f *aa67)
    a68= int(r_f *aa68)
    a69= int(r_f *aa69)
    a70= int(r_f *aa70)
    a71= int(r_f *aa71)
    a72= int(r_f *aa72)
    a73= int(r_f *aa73)
    a74= int(r_f *aa74)
    a75= int(r_f *aa75)
    a76= int(r_f *aa76)
    a77= int(r_f *aa77)
    a78= int(r_f *aa78)
    a79= int(r_f *aa79)
    a80= int(r_f *aa80)
    a81= int(r_f *aa81)
    a82= int(r_f *aa82)
    a83= int(r_f *aa83)
    a84= int(r_f *aa84)
    a85= int(r_f *aa85)
    a86= int(r_f *aa86)
    a87= int(r_f *aa87)
    a88= int(r_f *aa88)
    a89= int(r_f *aa89)
    a90= int(r_f *aa90)
    a91= int(r_f *aa91)
    a92= int(r_f *aa92)
    a93= int(r_f *aa93)
    a94= int(r_f *aa94)
    a95= int(r_f *aa95)
    a96= int(r_f *aa96)
    a97= int(r_f *aa97)
    a98= int(r_f *aa98)
    a99= int(r_f *aa99)

    initial_time=time.time()
    ArgsLists= [(i,r_f,x_Range_from+i*f_range/4,x_Range_from+(i+1)*f_range/4,\
                    a00,a01,a02,a03,a04,a05,a06,a07,a08,a09,\
                    a10,a11,a12,a13,a14,a15,a16,a17,a18,a19,\
                    a20,a21,a22,a23,a24,a25,a26,a27,a28,a29,\
                    a30,a31,a32,a33,a34,a35,a36,a37,a38,a39,\
                    a40,a41,a42,a43,a44,a45,a46,a47,a48,a49,\
                    a50,a51,a52,a53,a54,a55,a56,a57,a58,a59,\
                    a60,a61,a62,a63,a64,a65,a66,a67,a68,a69,\
                    a70,a71,a72,a73,a74,a75,a76,a77,a78,a79,\
                    a80,a81,a82,a83,a84,a85,a86,a87,a88,a89,\
                    a90,a91,a92,a93,a94,a95,a96,a97,a98,a99) for i in range(4)]

    processXY = multi_processing_pool(ArgsLists)
    print(f"Calculation Finished")

    processXYstr = str(processXY)
    processXY.clear()
    processXYstr = processXYstr.replace('[[', '')
    processXYstr = processXYstr.replace(']]', '')
    processesXYstr=processXYstr.split('], [')
    process0XYstr=processesXYstr[0]
    process1XYstr=processesXYstr[1]
    process2XYstr=processesXYstr[2]
    process3XYstr=processesXYstr[3]
    processesXYstr.clear()

    process0sXYstr=process0XYstr.split(', ')
    process1sXYstr=process1XYstr.split(', ')
    process2sXYstr=process2XYstr.split(', ')
    process3sXYstr=process3XYstr.split(', ')
    process0XYstr=''
    process1XYstr=''
    process2XYstr=''
    process3XYstr=''

    if   process0sXYstr[0]=='0' or process0sXYstr[0]=='0.0':
        ProcessAA0=process0sXYstr.copy()
    elif process1sXYstr[0]=='0' or process1sXYstr[0]=='0.0':
        ProcessAA0=process1sXYstr.copy()
    elif process2sXYstr[0]=='0' or process2sXYstr[0]=='0.0':
        ProcessAA0=process2sXYstr.copy()
    elif process3sXYstr[0]=='0' or process3sXYstr[0]=='0.0':
        ProcessAA0=process3sXYstr.copy()
    if   process0sXYstr[0]=='1' or process0sXYstr[0]=='1.0':
        ProcessAA1=process0sXYstr.copy()
    elif process1sXYstr[0]=='1' or process1sXYstr[0]=='1.0':
        ProcessAA1=process1sXYstr.copy()
    elif process2sXYstr[0]=='1' or process2sXYstr[0]=='1.0':
        ProcessAA1=process2sXYstr.copy()
    elif process3sXYstr[0]=='1' or process3sXYstr[0]=='1.0':
        ProcessAA1=process3sXYstr.copy()
    if   process0sXYstr[0]=='2' or process0sXYstr[0]=='2.0':
        ProcessAA2=process0sXYstr.copy()
    elif process1sXYstr[0]=='2' or process1sXYstr[0]=='2.0':
        ProcessAA2=process1sXYstr.copy()
    elif process2sXYstr[0]=='2' or process2sXYstr[0]=='2.0':
        ProcessAA2=process2sXYstr.copy()
    elif process3sXYstr[0]=='2' or process3sXYstr[0]=='2.0':
        ProcessAA2=process3sXYstr.copy()
    if   process0sXYstr[0]=='3' or process0sXYstr[0]=='3.0':
        ProcessAA3=process0sXYstr.copy()
    elif process1sXYstr[0]=='3' or process1sXYstr[0]=='3.0':
        ProcessAA3=process1sXYstr.copy()
    elif process2sXYstr[0]=='3' or process2sXYstr[0]=='3.0':
        ProcessAA3=process2sXYstr.copy()
    elif process3sXYstr[0]=='3' or process3sXYstr[0]=='3.0':
        ProcessAA3=process3sXYstr.copy()
    process0sXYstr.clear()
    process1sXYstr.clear()
    process2sXYstr.clear()
    process3sXYstr.clear()
    ProcessAA0.pop(0)
    ProcessAA1.pop(0)
    ProcessAA2.pop(0)
    ProcessAA3.pop(0)

    answersXY=[]
    for i in range(int(len(ProcessAA0)/2)):
        answersXY.append(( (int(ProcessAA0[2*i])/r_f),\
                           (int(ProcessAA0[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA1)/2)):
        answersXY.append(( (int(ProcessAA1[2*i])/r_f),\
                           (int(ProcessAA1[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA2)/2)):
        answersXY.append(( (int(ProcessAA2[2*i])/r_f),\
                           (int(ProcessAA2[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA3)/2)):
        answersXY.append(( (int(ProcessAA3[2*i])/r_f),\
                           (int(ProcessAA3[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))

    print(f"Time :")
    print(str(time.time() - initial_time))
    print(f"Answers :")
    for i in range(len(answersXY)):
        print(answersXY[i])

    time.sleep(10)

1000次方程式

今回追加した1000次方程式を整数型で解くプログラムです。式はプログラム内にあります。

eq-1000ji-int.py
import time
from multiprocessing import Pool

def calc_2s(i0, R_f, X_init, X_end, Ksu):
    Ypre=0
    totalsXY=[i0]
    for X in range( int(X_init), int(X_end)+1 ):

        Y = (X-Ksu[0])  *(X-Ksu[1])  *(X-Ksu[2])  *(X-Ksu[3])  *(X-Ksu[4])  *(X-Ksu[5])  *(X-Ksu[6])  *(X-Ksu[7])  *(X-Ksu[8])  *(X-Ksu[9])*\
            (X-Ksu[10]) *(X-Ksu[11]) *(X-Ksu[12]) *(X-Ksu[13]) *(X-Ksu[14]) *(X-Ksu[15]) *(X-Ksu[16]) *(X-Ksu[17]) *(X-Ksu[18]) *(X-Ksu[19])*\
            (X-Ksu[20]) *(X-Ksu[21]) *(X-Ksu[22]) *(X-Ksu[23]) *(X-Ksu[24]) *(X-Ksu[25]) *(X-Ksu[26]) *(X-Ksu[27]) *(X-Ksu[28]) *(X-Ksu[29])*\
            (X-Ksu[30]) *(X-Ksu[31]) *(X-Ksu[32]) *(X-Ksu[33]) *(X-Ksu[34]) *(X-Ksu[35]) *(X-Ksu[36]) *(X-Ksu[37]) *(X-Ksu[38]) *(X-Ksu[39])*\
            (X-Ksu[40]) *(X-Ksu[41]) *(X-Ksu[42]) *(X-Ksu[43]) *(X-Ksu[44]) *(X-Ksu[45]) *(X-Ksu[46]) *(X-Ksu[47]) *(X-Ksu[48]) *(X-Ksu[49])*\
            (X-Ksu[50]) *(X-Ksu[51]) *(X-Ksu[52]) *(X-Ksu[53]) *(X-Ksu[54]) *(X-Ksu[55]) *(X-Ksu[56]) *(X-Ksu[57]) *(X-Ksu[58]) *(X-Ksu[59])*\
            (X-Ksu[60]) *(X-Ksu[61]) *(X-Ksu[62]) *(X-Ksu[63]) *(X-Ksu[64]) *(X-Ksu[65]) *(X-Ksu[66]) *(X-Ksu[67]) *(X-Ksu[68]) *(X-Ksu[69])*\
            (X-Ksu[70]) *(X-Ksu[71]) *(X-Ksu[72]) *(X-Ksu[73]) *(X-Ksu[74]) *(X-Ksu[75]) *(X-Ksu[76]) *(X-Ksu[77]) *(X-Ksu[78]) *(X-Ksu[79])*\
            (X-Ksu[80]) *(X-Ksu[81]) *(X-Ksu[82]) *(X-Ksu[83]) *(X-Ksu[84]) *(X-Ksu[85]) *(X-Ksu[86]) *(X-Ksu[87]) *(X-Ksu[88]) *(X-Ksu[89])*\
            (X-Ksu[90]) *(X-Ksu[91]) *(X-Ksu[92]) *(X-Ksu[93]) *(X-Ksu[94]) *(X-Ksu[95]) *(X-Ksu[96]) *(X-Ksu[97]) *(X-Ksu[98]) *(X-Ksu[99])*\
            (X-Ksu[100])*(X-Ksu[101])*(X-Ksu[102])*(X-Ksu[103])*(X-Ksu[104])*(X-Ksu[105])*(X-Ksu[106])*(X-Ksu[107])*(X-Ksu[108])*(X-Ksu[109])*\
            (X-Ksu[110])*(X-Ksu[111])*(X-Ksu[112])*(X-Ksu[113])*(X-Ksu[114])*(X-Ksu[115])*(X-Ksu[116])*(X-Ksu[117])*(X-Ksu[118])*(X-Ksu[119])*\
            (X-Ksu[120])*(X-Ksu[121])*(X-Ksu[122])*(X-Ksu[123])*(X-Ksu[124])*(X-Ksu[125])*(X-Ksu[126])*(X-Ksu[127])*(X-Ksu[128])*(X-Ksu[129])*\
            (X-Ksu[130])*(X-Ksu[131])*(X-Ksu[132])*(X-Ksu[133])*(X-Ksu[134])*(X-Ksu[135])*(X-Ksu[136])*(X-Ksu[137])*(X-Ksu[138])*(X-Ksu[139])*\
            (X-Ksu[140])*(X-Ksu[141])*(X-Ksu[142])*(X-Ksu[143])*(X-Ksu[144])*(X-Ksu[145])*(X-Ksu[146])*(X-Ksu[147])*(X-Ksu[148])*(X-Ksu[149])*\
            (X-Ksu[150])*(X-Ksu[151])*(X-Ksu[152])*(X-Ksu[153])*(X-Ksu[154])*(X-Ksu[155])*(X-Ksu[156])*(X-Ksu[157])*(X-Ksu[158])*(X-Ksu[159])*\
            (X-Ksu[160])*(X-Ksu[161])*(X-Ksu[162])*(X-Ksu[163])*(X-Ksu[164])*(X-Ksu[165])*(X-Ksu[166])*(X-Ksu[167])*(X-Ksu[168])*(X-Ksu[169])*\
            (X-Ksu[170])*(X-Ksu[171])*(X-Ksu[172])*(X-Ksu[173])*(X-Ksu[174])*(X-Ksu[175])*(X-Ksu[176])*(X-Ksu[177])*(X-Ksu[178])*(X-Ksu[179])*\
            (X-Ksu[180])*(X-Ksu[181])*(X-Ksu[182])*(X-Ksu[183])*(X-Ksu[184])*(X-Ksu[185])*(X-Ksu[186])*(X-Ksu[187])*(X-Ksu[188])*(X-Ksu[189])*\
            (X-Ksu[190])*(X-Ksu[191])*(X-Ksu[192])*(X-Ksu[193])*(X-Ksu[194])*(X-Ksu[195])*(X-Ksu[196])*(X-Ksu[197])*(X-Ksu[198])*(X-Ksu[199])*\
            (X-Ksu[200])*(X-Ksu[201])*(X-Ksu[202])*(X-Ksu[203])*(X-Ksu[204])*(X-Ksu[205])*(X-Ksu[206])*(X-Ksu[207])*(X-Ksu[208])*(X-Ksu[209])*\
            (X-Ksu[210])*(X-Ksu[211])*(X-Ksu[212])*(X-Ksu[213])*(X-Ksu[214])*(X-Ksu[215])*(X-Ksu[216])*(X-Ksu[217])*(X-Ksu[218])*(X-Ksu[219])*\
            (X-Ksu[220])*(X-Ksu[221])*(X-Ksu[222])*(X-Ksu[223])*(X-Ksu[224])*(X-Ksu[225])*(X-Ksu[226])*(X-Ksu[227])*(X-Ksu[228])*(X-Ksu[229])*\
            (X-Ksu[230])*(X-Ksu[231])*(X-Ksu[232])*(X-Ksu[233])*(X-Ksu[234])*(X-Ksu[235])*(X-Ksu[236])*(X-Ksu[237])*(X-Ksu[238])*(X-Ksu[239])*\
            (X-Ksu[240])*(X-Ksu[241])*(X-Ksu[242])*(X-Ksu[243])*(X-Ksu[244])*(X-Ksu[245])*(X-Ksu[246])*(X-Ksu[247])*(X-Ksu[248])*(X-Ksu[249])*\
            (X-Ksu[250])*(X-Ksu[251])*(X-Ksu[252])*(X-Ksu[253])*(X-Ksu[254])*(X-Ksu[255])*(X-Ksu[256])*(X-Ksu[257])*(X-Ksu[258])*(X-Ksu[259])*\
            (X-Ksu[260])*(X-Ksu[261])*(X-Ksu[262])*(X-Ksu[263])*(X-Ksu[264])*(X-Ksu[265])*(X-Ksu[266])*(X-Ksu[267])*(X-Ksu[268])*(X-Ksu[269])*\
            (X-Ksu[270])*(X-Ksu[271])*(X-Ksu[272])*(X-Ksu[273])*(X-Ksu[274])*(X-Ksu[275])*(X-Ksu[276])*(X-Ksu[277])*(X-Ksu[278])*(X-Ksu[279])*\
            (X-Ksu[280])*(X-Ksu[281])*(X-Ksu[282])*(X-Ksu[283])*(X-Ksu[284])*(X-Ksu[285])*(X-Ksu[286])*(X-Ksu[287])*(X-Ksu[288])*(X-Ksu[289])*\
            (X-Ksu[290])*(X-Ksu[291])*(X-Ksu[292])*(X-Ksu[293])*(X-Ksu[294])*(X-Ksu[295])*(X-Ksu[296])*(X-Ksu[297])*(X-Ksu[298])*(X-Ksu[299])*\
            (X-Ksu[300])*(X-Ksu[301])*(X-Ksu[302])*(X-Ksu[303])*(X-Ksu[304])*(X-Ksu[305])*(X-Ksu[306])*(X-Ksu[307])*(X-Ksu[308])*(X-Ksu[309])*\
            (X-Ksu[310])*(X-Ksu[311])*(X-Ksu[312])*(X-Ksu[313])*(X-Ksu[314])*(X-Ksu[315])*(X-Ksu[316])*(X-Ksu[317])*(X-Ksu[318])*(X-Ksu[319])*\
            (X-Ksu[320])*(X-Ksu[321])*(X-Ksu[322])*(X-Ksu[323])*(X-Ksu[324])*(X-Ksu[325])*(X-Ksu[326])*(X-Ksu[327])*(X-Ksu[328])*(X-Ksu[329])*\
            (X-Ksu[330])*(X-Ksu[331])*(X-Ksu[332])*(X-Ksu[333])*(X-Ksu[334])*(X-Ksu[335])*(X-Ksu[336])*(X-Ksu[337])*(X-Ksu[338])*(X-Ksu[339])*\
            (X-Ksu[340])*(X-Ksu[341])*(X-Ksu[342])*(X-Ksu[343])*(X-Ksu[344])*(X-Ksu[345])*(X-Ksu[346])*(X-Ksu[347])*(X-Ksu[348])*(X-Ksu[349])*\
            (X-Ksu[350])*(X-Ksu[351])*(X-Ksu[352])*(X-Ksu[353])*(X-Ksu[354])*(X-Ksu[355])*(X-Ksu[356])*(X-Ksu[357])*(X-Ksu[358])*(X-Ksu[359])*\
            (X-Ksu[360])*(X-Ksu[361])*(X-Ksu[362])*(X-Ksu[363])*(X-Ksu[364])*(X-Ksu[365])*(X-Ksu[366])*(X-Ksu[367])*(X-Ksu[368])*(X-Ksu[369])*\
            (X-Ksu[370])*(X-Ksu[371])*(X-Ksu[372])*(X-Ksu[373])*(X-Ksu[374])*(X-Ksu[375])*(X-Ksu[376])*(X-Ksu[377])*(X-Ksu[378])*(X-Ksu[379])*\
            (X-Ksu[380])*(X-Ksu[381])*(X-Ksu[382])*(X-Ksu[383])*(X-Ksu[384])*(X-Ksu[385])*(X-Ksu[386])*(X-Ksu[387])*(X-Ksu[388])*(X-Ksu[389])*\
            (X-Ksu[390])*(X-Ksu[391])*(X-Ksu[392])*(X-Ksu[393])*(X-Ksu[394])*(X-Ksu[395])*(X-Ksu[396])*(X-Ksu[397])*(X-Ksu[398])*(X-Ksu[399])*\
            (X-Ksu[400])*(X-Ksu[401])*(X-Ksu[402])*(X-Ksu[403])*(X-Ksu[404])*(X-Ksu[405])*(X-Ksu[406])*(X-Ksu[407])*(X-Ksu[408])*(X-Ksu[409])*\
            (X-Ksu[410])*(X-Ksu[411])*(X-Ksu[412])*(X-Ksu[413])*(X-Ksu[414])*(X-Ksu[415])*(X-Ksu[416])*(X-Ksu[417])*(X-Ksu[418])*(X-Ksu[419])*\
            (X-Ksu[420])*(X-Ksu[421])*(X-Ksu[422])*(X-Ksu[423])*(X-Ksu[424])*(X-Ksu[425])*(X-Ksu[426])*(X-Ksu[427])*(X-Ksu[428])*(X-Ksu[429])*\
            (X-Ksu[430])*(X-Ksu[431])*(X-Ksu[432])*(X-Ksu[433])*(X-Ksu[434])*(X-Ksu[435])*(X-Ksu[436])*(X-Ksu[437])*(X-Ksu[438])*(X-Ksu[439])*\
            (X-Ksu[440])*(X-Ksu[441])*(X-Ksu[442])*(X-Ksu[443])*(X-Ksu[444])*(X-Ksu[445])*(X-Ksu[446])*(X-Ksu[447])*(X-Ksu[448])*(X-Ksu[449])*\
            (X-Ksu[450])*(X-Ksu[451])*(X-Ksu[452])*(X-Ksu[453])*(X-Ksu[454])*(X-Ksu[455])*(X-Ksu[456])*(X-Ksu[457])*(X-Ksu[458])*(X-Ksu[459])*\
            (X-Ksu[460])*(X-Ksu[461])*(X-Ksu[462])*(X-Ksu[463])*(X-Ksu[464])*(X-Ksu[465])*(X-Ksu[466])*(X-Ksu[467])*(X-Ksu[468])*(X-Ksu[469])*\
            (X-Ksu[470])*(X-Ksu[471])*(X-Ksu[472])*(X-Ksu[473])*(X-Ksu[474])*(X-Ksu[475])*(X-Ksu[476])*(X-Ksu[477])*(X-Ksu[478])*(X-Ksu[479])*\
            (X-Ksu[480])*(X-Ksu[481])*(X-Ksu[482])*(X-Ksu[483])*(X-Ksu[484])*(X-Ksu[485])*(X-Ksu[486])*(X-Ksu[487])*(X-Ksu[488])*(X-Ksu[489])*\
            (X-Ksu[490])*(X-Ksu[491])*(X-Ksu[492])*(X-Ksu[493])*(X-Ksu[494])*(X-Ksu[495])*(X-Ksu[496])*(X-Ksu[497])*(X-Ksu[498])*(X-Ksu[499])*\
            (X-Ksu[500])*(X-Ksu[501])*(X-Ksu[502])*(X-Ksu[503])*(X-Ksu[504])*(X-Ksu[505])*(X-Ksu[506])*(X-Ksu[507])*(X-Ksu[508])*(X-Ksu[509])*\
            (X-Ksu[510])*(X-Ksu[511])*(X-Ksu[512])*(X-Ksu[513])*(X-Ksu[514])*(X-Ksu[515])*(X-Ksu[516])*(X-Ksu[517])*(X-Ksu[518])*(X-Ksu[519])*\
            (X-Ksu[520])*(X-Ksu[521])*(X-Ksu[522])*(X-Ksu[523])*(X-Ksu[524])*(X-Ksu[525])*(X-Ksu[526])*(X-Ksu[527])*(X-Ksu[528])*(X-Ksu[529])*\
            (X-Ksu[530])*(X-Ksu[531])*(X-Ksu[532])*(X-Ksu[533])*(X-Ksu[534])*(X-Ksu[535])*(X-Ksu[536])*(X-Ksu[537])*(X-Ksu[538])*(X-Ksu[539])*\
            (X-Ksu[540])*(X-Ksu[541])*(X-Ksu[542])*(X-Ksu[543])*(X-Ksu[544])*(X-Ksu[545])*(X-Ksu[546])*(X-Ksu[547])*(X-Ksu[548])*(X-Ksu[549])*\
            (X-Ksu[550])*(X-Ksu[551])*(X-Ksu[552])*(X-Ksu[553])*(X-Ksu[554])*(X-Ksu[555])*(X-Ksu[556])*(X-Ksu[557])*(X-Ksu[558])*(X-Ksu[559])*\
            (X-Ksu[560])*(X-Ksu[561])*(X-Ksu[562])*(X-Ksu[563])*(X-Ksu[564])*(X-Ksu[565])*(X-Ksu[566])*(X-Ksu[567])*(X-Ksu[568])*(X-Ksu[569])*\
            (X-Ksu[570])*(X-Ksu[571])*(X-Ksu[572])*(X-Ksu[573])*(X-Ksu[574])*(X-Ksu[575])*(X-Ksu[576])*(X-Ksu[577])*(X-Ksu[578])*(X-Ksu[579])*\
            (X-Ksu[580])*(X-Ksu[581])*(X-Ksu[582])*(X-Ksu[583])*(X-Ksu[584])*(X-Ksu[585])*(X-Ksu[586])*(X-Ksu[587])*(X-Ksu[588])*(X-Ksu[589])*\
            (X-Ksu[590])*(X-Ksu[591])*(X-Ksu[592])*(X-Ksu[593])*(X-Ksu[594])*(X-Ksu[595])*(X-Ksu[596])*(X-Ksu[597])*(X-Ksu[598])*(X-Ksu[599])*\
            (X-Ksu[600])*(X-Ksu[601])*(X-Ksu[602])*(X-Ksu[603])*(X-Ksu[604])*(X-Ksu[605])*(X-Ksu[606])*(X-Ksu[607])*(X-Ksu[608])*(X-Ksu[609])*\
            (X-Ksu[610])*(X-Ksu[611])*(X-Ksu[612])*(X-Ksu[613])*(X-Ksu[614])*(X-Ksu[615])*(X-Ksu[616])*(X-Ksu[617])*(X-Ksu[618])*(X-Ksu[619])*\
            (X-Ksu[620])*(X-Ksu[621])*(X-Ksu[622])*(X-Ksu[623])*(X-Ksu[624])*(X-Ksu[625])*(X-Ksu[626])*(X-Ksu[627])*(X-Ksu[628])*(X-Ksu[629])*\
            (X-Ksu[630])*(X-Ksu[631])*(X-Ksu[632])*(X-Ksu[633])*(X-Ksu[634])*(X-Ksu[635])*(X-Ksu[636])*(X-Ksu[637])*(X-Ksu[638])*(X-Ksu[639])*\
            (X-Ksu[640])*(X-Ksu[641])*(X-Ksu[642])*(X-Ksu[643])*(X-Ksu[644])*(X-Ksu[645])*(X-Ksu[646])*(X-Ksu[647])*(X-Ksu[648])*(X-Ksu[649])*\
            (X-Ksu[650])*(X-Ksu[651])*(X-Ksu[652])*(X-Ksu[653])*(X-Ksu[654])*(X-Ksu[655])*(X-Ksu[656])*(X-Ksu[657])*(X-Ksu[658])*(X-Ksu[659])*\
            (X-Ksu[660])*(X-Ksu[661])*(X-Ksu[662])*(X-Ksu[663])*(X-Ksu[664])*(X-Ksu[665])*(X-Ksu[666])*(X-Ksu[667])*(X-Ksu[668])*(X-Ksu[669])*\
            (X-Ksu[670])*(X-Ksu[671])*(X-Ksu[672])*(X-Ksu[673])*(X-Ksu[674])*(X-Ksu[675])*(X-Ksu[676])*(X-Ksu[677])*(X-Ksu[678])*(X-Ksu[679])*\
            (X-Ksu[680])*(X-Ksu[681])*(X-Ksu[682])*(X-Ksu[683])*(X-Ksu[684])*(X-Ksu[685])*(X-Ksu[686])*(X-Ksu[687])*(X-Ksu[688])*(X-Ksu[689])*\
            (X-Ksu[690])*(X-Ksu[691])*(X-Ksu[692])*(X-Ksu[693])*(X-Ksu[694])*(X-Ksu[695])*(X-Ksu[696])*(X-Ksu[697])*(X-Ksu[698])*(X-Ksu[699])*\
            (X-Ksu[700])*(X-Ksu[701])*(X-Ksu[702])*(X-Ksu[703])*(X-Ksu[704])*(X-Ksu[705])*(X-Ksu[706])*(X-Ksu[707])*(X-Ksu[708])*(X-Ksu[709])*\
            (X-Ksu[710])*(X-Ksu[711])*(X-Ksu[712])*(X-Ksu[713])*(X-Ksu[714])*(X-Ksu[715])*(X-Ksu[716])*(X-Ksu[717])*(X-Ksu[718])*(X-Ksu[719])*\
            (X-Ksu[720])*(X-Ksu[721])*(X-Ksu[722])*(X-Ksu[723])*(X-Ksu[724])*(X-Ksu[725])*(X-Ksu[726])*(X-Ksu[727])*(X-Ksu[728])*(X-Ksu[729])*\
            (X-Ksu[730])*(X-Ksu[731])*(X-Ksu[732])*(X-Ksu[733])*(X-Ksu[734])*(X-Ksu[735])*(X-Ksu[736])*(X-Ksu[737])*(X-Ksu[738])*(X-Ksu[739])*\
            (X-Ksu[740])*(X-Ksu[741])*(X-Ksu[742])*(X-Ksu[743])*(X-Ksu[744])*(X-Ksu[745])*(X-Ksu[746])*(X-Ksu[747])*(X-Ksu[748])*(X-Ksu[749])*\
            (X-Ksu[750])*(X-Ksu[751])*(X-Ksu[752])*(X-Ksu[753])*(X-Ksu[754])*(X-Ksu[755])*(X-Ksu[756])*(X-Ksu[757])*(X-Ksu[758])*(X-Ksu[759])*\
            (X-Ksu[760])*(X-Ksu[761])*(X-Ksu[762])*(X-Ksu[763])*(X-Ksu[764])*(X-Ksu[765])*(X-Ksu[766])*(X-Ksu[767])*(X-Ksu[768])*(X-Ksu[769])*\
            (X-Ksu[770])*(X-Ksu[771])*(X-Ksu[772])*(X-Ksu[773])*(X-Ksu[774])*(X-Ksu[775])*(X-Ksu[776])*(X-Ksu[777])*(X-Ksu[778])*(X-Ksu[779])*\
            (X-Ksu[780])*(X-Ksu[781])*(X-Ksu[782])*(X-Ksu[783])*(X-Ksu[784])*(X-Ksu[785])*(X-Ksu[786])*(X-Ksu[787])*(X-Ksu[788])*(X-Ksu[789])*\
            (X-Ksu[790])*(X-Ksu[791])*(X-Ksu[792])*(X-Ksu[793])*(X-Ksu[794])*(X-Ksu[795])*(X-Ksu[796])*(X-Ksu[797])*(X-Ksu[798])*(X-Ksu[799])*\
            (X-Ksu[800])*(X-Ksu[801])*(X-Ksu[802])*(X-Ksu[803])*(X-Ksu[804])*(X-Ksu[805])*(X-Ksu[806])*(X-Ksu[807])*(X-Ksu[808])*(X-Ksu[809])*\
            (X-Ksu[810])*(X-Ksu[811])*(X-Ksu[812])*(X-Ksu[813])*(X-Ksu[814])*(X-Ksu[815])*(X-Ksu[816])*(X-Ksu[817])*(X-Ksu[818])*(X-Ksu[819])*\
            (X-Ksu[820])*(X-Ksu[821])*(X-Ksu[822])*(X-Ksu[823])*(X-Ksu[824])*(X-Ksu[825])*(X-Ksu[826])*(X-Ksu[827])*(X-Ksu[828])*(X-Ksu[829])*\
            (X-Ksu[830])*(X-Ksu[831])*(X-Ksu[832])*(X-Ksu[833])*(X-Ksu[834])*(X-Ksu[835])*(X-Ksu[836])*(X-Ksu[837])*(X-Ksu[838])*(X-Ksu[839])*\
            (X-Ksu[840])*(X-Ksu[841])*(X-Ksu[842])*(X-Ksu[843])*(X-Ksu[844])*(X-Ksu[845])*(X-Ksu[846])*(X-Ksu[847])*(X-Ksu[848])*(X-Ksu[849])*\
            (X-Ksu[850])*(X-Ksu[851])*(X-Ksu[852])*(X-Ksu[853])*(X-Ksu[854])*(X-Ksu[855])*(X-Ksu[856])*(X-Ksu[857])*(X-Ksu[858])*(X-Ksu[859])*\
            (X-Ksu[860])*(X-Ksu[861])*(X-Ksu[862])*(X-Ksu[863])*(X-Ksu[864])*(X-Ksu[865])*(X-Ksu[866])*(X-Ksu[867])*(X-Ksu[868])*(X-Ksu[869])*\
            (X-Ksu[870])*(X-Ksu[871])*(X-Ksu[872])*(X-Ksu[873])*(X-Ksu[874])*(X-Ksu[875])*(X-Ksu[876])*(X-Ksu[877])*(X-Ksu[878])*(X-Ksu[879])*\
            (X-Ksu[880])*(X-Ksu[881])*(X-Ksu[882])*(X-Ksu[883])*(X-Ksu[884])*(X-Ksu[885])*(X-Ksu[886])*(X-Ksu[887])*(X-Ksu[888])*(X-Ksu[889])*\
            (X-Ksu[890])*(X-Ksu[891])*(X-Ksu[892])*(X-Ksu[893])*(X-Ksu[894])*(X-Ksu[895])*(X-Ksu[896])*(X-Ksu[897])*(X-Ksu[898])*(X-Ksu[899])*\
            (X-Ksu[900])*(X-Ksu[901])*(X-Ksu[902])*(X-Ksu[903])*(X-Ksu[904])*(X-Ksu[905])*(X-Ksu[906])*(X-Ksu[907])*(X-Ksu[908])*(X-Ksu[909])*\
            (X-Ksu[910])*(X-Ksu[911])*(X-Ksu[912])*(X-Ksu[913])*(X-Ksu[914])*(X-Ksu[915])*(X-Ksu[916])*(X-Ksu[917])*(X-Ksu[918])*(X-Ksu[919])*\
            (X-Ksu[920])*(X-Ksu[921])*(X-Ksu[922])*(X-Ksu[923])*(X-Ksu[924])*(X-Ksu[925])*(X-Ksu[926])*(X-Ksu[927])*(X-Ksu[928])*(X-Ksu[929])*\
            (X-Ksu[930])*(X-Ksu[931])*(X-Ksu[932])*(X-Ksu[933])*(X-Ksu[934])*(X-Ksu[935])*(X-Ksu[936])*(X-Ksu[937])*(X-Ksu[938])*(X-Ksu[939])*\
            (X-Ksu[940])*(X-Ksu[941])*(X-Ksu[942])*(X-Ksu[943])*(X-Ksu[944])*(X-Ksu[945])*(X-Ksu[946])*(X-Ksu[947])*(X-Ksu[948])*(X-Ksu[949])*\
            (X-Ksu[950])*(X-Ksu[951])*(X-Ksu[952])*(X-Ksu[953])*(X-Ksu[954])*(X-Ksu[955])*(X-Ksu[956])*(X-Ksu[957])*(X-Ksu[958])*(X-Ksu[959])*\
            (X-Ksu[960])*(X-Ksu[961])*(X-Ksu[962])*(X-Ksu[963])*(X-Ksu[964])*(X-Ksu[965])*(X-Ksu[966])*(X-Ksu[967])*(X-Ksu[968])*(X-Ksu[969])*\
            (X-Ksu[970])*(X-Ksu[971])*(X-Ksu[972])*(X-Ksu[973])*(X-Ksu[974])*(X-Ksu[975])*(X-Ksu[976])*(X-Ksu[977])*(X-Ksu[978])*(X-Ksu[979])*\
            (X-Ksu[980])*(X-Ksu[981])*(X-Ksu[982])*(X-Ksu[983])*(X-Ksu[984])*(X-Ksu[985])*(X-Ksu[986])*(X-Ksu[987])*(X-Ksu[988])*(X-Ksu[989])*\
            (X-Ksu[990])*(X-Ksu[991])*(X-Ksu[992])*(X-Ksu[993])*(X-Ksu[994])*(X-Ksu[995])*(X-Ksu[996])*(X-Ksu[997])*(X-Ksu[998])*(X-Ksu[999])        

        if X == int(X_init):
            Ypre=Y
        if Ypre * Y > 0:
            Ypre=Y
        else:
            if Y == 0.0:
                Y=Y
                totalsXY.append(X)
                totalsXY.append(Y)
            else:
                Ypre=Y
                totalsXY.append(X)
                totalsXY.append(Y)
    return totalsXY

def wrapper_func(args):
    return calc_2s(*args)

def multi_processing_pool(Args_Lists):
    p = Pool(4)
    process_XY = p.map(wrapper_func, Args_Lists)
    p.close()
    return process_XY

if __name__=="__main__":

    ####  Input Start  ####
    xx_Range_from = 0.900
    xx_Range_to   = 1.100
    ksu_init = [0.9500,0.9501,0.9502,0.9503,0.9504,0.9505,0.9506,0.9507,0.9508,0.9509,\
                0.9510,0.9511,0.9512,0.9513,0.9514,0.9515,0.9516,0.9517,0.9518,0.9519,\
                0.9520,0.9521,0.9522,0.9523,0.9524,0.9525,0.9526,0.9527,0.9528,0.9529,\
                0.9530,0.9531,0.9532,0.9533,0.9534,0.9535,0.9536,0.9537,0.9538,0.9539,\
                0.9540,0.9541,0.9542,0.9543,0.9544,0.9545,0.9546,0.9547,0.9548,0.9549,\
                0.9550,0.9551,0.9552,0.9553,0.9554,0.9555,0.9556,0.9557,0.9558,0.9559,\
                0.9560,0.9561,0.9562,0.9563,0.9564,0.9565,0.9566,0.9567,0.9568,0.9569,\
                0.9570,0.9571,0.9572,0.9573,0.9574,0.9575,0.9576,0.9577,0.9578,0.9579,\
                0.9580,0.9581,0.9582,0.9583,0.9584,0.9585,0.9586,0.9587,0.9588,0.9589,\
                0.9590,0.9591,0.9592,0.9593,0.9594,0.9595,0.9596,0.9597,0.9598,0.9599,\
                0.9600,0.9601,0.9602,0.9603,0.9604,0.9605,0.9606,0.9607,0.9608,0.9609,\
                0.9610,0.9611,0.9612,0.9613,0.9614,0.9615,0.9616,0.9617,0.9618,0.9619,\
                0.9620,0.9621,0.9622,0.9623,0.9624,0.9625,0.9626,0.9627,0.9628,0.9629,\
                0.9630,0.9631,0.9632,0.9633,0.9634,0.9635,0.9636,0.9637,0.9638,0.9639,\
                0.9640,0.9641,0.9642,0.9643,0.9644,0.9645,0.9646,0.9647,0.9648,0.9649,\
                0.9650,0.9651,0.9652,0.9653,0.9654,0.9655,0.9656,0.9657,0.9658,0.9659,\
                0.9660,0.9661,0.9662,0.9663,0.9664,0.9665,0.9666,0.9667,0.9668,0.9669,\
                0.9670,0.9671,0.9672,0.9673,0.9674,0.9675,0.9676,0.9677,0.9678,0.9679,\
                0.9680,0.9681,0.9682,0.9683,0.9684,0.9685,0.9686,0.9687,0.9688,0.9689,\
                0.9690,0.9691,0.9692,0.9693,0.9694,0.9695,0.9696,0.9697,0.9698,0.9699,\
                0.9700,0.9701,0.9702,0.9703,0.9704,0.9705,0.9706,0.9707,0.9708,0.9709,\
                0.9710,0.9711,0.9712,0.9713,0.9714,0.9715,0.9716,0.9717,0.9718,0.9719,\
                0.9720,0.9721,0.9722,0.9723,0.9724,0.9725,0.9726,0.9727,0.9728,0.9729,\
                0.9730,0.9731,0.9732,0.9733,0.9734,0.9735,0.9736,0.9737,0.9738,0.9739,\
                0.9740,0.9741,0.9742,0.9743,0.9744,0.9745,0.9746,0.9747,0.9748,0.9749,\
                0.9750,0.9751,0.9752,0.9753,0.9754,0.9755,0.9756,0.9757,0.9758,0.9759,\
                0.9760,0.9761,0.9762,0.9763,0.9764,0.9765,0.9766,0.9767,0.9768,0.9769,\
                0.9770,0.9771,0.9772,0.9773,0.9774,0.9775,0.9776,0.9777,0.9778,0.9779,\
                0.9780,0.9781,0.9782,0.9783,0.9784,0.9785,0.9786,0.9787,0.9788,0.9789,\
                0.9790,0.9791,0.9792,0.9793,0.9794,0.9795,0.9796,0.9797,0.9798,0.9799,\
                0.9800,0.9801,0.9802,0.9803,0.9804,0.9805,0.9806,0.9807,0.9808,0.9809,\
                0.9810,0.9811,0.9812,0.9813,0.9814,0.9815,0.9816,0.9817,0.9818,0.9819,\
                0.9820,0.9821,0.9822,0.9823,0.9824,0.9825,0.9826,0.9827,0.9828,0.9829,\
                0.9830,0.9831,0.9832,0.9833,0.9834,0.9835,0.9836,0.9837,0.9838,0.9839,\
                0.9840,0.9841,0.9842,0.9843,0.9844,0.9845,0.9846,0.9847,0.9848,0.9849,\
                0.9850,0.9851,0.9852,0.9853,0.9854,0.9855,0.9856,0.9857,0.9858,0.9859,\
                0.9860,0.9861,0.9862,0.9863,0.9864,0.9865,0.9866,0.9867,0.9868,0.9869,\
                0.9870,0.9871,0.9872,0.9873,0.9874,0.9875,0.9876,0.9877,0.9878,0.9879,\
                0.9880,0.9881,0.9882,0.9883,0.9884,0.9885,0.9886,0.9887,0.9888,0.9889,\
                0.9890,0.9891,0.9892,0.9893,0.9894,0.9895,0.9896,0.9897,0.9898,0.9899,\
                0.9900,0.9901,0.9902,0.9903,0.9904,0.9905,0.9906,0.9907,0.9908,0.9909,\
                0.9910,0.9911,0.9912,0.9913,0.9914,0.9915,0.9916,0.9917,0.9918,0.9919,\
                0.9920,0.9921,0.9922,0.9923,0.9924,0.9925,0.9926,0.9927,0.9928,0.9929,\
                0.9930,0.9931,0.9932,0.9933,0.9934,0.9935,0.9936,0.9937,0.9938,0.9939,\
                0.9940,0.9941,0.9942,0.9943,0.9944,0.9945,0.9946,0.9947,0.9948,0.9949,\
                0.9950,0.9951,0.9952,0.9953,0.9954,0.9955,0.9956,0.9957,0.9958,0.9959,\
                0.9960,0.9961,0.9962,0.9963,0.9964,0.9965,0.9966,0.9967,0.9968,0.9969,\
                0.9970,0.9971,0.9972,0.9973,0.9974,0.9975,0.9976,0.9977,0.9978,0.9979,\
                0.9980,0.9981,0.9982,0.9983,0.9984,0.9985,0.9986,0.9987,0.9988,0.9989,\
                0.9990,0.9991,0.9992,0.9993,0.9994,0.9995,0.9996,0.9997,0.9998,0.9999,\
                1.0000,1.0001,1.0002,1.0003,1.0004,1.0005,1.0006,1.0007,1.0008,1.0009,\
                1.0010,1.0011,1.0012,1.0013,1.0014,1.0015,1.0016,1.0017,1.0018,1.0019,\
                1.0020,1.0021,1.0022,1.0023,1.0024,1.0025,1.0026,1.0027,1.0028,1.0029,\
                1.0030,1.0031,1.0032,1.0033,1.0034,1.0035,1.0036,1.0037,1.0038,1.0039,\
                1.0040,1.0041,1.0042,1.0043,1.0044,1.0045,1.0046,1.0047,1.0048,1.0049,\
                1.0050,1.0051,1.0052,1.0053,1.0054,1.0055,1.0056,1.0057,1.0058,1.0059,\
                1.0060,1.0061,1.0062,1.0063,1.0064,1.0065,1.0066,1.0067,1.0068,1.0069,\
                1.0070,1.0071,1.0072,1.0073,1.0074,1.0075,1.0076,1.0077,1.0078,1.0079,\
                1.0080,1.0081,1.0082,1.0083,1.0084,1.0085,1.0086,1.0087,1.0088,1.0089,\
                1.0090,1.0091,1.0092,1.0093,1.0094,1.0095,1.0096,1.0097,1.0098,1.0099,\
                1.0100,1.0101,1.0102,1.0103,1.0104,1.0105,1.0106,1.0107,1.0108,1.0109,\
                1.0110,1.0111,1.0112,1.0113,1.0114,1.0115,1.0116,1.0117,1.0118,1.0119,\
                1.0120,1.0121,1.0122,1.0123,1.0124,1.0125,1.0126,1.0127,1.0128,1.0129,\
                1.0130,1.0131,1.0132,1.0133,1.0134,1.0135,1.0136,1.0137,1.0138,1.0139,\
                1.0140,1.0141,1.0142,1.0143,1.0144,1.0145,1.0146,1.0147,1.0148,1.0149,\
                1.0150,1.0151,1.0152,1.0153,1.0154,1.0155,1.0156,1.0157,1.0158,1.0159,\
                1.0160,1.0161,1.0162,1.0163,1.0164,1.0165,1.0166,1.0167,1.0168,1.0169,\
                1.0170,1.0171,1.0172,1.0173,1.0174,1.0175,1.0176,1.0177,1.0178,1.0179,\
                1.0180,1.0181,1.0182,1.0183,1.0184,1.0185,1.0186,1.0187,1.0188,1.0189,\
                1.0190,1.0191,1.0192,1.0193,1.0194,1.0195,1.0196,1.0197,1.0198,1.0199,\
                1.0200,1.0201,1.0202,1.0203,1.0204,1.0205,1.0206,1.0207,1.0208,1.0209,\
                1.0210,1.0211,1.0212,1.0213,1.0214,1.0215,1.0216,1.0217,1.0218,1.0219,\
                1.0220,1.0221,1.0222,1.0223,1.0224,1.0225,1.0226,1.0227,1.0228,1.0229,\
                1.0230,1.0231,1.0232,1.0233,1.0234,1.0235,1.0236,1.0237,1.0238,1.0239,\
                1.0240,1.0241,1.0242,1.0243,1.0244,1.0245,1.0246,1.0247,1.0248,1.0249,\
                1.0250,1.0251,1.0252,1.0253,1.0254,1.0255,1.0256,1.0257,1.0258,1.0259,\
                1.0260,1.0261,1.0262,1.0263,1.0264,1.0265,1.0266,1.0267,1.0268,1.0269,\
                1.0270,1.0271,1.0272,1.0273,1.0274,1.0275,1.0276,1.0277,1.0278,1.0279,\
                1.0280,1.0281,1.0282,1.0283,1.0284,1.0285,1.0286,1.0287,1.0288,1.0289,\
                1.0290,1.0291,1.0292,1.0293,1.0294,1.0295,1.0296,1.0297,1.0298,1.0299,\
                1.0300,1.0301,1.0302,1.0303,1.0304,1.0305,1.0306,1.0307,1.0308,1.0309,\
                1.0310,1.0311,1.0312,1.0313,1.0314,1.0315,1.0316,1.0317,1.0318,1.0319,\
                1.0320,1.0321,1.0322,1.0323,1.0324,1.0325,1.0326,1.0327,1.0328,1.0329,\
                1.0330,1.0331,1.0332,1.0333,1.0334,1.0335,1.0336,1.0337,1.0338,1.0339,\
                1.0340,1.0341,1.0342,1.0343,1.0344,1.0345,1.0346,1.0347,1.0348,1.0349,\
                1.0350,1.0351,1.0352,1.0353,1.0354,1.0355,1.0356,1.0357,1.0358,1.0359,\
                1.0360,1.0361,1.0362,1.0363,1.0364,1.0365,1.0366,1.0367,1.0368,1.0369,\
                1.0370,1.0371,1.0372,1.0373,1.0374,1.0375,1.0376,1.0377,1.0378,1.0379,\
                1.0380,1.0381,1.0382,1.0383,1.0384,1.0385,1.0386,1.0387,1.0388,1.0389,\
                1.0390,1.0391,1.0392,1.0393,1.0394,1.0395,1.0396,1.0397,1.0398,1.0399,\
                1.0400,1.0401,1.0402,1.0403,1.0404,1.0405,1.0406,1.0407,1.0408,1.0409,\
                1.0410,1.0411,1.0412,1.0413,1.0414,1.0415,1.0416,1.0417,1.0418,1.0419,\
                1.0420,1.0421,1.0422,1.0423,1.0424,1.0425,1.0426,1.0427,1.0428,1.0429,\
                1.0430,1.0431,1.0432,1.0433,1.0434,1.0435,1.0436,1.0437,1.0438,1.0439,\
                1.0440,1.0441,1.0442,1.0443,1.0444,1.0445,1.0446,1.0447,1.0448,1.0449,\
                1.0450,1.0451,1.0452,1.0453,1.0454,1.0455,1.0456,1.0457,1.0458,1.0459,\
                1.0460,1.0461,1.0462,1.0463,1.0464,1.0465,1.0466,1.0467,1.0468,1.0469,\
                1.0470,1.0471,1.0472,1.0473,1.0474,1.0475,1.0476,1.0477,1.0478,1.0479,\
                1.0480,1.0481,1.0482,1.0483,1.0484,1.0485,1.0486,1.0487,1.0488,1.0489,\
                1.0490,1.0491,1.0492,1.0493,1.0494,1.0495,1.0496,1.0497,1.0498,1.0499]
    r_f     = 1000000
    ji_suu  = 1000
    Yaxis_Zoom = 200
    ####  Input End  ####

    print(f"Calculation Start")
    if r_f==1000000:
        print(f" Please wait for 3 minutes and print....")

    x_Range_from = int(r_f*xx_Range_from)
    x_Range_to   = int(r_f*xx_Range_to)
    f_range      = x_Range_to  - x_Range_from

    ksu=[]
    for i in range(len(ksu_init)):
        ksu.append( int(r_f*ksu_init[i]) )

    initial_time=time.time()
    ArgsLists= [(i,r_f,x_Range_from+i*f_range/4,x_Range_from+(i+1)*f_range/4,ksu) for i in range(4)]

    processXY = multi_processing_pool(ArgsLists)
    print(f"Calculation Finished")

    processXYstr = str(processXY)
    processXY.clear()
    processXYstr = processXYstr.replace('[[', '')
    processXYstr = processXYstr.replace(']]', '')
    processesXYstr=processXYstr.split('], [')
    process0XYstr=processesXYstr[0]
    process1XYstr=processesXYstr[1]
    process2XYstr=processesXYstr[2]
    process3XYstr=processesXYstr[3]
    processesXYstr.clear()

    process0sXYstr=process0XYstr.split(', ')
    process1sXYstr=process1XYstr.split(', ')
    process2sXYstr=process2XYstr.split(', ')
    process3sXYstr=process3XYstr.split(', ')
    process0XYstr=''
    process1XYstr=''
    process2XYstr=''
    process3XYstr=''

    if   process0sXYstr[0]=='0' or process0sXYstr[0]=='0.0':
        ProcessAA0=process0sXYstr.copy()
    elif process1sXYstr[0]=='0' or process1sXYstr[0]=='0.0':
        ProcessAA0=process1sXYstr.copy()
    elif process2sXYstr[0]=='0' or process2sXYstr[0]=='0.0':
        ProcessAA0=process2sXYstr.copy()
    elif process3sXYstr[0]=='0' or process3sXYstr[0]=='0.0':
        ProcessAA0=process3sXYstr.copy()
    if   process0sXYstr[0]=='1' or process0sXYstr[0]=='1.0':
        ProcessAA1=process0sXYstr.copy()
    elif process1sXYstr[0]=='1' or process1sXYstr[0]=='1.0':
        ProcessAA1=process1sXYstr.copy()
    elif process2sXYstr[0]=='1' or process2sXYstr[0]=='1.0':
        ProcessAA1=process2sXYstr.copy()
    elif process3sXYstr[0]=='1' or process3sXYstr[0]=='1.0':
        ProcessAA1=process3sXYstr.copy()
    if   process0sXYstr[0]=='2' or process0sXYstr[0]=='2.0':
        ProcessAA2=process0sXYstr.copy()
    elif process1sXYstr[0]=='2' or process1sXYstr[0]=='2.0':
        ProcessAA2=process1sXYstr.copy()
    elif process2sXYstr[0]=='2' or process2sXYstr[0]=='2.0':
        ProcessAA2=process2sXYstr.copy()
    elif process3sXYstr[0]=='2' or process3sXYstr[0]=='2.0':
        ProcessAA2=process3sXYstr.copy()
    if   process0sXYstr[0]=='3' or process0sXYstr[0]=='3.0':
        ProcessAA3=process0sXYstr.copy()
    elif process1sXYstr[0]=='3' or process1sXYstr[0]=='3.0':
        ProcessAA3=process1sXYstr.copy()
    elif process2sXYstr[0]=='3' or process2sXYstr[0]=='3.0':
        ProcessAA3=process2sXYstr.copy()
    elif process3sXYstr[0]=='3' or process3sXYstr[0]=='3.0':
        ProcessAA3=process3sXYstr.copy()
    process0sXYstr.clear()
    process1sXYstr.clear()
    process2sXYstr.clear()
    process3sXYstr.clear()
    ProcessAA0.pop(0)
    ProcessAA1.pop(0)
    ProcessAA2.pop(0)
    ProcessAA3.pop(0)

    answersXY=[]
    for i in range(int(len(ProcessAA0)/2)):
        answersXY.append(( (int(ProcessAA0[2*i])/r_f),\
                           (int(ProcessAA0[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)),\
                            int(ProcessAA0[2*i+1])  ))
    for i in range(int(len(ProcessAA1)/2)):
        answersXY.append(( (int(ProcessAA1[2*i])/r_f),\
                           (int(ProcessAA1[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)),\
                            int(ProcessAA1[2*i+1])  ))
    for i in range(int(len(ProcessAA2)/2)):
        answersXY.append(( (int(ProcessAA2[2*i])/r_f),\
                           (int(ProcessAA2[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)),\
                            int(ProcessAA2[2*i+1])  ))
    for i in range(int(len(ProcessAA3)/2)):
        answersXY.append(( (int(ProcessAA3[2*i])/r_f),\
                           (int(ProcessAA3[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)),\
                            int(ProcessAA3[2*i+1])  ))

    print(f"Time :")
    print(str(time.time() - initial_time))
    print(f"Answers :")
    for i in range(len(answersXY)):
        print(answersXY[i])

    time.sleep(10)

最後に桁数を戻す時に、Yaxis_Zoomという変数で桁数調整して、Y軸をズームアップして、y値を確認しています。しかしYaxis_Zoomを200よりさらに大きくズームアップすると、倍精度浮動小数点の指数部300桁を振り切れます。この最後の徐算の商の浮動小数点表示が少し難しいです。

10000次方程式

最後に10000次方程式を整数型で解くプログラムです。これも今回追加したものです。1GB前後のメモリーを使います。Raspberry Pi 4Bのメモリー2GBの機種でも動きました。Thonnyで45分かかります。64bit 0Sベータ版だと半分くらいに早くなるかもしれません。フル稼働しますからCPUを冷却してください。

eq-10000ji-int.py
import time
from multiprocessing import Pool

def calc_2s(i0, R_f, X_init, X_end, Ksu):
    Ypre=0
    totalsXY=[i0]
    for X in range( int(X_init), int(X_end)+1 ):

        Y0=1
        for j in range(   0, 1000):
            Y0 *= (X-Ksu[j])
        Y1=1
        for j in range(1000, 2000):
            Y1 *= (X-Ksu[j])
        Y2=1
        for j in range(2000, 3000):
            Y2 *= (X-Ksu[j])
        Y3=1
        for j in range(3000, 4000):
            Y3 *= (X-Ksu[j])
        Y4=1
        for j in range(4000, 5000):
            Y4 *= (X-Ksu[j])
        Y5=1
        for j in range(5000, 6000):
            Y5 *= (X-Ksu[j])
        Y6=1
        for j in range(6000, 7000):
            Y6 *= (X-Ksu[j])
        Y7=1
        for j in range(7000, 8000):
            Y7 *= (X-Ksu[j])
        Y8=1
        for j in range(8000, 9000):
            Y8 *= (X-Ksu[j])
        Y9=1
        for j in range(9000, 10000):
            Y9 *= (X-Ksu[j])

        Y = Y0 *  Y1 * Y2 * Y3 * Y4 * Y5 * Y6 * Y7 * Y8 * Y9

        if X == int(X_init):
            Ypre=Y
        if Ypre * Y > 0:
            Ypre=Y
        else:
            if Y == 0.0:
                Y=Y
                totalsXY.append(X)
                totalsXY.append(Y)
            else:
                Ypre=Y
                totalsXY.append(X)
                totalsXY.append(Y)
    return totalsXY



def wrapper_func(args):
    return calc_2s(*args)

def multi_processing_pool(Args_Lists):
    p = Pool(4)
    process_XY = p.map(wrapper_func, Args_Lists)
    p.close()
    return process_XY

if __name__=="__main__":



    ####  Input Start  ####
    xx_Range_from = 0.940
    xx_Range_to   = 1.060
    ksu_init = []
    ksu_temp = 0.94999
    for i in range(10000):
        ksu_temp += 0.00001
        ksu_init.append(ksu_temp)
    r_f     = 200000
    ji_suu  = 10000
    Yaxis_Zoom = 2500
    ####  Input End  ####

    print(f"Calculation Start")
    if r_f==200000:
        print(f" Please wait for 5 minites.")

    x_Range_from = int(r_f*xx_Range_from)
    x_Range_to   = int(r_f*xx_Range_to)
    f_range      = x_Range_to  - x_Range_from

    ksu=[]
    for i in range(len(ksu_init)):
        ksu.append( int(r_f*ksu_init[i]) )

    initial_time=time.time()
    ArgsLists= [(i,r_f,x_Range_from+i*f_range/4,x_Range_from+(i+1)*f_range/4,ksu) for i in range(4)]

    processXY = multi_processing_pool(ArgsLists)
    print(f"Calculation Finished")
    print(f" Please wait for more 40 minutes to print....")

    processXYstr = str(processXY)
    processXY.clear()
    processXYstr = processXYstr.replace('[[', '')
    processXYstr = processXYstr.replace(']]', '')
    processesXYstr=processXYstr.split('], [')
    process0XYstr=processesXYstr[0]
    process1XYstr=processesXYstr[1]
    process2XYstr=processesXYstr[2]
    process3XYstr=processesXYstr[3]
    processesXYstr.clear()

    process0sXYstr=process0XYstr.split(', ')
    process1sXYstr=process1XYstr.split(', ')
    process2sXYstr=process2XYstr.split(', ')
    process3sXYstr=process3XYstr.split(', ')
    process0XYstr=''
    process1XYstr=''
    process2XYstr=''
    process3XYstr=''

    if   process0sXYstr[0]=='0' or process0sXYstr[0]=='0.0':
        ProcessAA0=process0sXYstr.copy()
    elif process1sXYstr[0]=='0' or process1sXYstr[0]=='0.0':
        ProcessAA0=process1sXYstr.copy()
    elif process2sXYstr[0]=='0' or process2sXYstr[0]=='0.0':
        ProcessAA0=process2sXYstr.copy()
    elif process3sXYstr[0]=='0' or process3sXYstr[0]=='0.0':
        ProcessAA0=process3sXYstr.copy()
    if   process0sXYstr[0]=='1' or process0sXYstr[0]=='1.0':
        ProcessAA1=process0sXYstr.copy()
    elif process1sXYstr[0]=='1' or process1sXYstr[0]=='1.0':
        ProcessAA1=process1sXYstr.copy()
    elif process2sXYstr[0]=='1' or process2sXYstr[0]=='1.0':
        ProcessAA1=process2sXYstr.copy()
    elif process3sXYstr[0]=='1' or process3sXYstr[0]=='1.0':
        ProcessAA1=process3sXYstr.copy()
    if   process0sXYstr[0]=='2' or process0sXYstr[0]=='2.0':
        ProcessAA2=process0sXYstr.copy()
    elif process1sXYstr[0]=='2' or process1sXYstr[0]=='2.0':
        ProcessAA2=process1sXYstr.copy()
    elif process2sXYstr[0]=='2' or process2sXYstr[0]=='2.0':
        ProcessAA2=process2sXYstr.copy()
    elif process3sXYstr[0]=='2' or process3sXYstr[0]=='2.0':
        ProcessAA2=process3sXYstr.copy()
    if   process0sXYstr[0]=='3' or process0sXYstr[0]=='3.0':
        ProcessAA3=process0sXYstr.copy()
    elif process1sXYstr[0]=='3' or process1sXYstr[0]=='3.0':
        ProcessAA3=process1sXYstr.copy()
    elif process2sXYstr[0]=='3' or process2sXYstr[0]=='3.0':
        ProcessAA3=process2sXYstr.copy()
    elif process3sXYstr[0]=='3' or process3sXYstr[0]=='3.0':
        ProcessAA3=process3sXYstr.copy()

    process0sXYstr.clear()
    process1sXYstr.clear()
    process2sXYstr.clear()
    process3sXYstr.clear()
    ProcessAA0.pop(0)
    ProcessAA1.pop(0)
    ProcessAA2.pop(0)
    ProcessAA3.pop(0)

    answersXY=[]
    for i in range(int(len(ProcessAA0)/2)):
        answersXY.append(( (int(ProcessAA0[2*i])/r_f),\
                           (int(ProcessAA0[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA1)/2)):
        answersXY.append(( (int(ProcessAA1[2*i])/r_f),\
                           (int(ProcessAA1[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA2)/2)):
        answersXY.append(( (int(ProcessAA2[2*i])/r_f),\
                           (int(ProcessAA2[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))
    for i in range(int(len(ProcessAA3)/2)):
        answersXY.append(( (int(ProcessAA3[2*i])/r_f),\
                           (int(ProcessAA3[2*i+1]))/(r_f**(ji_suu-Yaxis_Zoom)) ))

    print(f"Time :")
    print(str(time.time() - initial_time))
    print(f"Answers :")
    for i in range(len(answersXY)):
        print(answersXY[i])

    time.sleep(10)

最後までご覧いただき、ありがとうございました。

今回はQiitaの主旨に同意して投稿していますので、公開したプログラムはコピー、改変などでのご使用は自由です。著作権に関する問題も発生しません。

ただし、Raspberry Pi 4Bを使う場合にはCPUに特に大きめのヒートシンクが必須です。LAN通信の頻度の少ない今回のプログラムのような場合、LANチップは熱くなりません。しかし計算時間が継続するとCPUの激しい発熱で分かるように相当電力を使っています。電源USB Cタイプの後ろにある黒い小さなチップも熱くなりますので、ファンでの風流も必要です。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0