Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР / Лаб. 1 ЧМ.docx
Скачиваний:
2
Добавлен:
29.12.2024
Размер:
794.72 Кб
Скачать

ЛР1, В15

import numpy as np from sympy import *

1.1

mass = [0]*20 for i in range(1, 21): mass[i-1]=i p = np.poly((mass)) print("Корни полинома: ") print(np.roots(p)) print("") p[1] = p[1] + 10**(-7) print("Корни полинома при погрешности:") print(np.roots(p))

Корни полинома: [20.00032488 18.99715999 18.01122169 16.97113219 16.04827464 14.9353556 14.06527291 12.94905558 12.03344921 10.98404125 10.00605969 8.99839449 8.00028434 6.99997348 5.99999976 5.00000034 3.99999997 3. 2. 1. ] Корни полинома при погрешности: [20.421982 +0.99920896j 20.421982 -0.99920896j 18.15728059+2.47023049j 18.15728059-2.47023049j 15.3149604 +2.6987608j 15.3149604 -2.6987608j 12.8465785 +2.06272946j 12.8465785 -2.06272946j 10.92127532+1.10371747j 10.92127532-1.10371747j 9.56783287+0.j 9.11369137+0.j 7.994086 +0.j 7.00023789+0.j 5.99999854+0.j 4.99999958+0.j 4.00000002+0.j 3. +0.j 2. +0.j 1. +0.j ]

Небольшая погрешность влияет на результат программы

1.2

2.0**(1023)

8.98846567431158e+307

2.0**(1024)

--------------------------------------------------------------------------- OverflowError Traceback (most recent call last) Cell In[36], line 1 ----> 1 2.0**(1024) OverflowError: (34, 'Result too large')

import sys print("Максимальное представимое число: ", sys.float_info.max) print("Минимальное представимое число: ", sys.float_info.min)

Максимальное представимое число: 1.7976931348623157e+308 Минимальное представимое число: 2.2250738585072014e-308

2.0**(1024) Выходит за пределы максимального представимого числа

1.3

print(np.sqrt(2.0))

1.4142135623730951

Мантисса содержит 16 десятичных знаков

1.4

print(10**8 + 10**(-7))

100000000.0000001

print(10**8 + 10**(-8))

100000000.00000001

print(10**8 + 10**(-9))

100000000.0

При 10^8 + 10^(-9) все 17 десятичных знаков не уложились в мантиссу, по итогу получилось 10**8

1.5

a = 10**(-16) c = 0 c1 = 1 for i in range(1, 10**6): c += a c1 += a print("Прибавление единицы после: ", c + 1) print("Прибавление к единице: ", c1)

Прибавление единицы после: 1.0000000001 Прибавление к единице: 1.0

Машинное сложение не коммутативно

1.6

for i in range(0, 100): z = 2**(-i) a = (1+z-1)/z if a != 1: print("n:", i) print(a) break

n: 53 0.0

Все десятичные знаки не уместились в мантиссу

2.1

x = Symbol('x') I = integrate(x*np.e**(x-1),(x,0,1)) print("1: ", I) for i in range(2, 31): I = 1 - i*I print(i,": ", I)

1: 0.367879441171442 2 : 0.264241117657115 3 : 0.207276647028654 4 : 0.170893411885384 5 : 0.145532940573080 6 : 0.126802356561520 7 : 0.112383504069363 8 : 0.100931967445092 9 : 0.0916122929941707 10 : 0.0838770700582927 11 : 0.0773522293587803 12 : 0.0717732476946367 13 : 0.0669477799697233 14 : 0.0627310804238732 15 : 0.0590337936419019 16 : 0.0554593017295701 17 : 0.0571918705973076 18 : -0.0294536707515363 19 : 1.55961974427919 20 : -30.1923948855838 21 : 635.040292597259 22 : -13969.8864371397 23 : 321308.388054213 24 : -7711400.31330112 25 : 192785008.832528 26 : -5012410228.64573 27 : 135335076174.435 28 : -3789382132883.17 29 : 109892081853613. 30 : -3.29676245560839e+15

Для вычисления интегралов, каждое последующее значение интеграла вычисляется на основе предыдущего. Накопление ошибок округления и неточностей в каждом шаге приводит к тому, что значения интегралов становятся все более и более неточными и недостоверными

3.1

def SinusError(x): u = x c = u n = 0 while np.abs(u) >= 10**(-17): u = u * (-x**2/((2*n+2)*(2*n+3))) c += u n += 1 return c print("x = 0:") print("При помощи функции: ", SinusError(0)) print("При помощи библиотеки numpy: ", np.sin(0))

