Thursday, January 9, 2020

ЛР11 Программирование (2.3 В21) - IV

LabWork11
📑 IT Online Mini Campus. Task 2.3
IV. Программа SageMath (Python)
var('k'); E=10^(-4)
X1,X2,H=.5,.7,.05; SEG=[X1,X1+H,..,X2]
def nfind(controlf,sumf,e,seg):
    cond=True; n=1
    while cond:
        diff=[abs(controlf(x)-sumf(x,n)).n()<e for x in seg]
        cond=sum(diff)!=len(diff); n+=1
    return(n-1)
def nplottable(controlf,sumf,n,seg,var):
    t=[['x','sumf(x)','controlf(x)']]
    sumline3,sumlinen,controlline=[],[],[]
    for x in seg:
        t+=[[x,sumf(x,n).n(),controlf(x).n()]]
        sumline3+=[[x,sumf(x,2).n()]]
        sumlinen+=[[x,sumf(x,n).n()]]
        controlline+=[[x,controlf(x).n()]]
    (list_plot(sumline3,size=50,
               legend_label='sum function n=2',
               title='Variant %d: N = %d'%(var,n))+\
     list_plot(sumlinen,size=50,color='green',
               legend_label='sum function n=%d'%n)+\
     list_plot(controlline,color='red',
               legend_label='control function'))\
    .show(gridlines=True) 
    show(table(t))
controlf21(x)=2*x-x*exp(-x^2)-sin(x)
sumf21(x,n)=sum((-1)^(k+1)*x^(2*k+1)*(1/factorial(k)+\
                1/factorial(2*k+1)),k,1,n)
N21=nfind(controlf21,sumf21,E,SEG)
nplottable(controlf21,sumf21,N21,SEG,21)



No comments:

Post a Comment