x = 0: При помощи функции: 0 При помощи библиотеки numpy: 0.0

print("x = pi/3:") print("При помощи функции: ", SinusError(np.pi/3)) print("При помощи библиотеки numpy: ", np.sin(np.pi/3))

x = pi/3: При помощи функции: 0.8660254037844385 При помощи библиотеки numpy: 0.8660254037844386

print("x = pi/2:") print("При помощи функции: ", SinusError(np.pi/2)) print("При помощи библиотеки numpy: ", np.sin(np.pi/2))

x = pi/2: При помощи функции: 1.0000000000000002 При помощи библиотеки numpy: 1.0

print("x = pi:") print("При помощи функции: ", SinusError(np.pi)) print("При помощи библиотеки numpy: ", np.sin(np.pi))

x = pi: При помощи функции: 2.4790316006278117e-16 При помощи библиотеки numpy: 1.2246467991473532e-16

print("При помощи функции: ", SinusError(2*np.pi)) print("При помощи библиотеки numpy: ", np.sin(2*np.pi))

При помощи функции: 4.387823975843682e-16 При помощи библиотеки numpy: -2.4492935982947064e-16

print("x = 2pi:") print("При помощи функции: ", SinusError(2*np.pi)) print("При помощи библиотеки numpy: ", np.sin(2*np.pi))

x = 2pi: При помощи функции: 4.387823975843682e-16 При помощи библиотеки numpy: -2.4492935982947064e-16

print("x = 12pi:") print("При помощи функции: ", SinusError(12*np.pi)) print("При помощи библиотеки numpy: ", np.sin(12*np.pi))

x = 12pi: При помощи функции: -0.26048840103934273 При помощи библиотеки numpy: -1.4695761589768238e-15

print("x = 13pi:") print("При помощи функции: ", SinusError(13*np.pi)) print("При помощи библиотеки numpy: ", np.sin(13*np.pi))

x = 13pi: При помощи функции: -2.9021751309903294 При помощи библиотеки numpy: -1.9606728399089416e-15

print("x = 14pi:") print("При помощи функции: ", SinusError(14*np.pi)) print("При помощи библиотеки numpy: ", np.sin(14*np.pi))

x = 14pi: При помощи функции: -83.11717551225941 При помощи библиотеки numpy: -1.7145055188062944e-15

def SinusErrorM(x): u = x c = u n = 0 while np.abs(u) >= 10**(-17): u = u * (-x**2/((2*n+2)*(2*n+3))) c += u print(n, ": ", c) print(round(u,14)) n += 1 return c

print("x = 12pi:") print("При помощи функции: ", SinusErrorM(12*np.pi)) print("При помощи библиотеки numpy: ", np.sin(12*np.pi))

x = 12pi: 0 : -8892.108572083269 1 : 625670.3097986762 2 : -20847061.24603431 3 : 403007670.48768485 4 : -5073284217.755947 5 : 44817947648.575714 6 : -292832375736.82996 7 : 1471419157170.5 8 : -5860144924434.061 9 : 18948873518996.695 10 : -50733238055514.64 11 : 114323131962004.58 12 : -219839140028301.3 13 : 365036621012523.8 14 : -528768651543710.94 15 : 674163773693273.8 16 : -762504521096485.8 17 : 770397935677844.2 18 : -699640040078005.2 19 : 574294003605856.2 20 : -428222278991337.25 21 : 291373293000299.4 22 : -181663618148619.3 23 : 104174372472998.06 24 : -55135249563951.78 25 : 27018053896865.984 26 : -12294460304390.578 27 : 5209252320208.354 28 : -2060379344999.3838 29 : 762508078367.1543 30 : -264617530386.32703 31 : 86289819066.07495 32 : -26491186758.51213 33 : 7670570114.499508 34 : -2098338485.4051456 35 : 543175577.9224882 36 : -133253364.56290472 37 : 31024898.212221712 38 : -6864756.283327311 39 : 1445374.8447843743 40 : -289939.550280608 41 : 55476.24650877825 42 : -10136.275092472395 43 : 1770.010275577586 44 : -296.10535464890927 45 : 47.09370146177122 46 : -7.526948449551824 47 : 0.8094052631567568 48 : -0.41176747587086804 49 : -0.239929968454826 50 : -0.26317567791637614 51 : -0.2601502806890158 52 : -0.260529381749304 53 : -0.2604836132172786 54 : -0.2604889405958155 55 : -0.2604883423504705 56 : -0.2604884072047851 57 : -0.26048840041341714 58 : -0.2604884011007871 59 : -0.26048840103350707 60 : -0.2604884010398792 61 : -0.26048840103929494 62 : -0.26048840103934684 63 : -0.2604884010393424 64 : -0.2604884010393428 65 : -0.26048840103934273 66 : -0.26048840103934273 При помощи функции: -0.26048840103934273 При помощи библиотеки numpy: -1.4695761589768238e-15

print("x = 13pi:") print("При помощи функции: ", SinusErrorM(13*np.pi)) print("При помощи библиотеки numpy: ", np.sin(13*np.pi))

x = 13pi: 0 : -11312.624273273119 1 : 935545.4325849062 2 : -36667415.07299782 3 : 834448587.9892409 4 : -12374545839.904694 5 : 128856966161.22766 6 : -992899970785.3954 7 : 5885957481828.993 8 : -27662816501520.11 9 : 105570799030311.44 10 : -333616474132131.4 11 : 887297167291193.9 12 : -2013613025924397.0 13 : 3945267867808636.0 14 : -6742037195574124.0 15 : 1.0138673933308128e+16 16 : -1.3522169767399196e+16 17 : 1.6106520355435672e+16 18 : -1.7240013466081608e+16 19 : 1.6675102013943292e+16 20 : -1.464780088631318e+16 21 : 1.173878880760396e+16 22 : -8618222801835084.0 23 : 5818318474580480.0 24 : -3624669279450520.0 25 : 2090336359492992.0 26 : -1119232250700977.0 27 : 557911279765784.5 28 : -259567853973112.88 29 : 112979978237006.12 30 : -46107593043880.25 31 : 17678994824063.164 32 : -6381086051440.168 33 : 2172052937648.5537 34 : -698434104094.4639 35 : 212499417659.19092 36 : -61266986074.601746 37 : 16763135496.533676 38 : -4358475487.829628 39 : 1078263502.7974443 40 : -254131480.85520554 41 : 57127024.14415592 42 : -12261871.141633227 43 : 2515723.3329059314 44 : -493859.4433234832 45 : 92848.49834529881 46 : -16737.976780004785 47 : 2891.125621865882 48 : -483.5001616719719 49 : 73.80196020968015 50 : -14.67694701012482 51 : -1.1623356323841847 52 : -3.1498046573036573 53 : -2.868202118824367 54 : -2.906670804768634 55 : -2.90160092879322 56 : -2.9022459605453594 57 : -2.902166687837642 58 : -2.902176104156883 59 : -2.902175022471384 60 : -2.9021751427040607 61 : -2.902175129765759 62 : -2.9021751311143786 63 : -2.9021751309781476 64 : -2.9021751309914903 65 : -2.9021751309902224 66 : -2.902175130990339 67 : -2.9021751309903285 68 : -2.9021751309903294 69 : -2.9021751309903294 70 : -2.9021751309903294 При помощи функции: -2.9021751309903294 При помощи библиотеки numpy: -1.9606728399089416e-15

print("x = 14pi:") print("При помощи функции: ", SinusErrorM(14*np.pi)) print("При помощи библиотеки numpy: ", np.sin(14*np.pi))

x = 14pi: 0 : -14136.22157130686 1 : 1357403.2030116862 2 : -61813170.65560373 3 : 1635406835.7300754 4 : -28211633607.448444 5 : 341899792140.1632 6 : -3067430007215.116 7 : 21179453569720.414 8 : -115967333498321.53 9 : 515705448681284.0 10 : -1899185168562680.5 11 : 5886593085710126.0 12 : -1.556802238374605e+16 13 : 3.5543700748225384e+16 14 : -7.077101706234551e+16 15 : 1.2398249101865978e+17 16 : -1.926052869433913e+17 17 : 2.6717011908832832e+17 18 : -3.3297095290433574e+17 19 : 3.749182990596906e+17 20 : -3.8331593561745754e+17 21 : 3.5747219577988365e+17 22 : -3.053455734963126e+17 23 : 2.3980019090106886e+17 24 : -1.737500502613614e+17 25 : 1.1652177373307411e+17 26 : -7.254022695214893e+16 27 : 4.203670355917965e+16 28 : -2.273316190459357e+16 29 : 1.1500056142096996e+16 30 : -5453909710802516.0 31 : 2429857466011994.0 32 : -1018965236880057.5 33 : 402933544556408.0 34 : -150503352898141.5 35 : 53186113390511.78 36 : -17809481704236.844 37 : 5658887026077.145 38 : -1708560069052.7773 39 : 490807600990.1094 40 : -134309973478.05237 41 : 35053329067.77084 42 : -8734904566.69854 43 : 2080445089.2461567 44 : -474093570.39631987 45 : 103466978.41155982 46 : -21645860.372799367 47 : 4344645.207374964 48 : -837496.3736477848 49 : 155033.7968082088 50 : -27718.202730635967 51 : 4655.719250633876 52 : -865.836856040909 53 : 41.496867409197876 54 : -102.25291820940276 55 : -80.28107171033429 56 : -83.5231215081851 57 : -83.06102610626422 58 : -83.12468491321866 59 : -83.11620390087073 60 : -83.1172971989123 61 : -83.1171607523216 62 : -83.1171772470147 63 : -83.1171753145998 64 : -83.11717553410335 65 : -83.11717550991692 66 : -83.11717551250328 67 : -83.11717551223475 68 : -83.11717551226184 69 : -83.11717551225918 70 : -83.11717551225944 71 : -83.11717551225941 72 : -83.11717551225941 73 : -83.11717551225941 74 : -83.11717551225941 75 : -83.11717551225941 При помощи функции: -83.11717551225941 При помощи библиотеки numpy: -1.7145055188062944e-15

x = Symbol('x') for i in range(1, 31): I = integrate(x**(i)*np.e**(x-1),(x,0,1)) print(i,": ", I)

print("x = 0:") print("При помощи функции: ", SinusErrorM(0)) print("При помощи библиотеки numpy: ", np.sin(0))

x = 0: При помощи функции: 0 При помощи библиотеки numpy: 0.0

print("x = pi/3:") print("При помощи функции: ", SinusErrorM(np.pi/3)) print("При помощи библиотеки numpy: ", np.sin(np.pi/3))

x = pi/3: 0 : 0.8558007815651173 -0.19139676963148 1 : 0.8662952837868347 0.01049450222172 2 : 0.8660212716563725 -0.00027401213046 3 : 0.8660254450997811 4.17344341e-06 4 : 0.8660254034934827 -4.16063e-08 5 : 0.8660254037859597 2.9248e-10 6 : 0.8660254037844324 -1.53e-12 7 : 0.8660254037844385 1e-14 8 : 0.8660254037844385 -0.0 9 : 0.8660254037844385 0.0 При помощи функции: 0.8660254037844385 При помощи библиотеки numpy: 0.8660254037844386

print("x = pi/2:") print("При помощи функции: ", SinusErrorM(np.pi/2)) print("При помощи библиотеки numpy: ", np.sin(np.pi/2))

x = pi/2: 0 : 0.9248322292886504 -0.6459640975062462 1 : 1.0045248555348174 0.079692626246167 2 : 0.9998431013994987 -0.0046817541353187 3 : 1.0000035425842861 0.0001604411847874 4 : 0.999999943741051 -3.5988432352e-06 5 : 1.0000000006627803 5.69217292e-08 6 : 0.9999999999939768 -6.688035e-10 7 : 1.0000000000000437 6.0669e-12 8 : 1.0 -4.38e-14 9 : 1.0000000000000002 3e-16 10 : 1.0000000000000002 -0.0 При помощи функции: 1.0000000000000002 При помощи библиотеки numpy: 1.0

print("x = pi:") print("При помощи функции: ", SinusErrorM(np.pi)) print("При помощи библиотеки numpy: ", np.sin(np.pi))

x = pi: 0 : -2.0261201264601763 -5.167712780049969 1 : 0.5240439134171688 2.550164039877345 2 : -0.07522061590362317 -0.599264529320792 3 : 0.006925270707505052 0.0821458866111282 4 : -0.0004451602382092978 -0.0073704309457143 5 : 2.1142567558314672e-05 0.0004663028057676 6 : -7.727858895155385e-07 -2.19153534478e-05 7 : 2.2419510632012503e-08 7.952054001e-07 8 : -5.289183652573602e-10 -2.2948429e-08 9 : 1.0348101003452372e-11 5.392665e-10 10 : -1.70370713479687e-13 -1.05185e-11 11 : 2.6512111039239643e-15 1.73e-13 12 : 2.186499239305769e-16 -2.4e-15 13 : 2.48216939359126e-16 0.0 14 : 2.4790316006278117e-16 -0.0 При помощи функции: 2.4790316006278117e-16 При помощи библиотеки numpy: 1.2246467991473532e-16

Соседние файлы в папке ЛР