1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560 |
- from sympy.core.function import (Derivative, Function, diff)
- from sympy.core.mul import Mul
- from sympy.core.numbers import (I, Rational, pi)
- from sympy.core.relational import Eq
- from sympy.core.singleton import S
- from sympy.core.symbol import (Symbol, symbols)
- from sympy.functions.elementary.hyperbolic import sinh
- from sympy.functions.elementary.miscellaneous import sqrt
- from sympy.matrices.dense import Matrix
- from sympy.core.containers import Tuple
- from sympy.functions import exp, cos, sin, log, Ci, Si, erf, erfi
- from sympy.matrices import dotprodsimp, NonSquareMatrixError
- from sympy.solvers.ode import dsolve
- from sympy.solvers.ode.ode import constant_renumber
- from sympy.solvers.ode.subscheck import checksysodesol
- from sympy.solvers.ode.systems import (_classify_linear_system, linear_ode_to_matrix,
- ODEOrderError, ODENonlinearError, _simpsol,
- _is_commutative_anti_derivative, linodesolve,
- canonical_odes, dsolve_system, _component_division,
- _eqs2dict, _dict2graph)
- from sympy.functions import airyai, airybi
- from sympy.integrals.integrals import Integral
- from sympy.simplify.ratsimp import ratsimp
- from sympy.testing.pytest import ON_CI, raises, slow, skip, XFAIL
- C0, C1, C2, C3, C4, C5, C6, C7, C8, C9, C10 = symbols('C0:11')
- x = symbols('x')
- f = Function('f')
- g = Function('g')
- h = Function('h')
- def test_linear_ode_to_matrix():
- f, g, h = symbols("f, g, h", cls=Function)
- t = Symbol("t")
- funcs = [f(t), g(t), h(t)]
- f1 = f(t).diff(t)
- g1 = g(t).diff(t)
- h1 = h(t).diff(t)
- f2 = f(t).diff(t, 2)
- g2 = g(t).diff(t, 2)
- h2 = h(t).diff(t, 2)
- eqs_1 = [Eq(f1, g(t)), Eq(g1, f(t))]
- sol_1 = ([Matrix([[1, 0], [0, 1]]), Matrix([[ 0, 1], [1, 0]])], Matrix([[0],[0]]))
- assert linear_ode_to_matrix(eqs_1, funcs[:-1], t, 1) == sol_1
- eqs_2 = [Eq(f1, f(t) + 2*g(t)), Eq(g1, h(t)), Eq(h1, g(t) + h(t) + f(t))]
- sol_2 = ([Matrix([[1, 0, 0], [0, 1, 0], [0, 0, 1]]), Matrix([[1, 2, 0], [ 0, 0, 1], [1, 1, 1]])],
- Matrix([[0], [0], [0]]))
- assert linear_ode_to_matrix(eqs_2, funcs, t, 1) == sol_2
- eqs_3 = [Eq(2*f1 + 3*h1, f(t) + g(t)), Eq(4*h1 + 5*g1, f(t) + h(t)), Eq(5*f1 + 4*g1, g(t) + h(t))]
- sol_3 = ([Matrix([[2, 0, 3], [0, 5, 4], [5, 4, 0]]), Matrix([[1, 1, 0], [1, 0, 1], [0, 1, 1]])],
- Matrix([[0], [0], [0]]))
- assert linear_ode_to_matrix(eqs_3, funcs, t, 1) == sol_3
- eqs_4 = [Eq(f2 + h(t), f1 + g(t)), Eq(2*h2 + g2 + g1 + g(t), 0), Eq(3*h1, 4)]
- sol_4 = ([Matrix([[1, 0, 0], [0, 1, 2], [0, 0, 0]]), Matrix([[1, 0, 0], [0, -1, 0], [0, 0, -3]]),
- Matrix([[0, 1, -1], [0, -1, 0], [0, 0, 0]])], Matrix([[0], [0], [4]]))
- assert linear_ode_to_matrix(eqs_4, funcs, t, 2) == sol_4
- eqs_5 = [Eq(f2, g(t)), Eq(f1 + g1, f(t))]
- raises(ODEOrderError, lambda: linear_ode_to_matrix(eqs_5, funcs[:-1], t, 1))
- eqs_6 = [Eq(f1, f(t)**2), Eq(g1, f(t) + g(t))]
- raises(ODENonlinearError, lambda: linear_ode_to_matrix(eqs_6, funcs[:-1], t, 1))
- def test__classify_linear_system():
- x, y, z, w = symbols('x, y, z, w', cls=Function)
- t, k, l = symbols('t k l')
- x1 = diff(x(t), t)
- y1 = diff(y(t), t)
- z1 = diff(z(t), t)
- w1 = diff(w(t), t)
- x2 = diff(x(t), t, t)
- y2 = diff(y(t), t, t)
- funcs = [x(t), y(t)]
- funcs_2 = funcs + [z(t), w(t)]
- eqs_1 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * t * x(t) + 3 * y(t) + t))
- assert _classify_linear_system(eqs_1, funcs, t) is None
- eqs_2 = (5 * (x1**2) + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * t * x(t) + 3 * y(t) + t))
- sol2 = {'is_implicit': True,
- 'canon_eqs': [[Eq(Derivative(x(t), t), -sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)],
- [Eq(Derivative(x(t), t), sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]]}
- assert _classify_linear_system(eqs_2, funcs, t) == sol2
- eqs_2_1 = [Eq(Derivative(x(t), t), -sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]
- assert _classify_linear_system(eqs_2_1, funcs, t) is None
- eqs_2_2 = [Eq(Derivative(x(t), t), sqrt(-12*x(t)/5 + 6*y(t)/5)),
- Eq(Derivative(y(t), t), 11*t*x(t)/2 - t/2 - 3*y(t)/2)]
- assert _classify_linear_system(eqs_2_2, funcs, t) is None
- eqs_3 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * x(t) + 3 * y(t)), (5 * w1 + z(t)), (z1 + w(t)))
- answer_3 = {'no_of_equation': 4,
- 'eq': (12*x(t) - 6*y(t) + 5*Derivative(x(t), t),
- -11*x(t) + 3*y(t) + 2*Derivative(y(t), t),
- z(t) + 5*Derivative(w(t), t),
- w(t) + Derivative(z(t), t)),
- 'func': [x(t), y(t), z(t), w(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1},
- 'is_linear': True,
- 'is_constant': True,
- 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [Rational(12, 5), Rational(-6, 5), 0, 0],
- [Rational(-11, 2), Rational(3, 2), 0, 0],
- [0, 0, 0, 1],
- [0, 0, Rational(1, 5), 0]]),
- 'type_of_equation': 'type1',
- 'is_general': True}
- assert _classify_linear_system(eqs_3, funcs_2, t) == answer_3
- eqs_4 = (5 * x1 + 12 * x(t) - 6 * (y(t)), (2 * y1 - 11 * x(t) + 3 * y(t)), (z1 - w(t)), (w1 - z(t)))
- answer_4 = {'no_of_equation': 4,
- 'eq': (12 * x(t) - 6 * y(t) + 5 * Derivative(x(t), t),
- -11 * x(t) + 3 * y(t) + 2 * Derivative(y(t), t),
- -w(t) + Derivative(z(t), t),
- -z(t) + Derivative(w(t), t)),
- 'func': [x(t), y(t), z(t), w(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1},
- 'is_linear': True,
- 'is_constant': True,
- 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [Rational(12, 5), Rational(-6, 5), 0, 0],
- [Rational(-11, 2), Rational(3, 2), 0, 0],
- [0, 0, 0, -1],
- [0, 0, -1, 0]]),
- 'type_of_equation': 'type1',
- 'is_general': True}
- assert _classify_linear_system(eqs_4, funcs_2, t) == answer_4
- eqs_5 = (5*x1 + 12*x(t) - 6*(y(t)) + x2, (2*y1 - 11*x(t) + 3*y(t)), (z1 - w(t)), (w1 - z(t)))
- answer_5 = {'no_of_equation': 4, 'eq': (12*x(t) - 6*y(t) + 5*Derivative(x(t), t) + Derivative(x(t), (t, 2)),
- -11*x(t) + 3*y(t) + 2*Derivative(y(t), t), -w(t) + Derivative(z(t), t), -z(t) + Derivative(w(t),
- t)), 'func': [x(t), y(t), z(t), w(t)], 'order': {x(t): 2, y(t): 1, z(t): 1, w(t): 1}, 'is_linear':
- True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation': 'type0', 'is_higher_order': True}
- assert _classify_linear_system(eqs_5, funcs_2, t) == answer_5
- eqs_6 = (Eq(x1, 3*y(t) - 11*z(t)), Eq(y1, 7*z(t) - 3*x(t)), Eq(z1, 11*x(t) - 7*y(t)))
- answer_6 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)), Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ 0, -3, 11],
- [ 3, 0, -7],
- [-11, 7, 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_6, funcs_2[:-1], t) == answer_6
- eqs_7 = (Eq(x1, y(t)), Eq(y1, x(t)))
- answer_7 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True,
- 'is_homogeneous': True, 'func_coeff': -Matrix([
- [ 0, -1],
- [-1, 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_7, funcs, t) == answer_7
- eqs_8 = (Eq(x1, 21*x(t)), Eq(y1, 17*x(t) + 3*y(t)), Eq(z1, 5*x(t) + 7*y(t) + 9*z(t)))
- answer_8 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 21*x(t)), Eq(Derivative(y(t), t), 17*x(t) + 3*y(t)),
- Eq(Derivative(z(t), t), 5*x(t) + 7*y(t) + 9*z(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-21, 0, 0],
- [-17, -3, 0],
- [ -5, -7, -9]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_8, funcs_2[:-1], t) == answer_8
- eqs_9 = (Eq(x1, 4*x(t) + 5*y(t) + 2*z(t)), Eq(y1, x(t) + 13*y(t) + 9*z(t)), Eq(z1, 32*x(t) + 41*y(t) + 11*z(t)))
- answer_9 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 4*x(t) + 5*y(t) + 2*z(t)),
- Eq(Derivative(y(t), t), x(t) + 13*y(t) + 9*z(t)), Eq(Derivative(z(t), t), 32*x(t) + 41*y(t) + 11*z(t))),
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True,
- 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ -4, -5, -2],
- [ -1, -13, -9],
- [-32, -41, -11]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_9, funcs_2[:-1], t) == answer_9
- eqs_10 = (Eq(3*x1, 4*5*(y(t) - z(t))), Eq(4*y1, 3*5*(z(t) - x(t))), Eq(5*z1, 3*4*(x(t) - y(t))))
- answer_10 = {'no_of_equation': 3, 'eq': (Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)),
- Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)), Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t))),
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True,
- 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [ 0, Rational(-20, 3), Rational(20, 3)],
- [Rational(15, 4), 0, Rational(-15, 4)],
- [Rational(-12, 5), Rational(12, 5), 0]]),
- 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eqs_10, funcs_2[:-1], t) == answer_10
- eq11 = (Eq(x1, 3*y(t) - 11*z(t)), Eq(y1, 7*z(t) - 3*x(t)), Eq(z1, 11*x(t) - 7*y(t)))
- sol11 = {'no_of_equation': 3, 'eq': (Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)), Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))), 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1},
- 'is_linear': True, 'is_constant': True, 'is_homogeneous': True, 'func_coeff': -Matrix([
- [ 0, -3, 11], [ 3, 0, -7], [-11, 7, 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq11, funcs_2[:-1], t) == sol11
- eq12 = (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t)))
- sol12 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), y(t)), Eq(Derivative(y(t), t), x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True,
- 'is_homogeneous': True, 'func_coeff': -Matrix([
- [0, -1],
- [-1, 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq12, [x(t), y(t)], t) == sol12
- eq13 = (Eq(Derivative(x(t), t), 21*x(t)), Eq(Derivative(y(t), t), 17*x(t) + 3*y(t)),
- Eq(Derivative(z(t), t), 5*x(t) + 7*y(t) + 9*z(t)))
- sol13 = {'no_of_equation': 3, 'eq': (
- Eq(Derivative(x(t), t), 21 * x(t)), Eq(Derivative(y(t), t), 17 * x(t) + 3 * y(t)),
- Eq(Derivative(z(t), t), 5 * x(t) + 7 * y(t) + 9 * z(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-21, 0, 0],
- [-17, -3, 0],
- [-5, -7, -9]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq13, [x(t), y(t), z(t)], t) == sol13
- eq14 = (
- Eq(Derivative(x(t), t), 4*x(t) + 5*y(t) + 2*z(t)), Eq(Derivative(y(t), t), x(t) + 13*y(t) + 9*z(t)),
- Eq(Derivative(z(t), t), 32*x(t) + 41*y(t) + 11*z(t)))
- sol14 = {'no_of_equation': 3, 'eq': (
- Eq(Derivative(x(t), t), 4 * x(t) + 5 * y(t) + 2 * z(t)), Eq(Derivative(y(t), t), x(t) + 13 * y(t) + 9 * z(t)),
- Eq(Derivative(z(t), t), 32 * x(t) + 41 * y(t) + 11 * z(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [-4, -5, -2],
- [-1, -13, -9],
- [-32, -41, -11]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq14, [x(t), y(t), z(t)], t) == sol14
- eq15 = (Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)), Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)),
- Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t)))
- sol15 = {'no_of_equation': 3, 'eq': (
- Eq(3 * Derivative(x(t), t), 20 * y(t) - 20 * z(t)), Eq(4 * Derivative(y(t), t), -15 * x(t) + 15 * z(t)),
- Eq(5 * Derivative(z(t), t), 12 * x(t) - 12 * y(t))), 'func': [x(t), y(t), z(t)],
- 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': True,
- 'func_coeff': -Matrix([
- [0, Rational(-20, 3), Rational(20, 3)],
- [Rational(15, 4), 0, Rational(-15, 4)],
- [Rational(-12, 5), Rational(12, 5), 0]]), 'type_of_equation': 'type1', 'is_general': True}
- assert _classify_linear_system(eq15, [x(t), y(t), z(t)], t) == sol15
- # Constant coefficient homogeneous ODEs
- eq1 = (Eq(diff(x(t), t), x(t) + y(t) + 9), Eq(diff(y(t), t), 2*x(t) + 5*y(t) + 23))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), x(t) + y(t) + 9),
- Eq(Derivative(y(t), t), 2*x(t) + 5*y(t) + 23)), 'func': [x(t), y(t)],
- 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': True, 'is_homogeneous': False, 'is_general': True,
- 'func_coeff': -Matrix([[-1, -1], [-2, -5]]), 'rhs': Matrix([[ 9], [23]]), 'type_of_equation': 'type2'}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- # Non constant coefficient homogeneous ODEs
- eq1 = (Eq(diff(x(t), t), 5*t*x(t) + 2*y(t)), Eq(diff(y(t), t), 2*x(t) + 5*t*y(t)))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), t), 5*t*x(t) + 2*y(t)), Eq(Derivative(y(t), t), 5*t*y(t) + 2*x(t))),
- 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': True, 'func_coeff': -Matrix([ [-5*t, -2], [ -2, -5*t]]), 'commutative_antiderivative': Matrix([
- [5*t**2/2, 2*t], [ 2*t, 5*t**2/2]]), 'type_of_equation': 'type3', 'is_general': True}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- # Non constant coefficient non-homogeneous ODEs
- eq1 = [Eq(x1, x(t) + t*y(t) + t), Eq(y1, t*x(t) + y(t))]
- sol1 = {'no_of_equation': 2, 'eq': [Eq(Derivative(x(t), t), t*y(t) + t + x(t)), Eq(Derivative(y(t), t),
- t*x(t) + y(t))], 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True,
- 'is_constant': False, 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-1, -t],
- [-t, -1]]), 'commutative_antiderivative': Matrix([ [ t, t**2/2], [t**2/2, t]]), 'rhs':
- Matrix([ [t], [0]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- eq2 = [Eq(x1, t*x(t) + t*y(t) + t), Eq(y1, t*x(t) + t*y(t) + cos(t))]
- sol2 = {'no_of_equation': 2, 'eq': [Eq(Derivative(x(t), t), t*x(t) + t*y(t) + t), Eq(Derivative(y(t), t),
- t*x(t) + t*y(t) + cos(t))], 'func': [x(t), y(t)], 'order': {x(t): 1, y(t): 1}, 'is_linear': True,
- 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([ [ t], [cos(t)]]), 'func_coeff':
- Matrix([ [t, t], [t, t]]), 'is_constant': False, 'type_of_equation': 'type4',
- 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2], [t**2/2, t**2/2]])}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = [Eq(x1, t*(x(t) + y(t) + z(t) + 1)), Eq(y1, t*(x(t) + y(t) + z(t))), Eq(z1, t*(x(t) + y(t) + z(t)))]
- sol3 = {'no_of_equation': 3, 'eq': [Eq(Derivative(x(t), t), t*(x(t) + y(t) + z(t) + 1)),
- Eq(Derivative(y(t), t), t*(x(t) + y(t) + z(t))), Eq(Derivative(z(t), t), t*(x(t) + y(t) + z(t)))],
- 'func': [x(t), y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant':
- False, 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-t, -t, -t], [-t, -t,
- -t], [-t, -t, -t]]), 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2, t**2/2], [t**2/2,
- t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2]]), 'rhs': Matrix([ [t], [0], [0]]), 'type_of_equation':
- 'type4'}
- assert _classify_linear_system(eq3, funcs_2[:-1], t) == sol3
- eq4 = [Eq(x1, x(t) + y(t) + t*z(t) + 1), Eq(y1, x(t) + t*y(t) + z(t) + 10), Eq(z1, t*x(t) + y(t) + z(t) + t)]
- sol4 = {'no_of_equation': 3, 'eq': [Eq(Derivative(x(t), t), t*z(t) + x(t) + y(t) + 1), Eq(Derivative(y(t),
- t), t*y(t) + x(t) + z(t) + 10), Eq(Derivative(z(t), t), t*x(t) + t + y(t) + z(t))], 'func': [x(t),
- y(t), z(t)], 'order': {x(t): 1, y(t): 1, z(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-1, -1, -t], [-1, -t, -1], [-t,
- -1, -1]]), 'commutative_antiderivative': Matrix([ [ t, t, t**2/2], [ t, t**2/2,
- t], [t**2/2, t, t]]), 'rhs': Matrix([ [ 1], [10], [ t]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq4, funcs_2[:-1], t) == sol4
- sum_terms = t*(x(t) + y(t) + z(t) + w(t))
- eq5 = [Eq(x1, sum_terms), Eq(y1, sum_terms), Eq(z1, sum_terms + 1), Eq(w1, sum_terms)]
- sol5 = {'no_of_equation': 4, 'eq': [Eq(Derivative(x(t), t), t*(w(t) + x(t) + y(t) + z(t))),
- Eq(Derivative(y(t), t), t*(w(t) + x(t) + y(t) + z(t))), Eq(Derivative(z(t), t), t*(w(t) + x(t) +
- y(t) + z(t)) + 1), Eq(Derivative(w(t), t), t*(w(t) + x(t) + y(t) + z(t)))], 'func': [x(t), y(t),
- z(t), w(t)], 'order': {x(t): 1, y(t): 1, z(t): 1, w(t): 1}, 'is_linear': True, 'is_constant': False,
- 'is_homogeneous': False, 'is_general': True, 'func_coeff': -Matrix([ [-t, -t, -t, -t], [-t, -t, -t,
- -t], [-t, -t, -t, -t], [-t, -t, -t, -t]]), 'commutative_antiderivative': Matrix([ [t**2/2, t**2/2,
- t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2, t**2/2], [t**2/2, t**2/2, t**2/2, t**2/2], [t**2/2,
- t**2/2, t**2/2, t**2/2]]), 'rhs': Matrix([ [0], [0], [1], [0]]), 'type_of_equation': 'type4'}
- assert _classify_linear_system(eq5, funcs_2, t) == sol5
- # Second Order
- t_ = symbols("t_")
- eq1 = (Eq(9*x(t) + 7*y(t) + 4*Derivative(x(t), t) + Derivative(x(t), (t, 2)) + 3*Derivative(y(t), t), 11*exp(I*t)),
- Eq(3*x(t) + 12*y(t) + 5*Derivative(x(t), t) + 8*Derivative(y(t), t) + Derivative(y(t), (t, 2)), 2*exp(I*t)))
- sol1 = {'no_of_equation': 2, 'eq': (Eq(9*x(t) + 7*y(t) + 4*Derivative(x(t), t) + Derivative(x(t), (t, 2)) +
- 3*Derivative(y(t), t), 11*exp(I*t)), Eq(3*x(t) + 12*y(t) + 5*Derivative(x(t), t) +
- 8*Derivative(y(t), t) + Derivative(y(t), (t, 2)), 2*exp(I*t))), 'func': [x(t), y(t)], 'order':
- {x(t): 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([
- [11*exp(I*t)], [ 2*exp(I*t)]]), 'type_of_equation': 'type0', 'is_second_order': True,
- 'is_higher_order': True}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- eq2 = (Eq((4*t**2 + 7*t + 1)**2*Derivative(x(t), (t, 2)), 5*x(t) + 35*y(t)),
- Eq((4*t**2 + 7*t + 1)**2*Derivative(y(t), (t, 2)), x(t) + 9*y(t)))
- sol2 = {'no_of_equation': 2, 'eq': (Eq((4*t**2 + 7*t + 1)**2*Derivative(x(t), (t, 2)), 5*x(t) + 35*y(t)),
- Eq((4*t**2 + 7*t + 1)**2*Derivative(y(t), (t, 2)), x(t) + 9*y(t))), 'func': [x(t), y(t)], 'order':
- {x(t): 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': True, 'is_general': True,
- 'type_of_equation': 'type2', 'A0': Matrix([ [Rational(53, 4), 35], [ 1, Rational(69, 4)]]), 'g(t)': sqrt(4*t**2 + 7*t
- + 1), 'tau': sqrt(33)*log(t - sqrt(33)/8 + Rational(7, 8))/33 - sqrt(33)*log(t + sqrt(33)/8 + Rational(7, 8))/33,
- 'is_transformed': True, 't_': t_, 'is_second_order': True, 'is_higher_order': True}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = ((t*Derivative(x(t), t) - x(t))*log(t) + (t*Derivative(y(t), t) - y(t))*exp(t) + Derivative(x(t), (t, 2)),
- t**2*(t*Derivative(x(t), t) - x(t)) + t*(t*Derivative(y(t), t) - y(t)) + Derivative(y(t), (t, 2)))
- sol3 = {'no_of_equation': 2, 'eq': ((t*Derivative(x(t), t) - x(t))*log(t) + (t*Derivative(y(t), t) -
- y(t))*exp(t) + Derivative(x(t), (t, 2)), t**2*(t*Derivative(x(t), t) - x(t)) + t*(t*Derivative(y(t),
- t) - y(t)) + Derivative(y(t), (t, 2))), 'func': [x(t), y(t)], 'order': {x(t): 2, y(t): 2},
- 'is_linear': True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation': 'type1', 'A1':
- Matrix([ [-t*log(t), -t*exp(t)], [ -t**3, -t**2]]), 'is_second_order': True,
- 'is_higher_order': True}
- assert _classify_linear_system(eq3, funcs, t) == sol3
- eq4 = (Eq(x2, k*x(t) - l*y1), Eq(y2, l*x1 + k*y(t)))
- sol4 = {'no_of_equation': 2, 'eq': (Eq(Derivative(x(t), (t, 2)), k*x(t) - l*Derivative(y(t), t)),
- Eq(Derivative(y(t), (t, 2)), k*y(t) + l*Derivative(x(t), t))), 'func': [x(t), y(t)], 'order': {x(t):
- 2, y(t): 2}, 'is_linear': True, 'is_homogeneous': True, 'is_general': True, 'type_of_equation':
- 'type0', 'is_second_order': True, 'is_higher_order': True}
- assert _classify_linear_system(eq4, funcs, t) == sol4
- # Multiple matches
- f, g = symbols("f g", cls=Function)
- y, t_ = symbols("y t_")
- funcs = [f(t), g(t)]
- eq1 = [Eq(Derivative(f(t), t)**2 - 2*Derivative(f(t), t) + 1, 4),
- Eq(-y*f(t) + Derivative(g(t), t), 0)]
- sol1 = {'is_implicit': True,
- 'canon_eqs': [[Eq(Derivative(f(t), t), -1), Eq(Derivative(g(t), t), y*f(t))],
- [Eq(Derivative(f(t), t), 3), Eq(Derivative(g(t), t), y*f(t))]]}
- assert _classify_linear_system(eq1, funcs, t) == sol1
- raises(ValueError, lambda: _classify_linear_system(eq1, funcs[:1], t))
- eq2 = [Eq(Derivative(f(t), t), (2*f(t) + g(t) + 1)/t), Eq(Derivative(g(t), t), (f(t) + 2*g(t))/t)]
- sol2 = {'no_of_equation': 2, 'eq': [Eq(Derivative(f(t), t), (2*f(t) + g(t) + 1)/t), Eq(Derivative(g(t), t),
- (f(t) + 2*g(t))/t)], 'func': [f(t), g(t)], 'order': {f(t): 1, g(t): 1}, 'is_linear': True,
- 'is_homogeneous': False, 'is_general': True, 'rhs': Matrix([ [1], [0]]), 'func_coeff': Matrix([ [2,
- 1], [1, 2]]), 'is_constant': False, 'type_of_equation': 'type6', 't_': t_, 'tau': log(t),
- 'commutative_antiderivative': Matrix([ [2*log(t), log(t)], [ log(t), 2*log(t)]])}
- assert _classify_linear_system(eq2, funcs, t) == sol2
- eq3 = [Eq(Derivative(f(t), t), (2*f(t) + g(t))/t), Eq(Derivative(g(t), t), (f(t) + 2*g(t))/t)]
- sol3 = {'no_of_equation': 2, 'eq': [Eq(Derivative(f(t), t), (2*f(t) + g(t))/t), Eq(Derivative(g(t), t),
- (f(t) + 2*g(t))/t)], 'func': [f(t), g(t)], 'order': {f(t): 1, g(t): 1}, 'is_linear': True,
- 'is_homogeneous': True, 'is_general': True, 'func_coeff': Matrix([ [2, 1], [1, 2]]), 'is_constant':
- False, 'type_of_equation': 'type5', 't_': t_, 'rhs': Matrix([ [0], [0]]), 'tau': log(t),
- 'commutative_antiderivative': Matrix([ [2*log(t), log(t)], [ log(t), 2*log(t)]])}
- assert _classify_linear_system(eq3, funcs, t) == sol3
- def test_matrix_exp():
- from sympy.matrices.dense import Matrix, eye, zeros
- from sympy.solvers.ode.systems import matrix_exp
- t = Symbol('t')
- for n in range(1, 6+1):
- assert matrix_exp(zeros(n), t) == eye(n)
- for n in range(1, 6+1):
- A = eye(n)
- expAt = exp(t) * eye(n)
- assert matrix_exp(A, t) == expAt
- for n in range(1, 6+1):
- A = Matrix(n, n, lambda i,j: i+1 if i==j else 0)
- expAt = Matrix(n, n, lambda i,j: exp((i+1)*t) if i==j else 0)
- assert matrix_exp(A, t) == expAt
- A = Matrix([[0, 1], [-1, 0]])
- expAt = Matrix([[cos(t), sin(t)], [-sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[2, -5], [2, -4]])
- expAt = Matrix([
- [3*exp(-t)*sin(t) + exp(-t)*cos(t), -5*exp(-t)*sin(t)],
- [2*exp(-t)*sin(t), -3*exp(-t)*sin(t) + exp(-t)*cos(t)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[21, 17, 6], [-5, -1, -6], [4, 4, 16]])
- # TO update this.
- # expAt = Matrix([
- # [(8*t*exp(12*t) + 5*exp(12*t) - 1)*exp(4*t)/4,
- # (8*t*exp(12*t) + 5*exp(12*t) - 5)*exp(4*t)/4,
- # (exp(12*t) - 1)*exp(4*t)/2],
- # [(-8*t*exp(12*t) - exp(12*t) + 1)*exp(4*t)/4,
- # (-8*t*exp(12*t) - exp(12*t) + 5)*exp(4*t)/4,
- # (-exp(12*t) + 1)*exp(4*t)/2],
- # [4*t*exp(16*t), 4*t*exp(16*t), exp(16*t)]])
- expAt = Matrix([
- [2*t*exp(16*t) + 5*exp(16*t)/4 - exp(4*t)/4, 2*t*exp(16*t) + 5*exp(16*t)/4 - 5*exp(4*t)/4, exp(16*t)/2 - exp(4*t)/2],
- [ -2*t*exp(16*t) - exp(16*t)/4 + exp(4*t)/4, -2*t*exp(16*t) - exp(16*t)/4 + 5*exp(4*t)/4, -exp(16*t)/2 + exp(4*t)/2],
- [ 4*t*exp(16*t), 4*t*exp(16*t), exp(16*t)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([[1, 1, 0, 0],
- [0, 1, 1, 0],
- [0, 0, 1, -S(1)/8],
- [0, 0, S(1)/2, S(1)/2]])
- expAt = Matrix([
- [exp(t), t*exp(t), 4*t*exp(3*t/4) + 8*t*exp(t) + 48*exp(3*t/4) - 48*exp(t),
- -2*t*exp(3*t/4) - 2*t*exp(t) - 16*exp(3*t/4) + 16*exp(t)],
- [0, exp(t), -t*exp(3*t/4) - 8*exp(3*t/4) + 8*exp(t), t*exp(3*t/4)/2 + 2*exp(3*t/4) - 2*exp(t)],
- [0, 0, t*exp(3*t/4)/4 + exp(3*t/4), -t*exp(3*t/4)/8],
- [0, 0, t*exp(3*t/4)/2, -t*exp(3*t/4)/4 + exp(3*t/4)]
- ])
- assert matrix_exp(A, t) == expAt
- A = Matrix([
- [ 0, 1, 0, 0],
- [-1, 0, 0, 0],
- [ 0, 0, 0, 1],
- [ 0, 0, -1, 0]])
- expAt = Matrix([
- [ cos(t), sin(t), 0, 0],
- [-sin(t), cos(t), 0, 0],
- [ 0, 0, cos(t), sin(t)],
- [ 0, 0, -sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- A = Matrix([
- [ 0, 1, 1, 0],
- [-1, 0, 0, 1],
- [ 0, 0, 0, 1],
- [ 0, 0, -1, 0]])
- expAt = Matrix([
- [ cos(t), sin(t), t*cos(t), t*sin(t)],
- [-sin(t), cos(t), -t*sin(t), t*cos(t)],
- [ 0, 0, cos(t), sin(t)],
- [ 0, 0, -sin(t), cos(t)]])
- assert matrix_exp(A, t) == expAt
- # This case is unacceptably slow right now but should be solvable...
- #a, b, c, d, e, f = symbols('a b c d e f')
- #A = Matrix([
- #[-a, b, c, d],
- #[ a, -b, e, 0],
- #[ 0, 0, -c - e - f, 0],
- #[ 0, 0, f, -d]])
- A = Matrix([[0, I], [I, 0]])
- expAt = Matrix([
- [exp(I*t)/2 + exp(-I*t)/2, exp(I*t)/2 - exp(-I*t)/2],
- [exp(I*t)/2 - exp(-I*t)/2, exp(I*t)/2 + exp(-I*t)/2]])
- assert matrix_exp(A, t) == expAt
- # Testing Errors
- M = Matrix([[1, 2, 3], [4, 5, 6], [7, 7, 7]])
- M1 = Matrix([[t, 1], [1, 1]])
- raises(ValueError, lambda: matrix_exp(M[:, :2], t))
- raises(ValueError, lambda: matrix_exp(M[:2, :], t))
- raises(ValueError, lambda: matrix_exp(M1, t))
- raises(ValueError, lambda: matrix_exp(M1[:1, :1], t))
- def test_canonical_odes():
- f, g, h = symbols('f g h', cls=Function)
- x = symbols('x')
- funcs = [f(x), g(x), h(x)]
- eqs1 = [Eq(f(x).diff(x, x), f(x) + 2*g(x)), Eq(g(x) + 1, g(x).diff(x) + f(x))]
- sol1 = [[Eq(Derivative(f(x), (x, 2)), f(x) + 2*g(x)), Eq(Derivative(g(x), x), -f(x) + g(x) + 1)]]
- assert canonical_odes(eqs1, funcs[:2], x) == sol1
- eqs2 = [Eq(f(x).diff(x), h(x).diff(x) + f(x)), Eq(g(x).diff(x)**2, f(x) + h(x)), Eq(h(x).diff(x), f(x))]
- sol2 = [[Eq(Derivative(f(x), x), 2*f(x)), Eq(Derivative(g(x), x), -sqrt(f(x) + h(x))), Eq(Derivative(h(x), x), f(x))],
- [Eq(Derivative(f(x), x), 2*f(x)), Eq(Derivative(g(x), x), sqrt(f(x) + h(x))), Eq(Derivative(h(x), x), f(x))]]
- assert canonical_odes(eqs2, funcs, x) == sol2
- def test_sysode_linear_neq_order1_type1():
- f, g, x, y, h = symbols('f g x y h', cls=Function)
- a, b, c, t = symbols('a b c t')
- eqs1 = [Eq(Derivative(x(t), t), x(t)),
- Eq(Derivative(y(t), t), y(t))]
- sol1 = [Eq(x(t), C1*exp(t)),
- Eq(y(t), C2*exp(t))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(x(t), t), 2*x(t)),
- Eq(Derivative(y(t), t), 3*y(t))]
- sol2 = [Eq(x(t), C1*exp(2*t)),
- Eq(y(t), C2*exp(3*t))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(x(t), t), a*x(t)),
- Eq(Derivative(y(t), t), a*y(t))]
- sol3 = [Eq(x(t), C1*exp(a*t)),
- Eq(y(t), C2*exp(a*t))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- eqs4 = [Eq(Derivative(x(t), t), a*x(t)),
- Eq(Derivative(y(t), t), b*y(t))]
- sol4 = [Eq(x(t), C1*exp(a*t)),
- Eq(y(t), C2*exp(b*t))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(Derivative(x(t), t), -y(t)),
- Eq(Derivative(y(t), t), x(t))]
- sol5 = [Eq(x(t), -C1*sin(t) - C2*cos(t)),
- Eq(y(t), C1*cos(t) - C2*sin(t))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(x(t), t), -2*y(t)),
- Eq(Derivative(y(t), t), 2*x(t))]
- sol6 = [Eq(x(t), -C1*sin(2*t) - C2*cos(2*t)),
- Eq(y(t), C1*cos(2*t) - C2*sin(2*t))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- eqs7 = [Eq(Derivative(x(t), t), I*y(t)),
- Eq(Derivative(y(t), t), I*x(t))]
- sol7 = [Eq(x(t), -C1*exp(-I*t) + C2*exp(I*t)),
- Eq(y(t), C1*exp(-I*t) + C2*exp(I*t))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- eqs8 = [Eq(Derivative(x(t), t), -a*y(t)),
- Eq(Derivative(y(t), t), a*x(t))]
- sol8 = [Eq(x(t), -I*C1*exp(-I*a*t) + I*C2*exp(I*a*t)),
- Eq(y(t), C1*exp(-I*a*t) + C2*exp(I*a*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- eqs9 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), x(t) - y(t))]
- sol9 = [Eq(x(t), C1*(1 - sqrt(2))*exp(-sqrt(2)*t) + C2*(1 + sqrt(2))*exp(sqrt(2)*t)),
- Eq(y(t), C1*exp(-sqrt(2)*t) + C2*exp(sqrt(2)*t))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0])
- eqs10 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol10 = [Eq(x(t), -C1 + C2*exp(2*t)),
- Eq(y(t), C1 + C2*exp(2*t))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- eqs11 = [Eq(Derivative(x(t), t), 2*x(t) + y(t)),
- Eq(Derivative(y(t), t), -x(t) + 2*y(t))]
- sol11 = [Eq(x(t), C1*exp(2*t)*sin(t) + C2*exp(2*t)*cos(t)),
- Eq(y(t), C1*exp(2*t)*cos(t) - C2*exp(2*t)*sin(t))]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0])
- eqs12 = [Eq(Derivative(x(t), t), x(t) + 2*y(t)),
- Eq(Derivative(y(t), t), 2*x(t) + y(t))]
- sol12 = [Eq(x(t), -C1*exp(-t) + C2*exp(3*t)),
- Eq(y(t), C1*exp(-t) + C2*exp(3*t))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- eqs13 = [Eq(Derivative(x(t), t), 4*x(t) + y(t)),
- Eq(Derivative(y(t), t), -x(t) + 2*y(t))]
- sol13 = [Eq(x(t), C2*t*exp(3*t) + (C1 + C2)*exp(3*t)),
- Eq(y(t), -C1*exp(3*t) - C2*t*exp(3*t))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- eqs14 = [Eq(Derivative(x(t), t), a*y(t)),
- Eq(Derivative(y(t), t), a*x(t))]
- sol14 = [Eq(x(t), -C1*exp(-a*t) + C2*exp(a*t)),
- Eq(y(t), C1*exp(-a*t) + C2*exp(a*t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0])
- eqs15 = [Eq(Derivative(x(t), t), a*y(t)),
- Eq(Derivative(y(t), t), b*x(t))]
- sol15 = [Eq(x(t), -C1*a*exp(-t*sqrt(a*b))/sqrt(a*b) + C2*a*exp(t*sqrt(a*b))/sqrt(a*b)),
- Eq(y(t), C1*exp(-t*sqrt(a*b)) + C2*exp(t*sqrt(a*b)))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0])
- eqs16 = [Eq(Derivative(x(t), t), a*x(t) + b*y(t)),
- Eq(Derivative(y(t), t), c*x(t))]
- sol16 = [Eq(x(t), -2*C1*b*exp(t*(a + sqrt(a**2 + 4*b*c))/2)/(a - sqrt(a**2 + 4*b*c)) - 2*C2*b*exp(t*(a -
- sqrt(a**2 + 4*b*c))/2)/(a + sqrt(a**2 + 4*b*c))),
- Eq(y(t), C1*exp(t*(a + sqrt(a**2 + 4*b*c))/2) + C2*exp(t*(a - sqrt(a**2 + 4*b*c))/2))]
- assert dsolve(eqs16) == sol16
- assert checksysodesol(eqs16, sol16) == (True, [0, 0])
- # Regression test case for issue #18562
- # https://github.com/sympy/sympy/issues/18562
- eqs17 = [Eq(Derivative(x(t), t), a*y(t) + x(t)),
- Eq(Derivative(y(t), t), a*x(t) - y(t))]
- sol17 = [Eq(x(t), C1*a*exp(t*sqrt(a**2 + 1))/(sqrt(a**2 + 1) - 1) - C2*a*exp(-t*sqrt(a**2 + 1))/(sqrt(a**2 +
- 1) + 1)),
- Eq(y(t), C1*exp(t*sqrt(a**2 + 1)) + C2*exp(-t*sqrt(a**2 + 1)))]
- assert dsolve(eqs17) == sol17
- assert checksysodesol(eqs17, sol17) == (True, [0, 0])
- eqs18 = [Eq(Derivative(x(t), t), 0),
- Eq(Derivative(y(t), t), 0)]
- sol18 = [Eq(x(t), C1),
- Eq(y(t), C2)]
- assert dsolve(eqs18) == sol18
- assert checksysodesol(eqs18, sol18) == (True, [0, 0])
- eqs19 = [Eq(Derivative(x(t), t), 2*x(t) - y(t)),
- Eq(Derivative(y(t), t), x(t))]
- sol19 = [Eq(x(t), C2*t*exp(t) + (C1 + C2)*exp(t)),
- Eq(y(t), C1*exp(t) + C2*t*exp(t))]
- assert dsolve(eqs19) == sol19
- assert checksysodesol(eqs19, sol19) == (True, [0, 0])
- eqs20 = [Eq(Derivative(x(t), t), x(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol20 = [Eq(x(t), C1*exp(t)),
- Eq(y(t), C1*t*exp(t) + C2*exp(t))]
- assert dsolve(eqs20) == sol20
- assert checksysodesol(eqs20, sol20) == (True, [0, 0])
- eqs21 = [Eq(Derivative(x(t), t), 3*x(t)),
- Eq(Derivative(y(t), t), x(t) + y(t))]
- sol21 = [Eq(x(t), 2*C1*exp(3*t)),
- Eq(y(t), C1*exp(3*t) + C2*exp(t))]
- assert dsolve(eqs21) == sol21
- assert checksysodesol(eqs21, sol21) == (True, [0, 0])
- eqs22 = [Eq(Derivative(x(t), t), 3*x(t)),
- Eq(Derivative(y(t), t), y(t))]
- sol22 = [Eq(x(t), C1*exp(3*t)),
- Eq(y(t), C2*exp(t))]
- assert dsolve(eqs22) == sol22
- assert checksysodesol(eqs22, sol22) == (True, [0, 0])
- @slow
- def test_sysode_linear_neq_order1_type1_slow():
- t = Symbol('t')
- Z0 = Function('Z0')
- Z1 = Function('Z1')
- Z2 = Function('Z2')
- Z3 = Function('Z3')
- k01, k10, k20, k21, k23, k30 = symbols('k01 k10 k20 k21 k23 k30')
- eqs1 = [Eq(Derivative(Z0(t), t), -k01*Z0(t) + k10*Z1(t) + k20*Z2(t) + k30*Z3(t)),
- Eq(Derivative(Z1(t), t), k01*Z0(t) - k10*Z1(t) + k21*Z2(t)),
- Eq(Derivative(Z2(t), t), (-k20 - k21 - k23)*Z2(t)),
- Eq(Derivative(Z3(t), t), k23*Z2(t) - k30*Z3(t))]
- sol1 = [Eq(Z0(t), C1*k10/k01 - C2*(k10 - k30)*exp(-k30*t)/(k01 + k10 - k30) - C3*(k10*(k20 + k21 - k30) -
- k20**2 - k20*(k21 + k23 - k30) + k23*k30)*exp(-t*(k20 + k21 + k23))/(k23*(-k01 - k10 + k20 + k21 +
- k23)) - C4*exp(-t*(k01 + k10))),
- Eq(Z1(t), C1 - C2*k01*exp(-k30*t)/(k01 + k10 - k30) + C3*(-k01*(k20 + k21 - k30) + k20*k21 + k21**2
- + k21*(k23 - k30))*exp(-t*(k20 + k21 + k23))/(k23*(-k01 - k10 + k20 + k21 + k23)) + C4*exp(-t*(k01 +
- k10))),
- Eq(Z2(t), -C3*(k20 + k21 + k23 - k30)*exp(-t*(k20 + k21 + k23))/k23),
- Eq(Z3(t), C2*exp(-k30*t) + C3*exp(-t*(k20 + k21 + k23)))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0, 0, 0])
- x, y, z, u, v, w = symbols('x y z u v w', cls=Function)
- k2, k3 = symbols('k2 k3')
- a_b, a_c = symbols('a_b a_c', real=True)
- eqs2 = [Eq(Derivative(z(t), t), k2*y(t)),
- Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t))]
- sol2 = [Eq(z(t), C1 - C2*k2*exp(-t*(k2 + k3))/(k2 + k3)),
- Eq(x(t), -C2*k3*exp(-t*(k2 + k3))/(k2 + k3) + C3),
- Eq(y(t), C2*exp(-t*(k2 + k3)))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0, 0])
- eqs3 = [4*u(t) - v(t) - 2*w(t) + Derivative(u(t), t),
- 2*u(t) + v(t) - 2*w(t) + Derivative(v(t), t),
- 5*u(t) + v(t) - 3*w(t) + Derivative(w(t), t)]
- sol3 = [Eq(u(t), C3*exp(-2*t) + (C1/2 + sqrt(3)*C2/6)*cos(sqrt(3)*t) + sin(sqrt(3)*t)*(sqrt(3)*C1/6 +
- C2*Rational(-1, 2))),
- Eq(v(t), (C1/2 + sqrt(3)*C2/6)*cos(sqrt(3)*t) + sin(sqrt(3)*t)*(sqrt(3)*C1/6 + C2*Rational(-1, 2))),
- Eq(w(t), C1*cos(sqrt(3)*t) - C2*sin(sqrt(3)*t) + C3*exp(-2*t))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0])
- eqs4 = [Eq(Derivative(x(t), t), w(t)*Rational(-2, 9) + 2*x(t) + y(t) + z(t)*Rational(-8, 9)),
- Eq(Derivative(y(t), t), w(t)*Rational(4, 9) + 2*y(t) + z(t)*Rational(16, 9)),
- Eq(Derivative(z(t), t), w(t)*Rational(-2, 9) + z(t)*Rational(37, 9)),
- Eq(Derivative(w(t), t), w(t)*Rational(44, 9) + z(t)*Rational(-4, 9))]
- sol4 = [Eq(x(t), C1*exp(2*t) + C2*t*exp(2*t)),
- Eq(y(t), C2*exp(2*t) + 2*C3*exp(4*t)),
- Eq(z(t), 2*C3*exp(4*t) + C4*exp(5*t)*Rational(-1, 4)),
- Eq(w(t), C3*exp(4*t) + C4*exp(5*t))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq5 = [Eq(x(t).diff(t), x(t)), Eq(y(t).diff(t), y(t)), Eq(z(t).diff(t), z(t)), Eq(w(t).diff(t), w(t))]
- sol5 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t)), Eq(w(t), C4*exp(t))]
- assert dsolve(eq5) == sol5
- assert checksysodesol(eq5, sol5) == (True, [0, 0, 0, 0])
- eqs6 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), y(t) + z(t)),
- Eq(Derivative(z(t), t), w(t)*Rational(-1, 8) + z(t)),
- Eq(Derivative(w(t), t), w(t)/2 + z(t)/2)]
- sol6 = [Eq(x(t), C1*exp(t) + C2*t*exp(t) + 4*C4*t*exp(t*Rational(3, 4)) + (4*C3 + 48*C4)*exp(t*Rational(3,
- 4))),
- Eq(y(t), C2*exp(t) - C4*t*exp(t*Rational(3, 4)) - (C3 + 8*C4)*exp(t*Rational(3, 4))),
- Eq(z(t), C4*t*exp(t*Rational(3, 4))/4 + (C3/4 + C4)*exp(t*Rational(3, 4))),
- Eq(w(t), C3*exp(t*Rational(3, 4))/2 + C4*t*exp(t*Rational(3, 4))/2)]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq7 = [Eq(Derivative(x(t), t), x(t)), Eq(Derivative(y(t), t), y(t)), Eq(Derivative(z(t), t), z(t)),
- Eq(Derivative(w(t), t), w(t)), Eq(Derivative(u(t), t), u(t))]
- sol7 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t)), Eq(w(t), C4*exp(t)),
- Eq(u(t), C5*exp(t))]
- assert dsolve(eq7) == sol7
- assert checksysodesol(eq7, sol7) == (True, [0, 0, 0, 0, 0])
- eqs8 = [Eq(Derivative(x(t), t), 2*x(t) + y(t)),
- Eq(Derivative(y(t), t), 2*y(t)),
- Eq(Derivative(z(t), t), 4*z(t)),
- Eq(Derivative(w(t), t), u(t) + 5*w(t)),
- Eq(Derivative(u(t), t), 5*u(t))]
- sol8 = [Eq(x(t), C1*exp(2*t) + C2*t*exp(2*t)),
- Eq(y(t), C2*exp(2*t)),
- Eq(z(t), C3*exp(4*t)),
- Eq(w(t), C4*exp(5*t) + C5*t*exp(5*t)),
- Eq(u(t), C5*exp(5*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0, 0, 0, 0])
- # Regression test case for issue #15574
- # https://github.com/sympy/sympy/issues/15574
- eq9 = [Eq(Derivative(x(t), t), x(t)), Eq(Derivative(y(t), t), y(t)), Eq(Derivative(z(t), t), z(t))]
- sol9 = [Eq(x(t), C1*exp(t)), Eq(y(t), C2*exp(t)), Eq(z(t), C3*exp(t))]
- assert dsolve(eq9) == sol9
- assert checksysodesol(eq9, sol9) == (True, [0, 0, 0])
- # Regression test case for issue #15407
- # https://github.com/sympy/sympy/issues/15407
- eqs10 = [Eq(Derivative(x(t), t), (-a_b - a_c)*x(t)),
- Eq(Derivative(y(t), t), a_b*y(t)),
- Eq(Derivative(z(t), t), a_c*x(t))]
- sol10 = [Eq(x(t), -C1*(a_b + a_c)*exp(-t*(a_b + a_c))/a_c),
- Eq(y(t), C2*exp(a_b*t)),
- Eq(z(t), C1*exp(-t*(a_b + a_c)) + C3)]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0, 0])
- # Regression test case for issue #14312
- # https://github.com/sympy/sympy/issues/14312
- eqs11 = [Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t)),
- Eq(Derivative(z(t), t), k2*y(t))]
- sol11 = [Eq(x(t), C1 + C2*k3*exp(-t*(k2 + k3))/k2),
- Eq(y(t), -C2*(k2 + k3)*exp(-t*(k2 + k3))/k2),
- Eq(z(t), C2*exp(-t*(k2 + k3)) + C3)]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0, 0])
- # Regression test case for issue #14312
- # https://github.com/sympy/sympy/issues/14312
- eqs12 = [Eq(Derivative(z(t), t), k2*y(t)),
- Eq(Derivative(x(t), t), k3*y(t)),
- Eq(Derivative(y(t), t), (-k2 - k3)*y(t))]
- sol12 = [Eq(z(t), C1 - C2*k2*exp(-t*(k2 + k3))/(k2 + k3)),
- Eq(x(t), -C2*k3*exp(-t*(k2 + k3))/(k2 + k3) + C3),
- Eq(y(t), C2*exp(-t*(k2 + k3)))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0, 0])
- f, g, h = symbols('f, g, h', cls=Function)
- a, b, c = symbols('a, b, c')
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- eqs13 = [Eq(Derivative(f(t), t), 2*f(t) + g(t)),
- Eq(Derivative(g(t), t), a*f(t))]
- sol13 = [Eq(f(t), C1*exp(t*(sqrt(a + 1) + 1))/(sqrt(a + 1) - 1) - C2*exp(-t*(sqrt(a + 1) - 1))/(sqrt(a + 1) +
- 1)),
- Eq(g(t), C1*exp(t*(sqrt(a + 1) + 1)) + C2*exp(-t*(sqrt(a + 1) - 1)))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- eqs14 = [Eq(Derivative(f(t), t), 2*g(t) - 3*h(t)),
- Eq(Derivative(g(t), t), -2*f(t) + 4*h(t)),
- Eq(Derivative(h(t), t), 3*f(t) - 4*g(t))]
- sol14 = [Eq(f(t), 2*C1 - sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(3, 25) + C3*Rational(-8, 25)) -
- cos(sqrt(29)*t)*(C2*Rational(8, 25) + sqrt(29)*C3*Rational(3, 25))),
- Eq(g(t), C1*Rational(3, 2) + sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(4, 25) + C3*Rational(6, 25)) -
- cos(sqrt(29)*t)*(C2*Rational(6, 25) + sqrt(29)*C3*Rational(-4, 25))),
- Eq(h(t), C1 + C2*cos(sqrt(29)*t) - C3*sin(sqrt(29)*t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0, 0])
- eqs15 = [Eq(2*Derivative(f(t), t), 12*g(t) - 12*h(t)),
- Eq(3*Derivative(g(t), t), -8*f(t) + 8*h(t)),
- Eq(4*Derivative(h(t), t), 6*f(t) - 6*g(t))]
- sol15 = [Eq(f(t), C1 - sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(6, 13) + C3*Rational(-16, 13)) -
- cos(sqrt(29)*t)*(C2*Rational(16, 13) + sqrt(29)*C3*Rational(6, 13))),
- Eq(g(t), C1 + sin(sqrt(29)*t)*(sqrt(29)*C2*Rational(8, 39) + C3*Rational(16, 13)) -
- cos(sqrt(29)*t)*(C2*Rational(16, 13) + sqrt(29)*C3*Rational(-8, 39))),
- Eq(h(t), C1 + C2*cos(sqrt(29)*t) - C3*sin(sqrt(29)*t))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0, 0])
- eq16 = (Eq(diff(x(t), t), 21*x(t)), Eq(diff(y(t), t), 17*x(t) + 3*y(t)),
- Eq(diff(z(t), t), 5*x(t) + 7*y(t) + 9*z(t)))
- sol16 = [Eq(x(t), 216*C1*exp(21*t)/209),
- Eq(y(t), 204*C1*exp(21*t)/209 - 6*C2*exp(3*t)/7),
- Eq(z(t), C1*exp(21*t) + C2*exp(3*t) + C3*exp(9*t))]
- assert dsolve(eq16) == sol16
- assert checksysodesol(eq16, sol16) == (True, [0, 0, 0])
- eqs17 = [Eq(Derivative(x(t), t), 3*y(t) - 11*z(t)),
- Eq(Derivative(y(t), t), -3*x(t) + 7*z(t)),
- Eq(Derivative(z(t), t), 11*x(t) - 7*y(t))]
- sol17 = [Eq(x(t), C1*Rational(7, 3) - sin(sqrt(179)*t)*(sqrt(179)*C2*Rational(11, 170) + C3*Rational(-21,
- 170)) - cos(sqrt(179)*t)*(C2*Rational(21, 170) + sqrt(179)*C3*Rational(11, 170))),
- Eq(y(t), C1*Rational(11, 3) + sin(sqrt(179)*t)*(sqrt(179)*C2*Rational(7, 170) + C3*Rational(33,
- 170)) - cos(sqrt(179)*t)*(C2*Rational(33, 170) + sqrt(179)*C3*Rational(-7, 170))),
- Eq(z(t), C1 + C2*cos(sqrt(179)*t) - C3*sin(sqrt(179)*t))]
- assert dsolve(eqs17) == sol17
- assert checksysodesol(eqs17, sol17) == (True, [0, 0, 0])
- eqs18 = [Eq(3*Derivative(x(t), t), 20*y(t) - 20*z(t)),
- Eq(4*Derivative(y(t), t), -15*x(t) + 15*z(t)),
- Eq(5*Derivative(z(t), t), 12*x(t) - 12*y(t))]
- sol18 = [Eq(x(t), C1 - sin(5*sqrt(2)*t)*(sqrt(2)*C2*Rational(4, 3) - C3) - cos(5*sqrt(2)*t)*(C2 +
- sqrt(2)*C3*Rational(4, 3))),
- Eq(y(t), C1 + sin(5*sqrt(2)*t)*(sqrt(2)*C2*Rational(3, 4) + C3) - cos(5*sqrt(2)*t)*(C2 +
- sqrt(2)*C3*Rational(-3, 4))),
- Eq(z(t), C1 + C2*cos(5*sqrt(2)*t) - C3*sin(5*sqrt(2)*t))]
- assert dsolve(eqs18) == sol18
- assert checksysodesol(eqs18, sol18) == (True, [0, 0, 0])
- eqs19 = [Eq(Derivative(x(t), t), 4*x(t) - z(t)),
- Eq(Derivative(y(t), t), 2*x(t) + 2*y(t) - z(t)),
- Eq(Derivative(z(t), t), 3*x(t) + y(t))]
- sol19 = [Eq(x(t), C2*t**2*exp(2*t)/2 + t*(2*C2 + C3)*exp(2*t) + (C1 + C2 + 2*C3)*exp(2*t)),
- Eq(y(t), C2*t**2*exp(2*t)/2 + t*(2*C2 + C3)*exp(2*t) + (C1 + 2*C3)*exp(2*t)),
- Eq(z(t), C2*t**2*exp(2*t) + t*(3*C2 + 2*C3)*exp(2*t) + (2*C1 + 3*C3)*exp(2*t))]
- assert dsolve(eqs19) == sol19
- assert checksysodesol(eqs19, sol19) == (True, [0, 0, 0])
- eqs20 = [Eq(Derivative(x(t), t), 4*x(t) - y(t) - 2*z(t)),
- Eq(Derivative(y(t), t), 2*x(t) + y(t) - 2*z(t)),
- Eq(Derivative(z(t), t), 5*x(t) - 3*z(t))]
- sol20 = [Eq(x(t), C1*exp(2*t) - sin(t)*(C2*Rational(3, 5) + C3/5) - cos(t)*(C2/5 + C3*Rational(-3, 5))),
- Eq(y(t), -sin(t)*(C2*Rational(3, 5) + C3/5) - cos(t)*(C2/5 + C3*Rational(-3, 5))),
- Eq(z(t), C1*exp(2*t) - C2*sin(t) + C3*cos(t))]
- assert dsolve(eqs20) == sol20
- assert checksysodesol(eqs20, sol20) == (True, [0, 0, 0])
- eq21 = (Eq(diff(x(t), t), 9*y(t)), Eq(diff(y(t), t), 12*x(t)))
- sol21 = [Eq(x(t), -sqrt(3)*C1*exp(-6*sqrt(3)*t)/2 + sqrt(3)*C2*exp(6*sqrt(3)*t)/2),
- Eq(y(t), C1*exp(-6*sqrt(3)*t) + C2*exp(6*sqrt(3)*t))]
- assert dsolve(eq21) == sol21
- assert checksysodesol(eq21, sol21) == (True, [0, 0])
- eqs22 = [Eq(Derivative(x(t), t), 2*x(t) + 4*y(t)),
- Eq(Derivative(y(t), t), 12*x(t) + 41*y(t))]
- sol22 = [Eq(x(t), C1*(39 - sqrt(1713))*exp(t*(sqrt(1713) + 43)/2)*Rational(-1, 24) + C2*(39 +
- sqrt(1713))*exp(t*(43 - sqrt(1713))/2)*Rational(-1, 24)),
- Eq(y(t), C1*exp(t*(sqrt(1713) + 43)/2) + C2*exp(t*(43 - sqrt(1713))/2))]
- assert dsolve(eqs22) == sol22
- assert checksysodesol(eqs22, sol22) == (True, [0, 0])
- eqs23 = [Eq(Derivative(x(t), t), x(t) + y(t)),
- Eq(Derivative(y(t), t), -2*x(t) + 2*y(t))]
- sol23 = [Eq(x(t), (C1/4 + sqrt(7)*C2/4)*cos(sqrt(7)*t/2)*exp(t*Rational(3, 2)) +
- sin(sqrt(7)*t/2)*(sqrt(7)*C1/4 + C2*Rational(-1, 4))*exp(t*Rational(3, 2))),
- Eq(y(t), C1*cos(sqrt(7)*t/2)*exp(t*Rational(3, 2)) - C2*sin(sqrt(7)*t/2)*exp(t*Rational(3, 2)))]
- assert dsolve(eqs23) == sol23
- assert checksysodesol(eqs23, sol23) == (True, [0, 0])
- # Regression test case for issue #15474
- # https://github.com/sympy/sympy/issues/15474
- a = Symbol("a", real=True)
- eq24 = [x(t).diff(t) - a*y(t), y(t).diff(t) + a*x(t)]
- sol24 = [Eq(x(t), C1*sin(a*t) + C2*cos(a*t)), Eq(y(t), C1*cos(a*t) - C2*sin(a*t))]
- assert dsolve(eq24) == sol24
- assert checksysodesol(eq24, sol24) == (True, [0, 0])
- # Regression test case for issue #19150
- # https://github.com/sympy/sympy/issues/19150
- eqs25 = [Eq(Derivative(f(t), t), 0),
- Eq(Derivative(g(t), t), (f(t) - 2*g(t) + x(t))/(b*c)),
- Eq(Derivative(x(t), t), (g(t) - 2*x(t) + y(t))/(b*c)),
- Eq(Derivative(y(t), t), (h(t) + x(t) - 2*y(t))/(b*c)),
- Eq(Derivative(h(t), t), 0)]
- sol25 = [Eq(f(t), -3*C1 + 4*C2),
- Eq(g(t), -2*C1 + 3*C2 - C3*exp(-2*t/(b*c)) + C4*exp(-t*(sqrt(2) + 2)/(b*c)) + C5*exp(-t*(2 -
- sqrt(2))/(b*c))),
- Eq(x(t), -C1 + 2*C2 - sqrt(2)*C4*exp(-t*(sqrt(2) + 2)/(b*c)) + sqrt(2)*C5*exp(-t*(2 -
- sqrt(2))/(b*c))),
- Eq(y(t), C2 + C3*exp(-2*t/(b*c)) + C4*exp(-t*(sqrt(2) + 2)/(b*c)) + C5*exp(-t*(2 - sqrt(2))/(b*c))),
- Eq(h(t), C1)]
- assert dsolve(eqs25) == sol25
- assert checksysodesol(eqs25, sol25) == (True, [0, 0, 0, 0, 0])
- eq26 = [Eq(Derivative(f(t), t), 2*f(t)), Eq(Derivative(g(t), t), 3*f(t) + 7*g(t))]
- sol26 = [Eq(f(t), -5*C1*exp(2*t)/3), Eq(g(t), C1*exp(2*t) + C2*exp(7*t))]
- assert dsolve(eq26) == sol26
- assert checksysodesol(eq26, sol26) == (True, [0, 0])
- eq27 = [Eq(Derivative(f(t), t), -9*I*f(t) - 4*g(t)), Eq(Derivative(g(t), t), -4*I*g(t))]
- sol27 = [Eq(f(t), 4*I*C1*exp(-4*I*t)/5 + C2*exp(-9*I*t)), Eq(g(t), C1*exp(-4*I*t))]
- assert dsolve(eq27) == sol27
- assert checksysodesol(eq27, sol27) == (True, [0, 0])
- eq28 = [Eq(Derivative(f(t), t), -9*I*f(t)), Eq(Derivative(g(t), t), -4*I*g(t))]
- sol28 = [Eq(f(t), C1*exp(-9*I*t)), Eq(g(t), C2*exp(-4*I*t))]
- assert dsolve(eq28) == sol28
- assert checksysodesol(eq28, sol28) == (True, [0, 0])
- eq29 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), 0)]
- sol29 = [Eq(f(t), C1), Eq(g(t), C2)]
- assert dsolve(eq29) == sol29
- assert checksysodesol(eq29, sol29) == (True, [0, 0])
- eq30 = [Eq(Derivative(f(t), t), f(t)), Eq(Derivative(g(t), t), 0)]
- sol30 = [Eq(f(t), C1*exp(t)), Eq(g(t), C2)]
- assert dsolve(eq30) == sol30
- assert checksysodesol(eq30, sol30) == (True, [0, 0])
- eq31 = [Eq(Derivative(f(t), t), g(t)), Eq(Derivative(g(t), t), 0)]
- sol31 = [Eq(f(t), C1 + C2*t), Eq(g(t), C2)]
- assert dsolve(eq31) == sol31
- assert checksysodesol(eq31, sol31) == (True, [0, 0])
- eq32 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), f(t))]
- sol32 = [Eq(f(t), C1), Eq(g(t), C1*t + C2)]
- assert dsolve(eq32) == sol32
- assert checksysodesol(eq32, sol32) == (True, [0, 0])
- eq33 = [Eq(Derivative(f(t), t), 0), Eq(Derivative(g(t), t), g(t))]
- sol33 = [Eq(f(t), C1), Eq(g(t), C2*exp(t))]
- assert dsolve(eq33) == sol33
- assert checksysodesol(eq33, sol33) == (True, [0, 0])
- eq34 = [Eq(Derivative(f(t), t), f(t)), Eq(Derivative(g(t), t), I*g(t))]
- sol34 = [Eq(f(t), C1*exp(t)), Eq(g(t), C2*exp(I*t))]
- assert dsolve(eq34) == sol34
- assert checksysodesol(eq34, sol34) == (True, [0, 0])
- eq35 = [Eq(Derivative(f(t), t), I*f(t)), Eq(Derivative(g(t), t), -I*g(t))]
- sol35 = [Eq(f(t), C1*exp(I*t)), Eq(g(t), C2*exp(-I*t))]
- assert dsolve(eq35) == sol35
- assert checksysodesol(eq35, sol35) == (True, [0, 0])
- eq36 = [Eq(Derivative(f(t), t), I*g(t)), Eq(Derivative(g(t), t), 0)]
- sol36 = [Eq(f(t), I*C1 + I*C2*t), Eq(g(t), C2)]
- assert dsolve(eq36) == sol36
- assert checksysodesol(eq36, sol36) == (True, [0, 0])
- eq37 = [Eq(Derivative(f(t), t), I*g(t)), Eq(Derivative(g(t), t), I*f(t))]
- sol37 = [Eq(f(t), -C1*exp(-I*t) + C2*exp(I*t)), Eq(g(t), C1*exp(-I*t) + C2*exp(I*t))]
- assert dsolve(eq37) == sol37
- assert checksysodesol(eq37, sol37) == (True, [0, 0])
- # Multiple systems
- eq1 = [Eq(Derivative(f(t), t)**2, g(t)**2), Eq(-f(t) + Derivative(g(t), t), 0)]
- sol1 = [[Eq(f(t), -C1*sin(t) - C2*cos(t)),
- Eq(g(t), C1*cos(t) - C2*sin(t))],
- [Eq(f(t), -C1*exp(-t) + C2*exp(t)),
- Eq(g(t), C1*exp(-t) + C2*exp(t))]]
- assert dsolve(eq1) == sol1
- for sol in sol1:
- assert checksysodesol(eq1, sol) == (True, [0, 0])
- def test_sysode_linear_neq_order1_type2():
- f, g, h, k = symbols('f g h k', cls=Function)
- x, t, a, b, c, d, y = symbols('x t a b c d y')
- k1, k2 = symbols('k1 k2')
- eqs1 = [Eq(Derivative(f(x), x), f(x) + g(x) + 5),
- Eq(Derivative(g(x), x), -f(x) - g(x) + 7)]
- sol1 = [Eq(f(x), C1 + C2 + 6*x**2 + x*(C2 + 5)),
- Eq(g(x), -C1 - 6*x**2 - x*(C2 - 7))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(f(x), x), f(x) + g(x) + 5),
- Eq(Derivative(g(x), x), f(x) + g(x) + 7)]
- sol2 = [Eq(f(x), -C1 + C2*exp(2*x) - x - 3),
- Eq(g(x), C1 + C2*exp(2*x) + x - 3)]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), x), f(x) + 5),
- Eq(Derivative(g(x), x), f(x) + 7)]
- sol3 = [Eq(f(x), C1*exp(x) - 5),
- Eq(g(x), C1*exp(x) + C2 + 2*x - 5)]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(Derivative(f(x), x), f(x) + exp(x)),
- Eq(Derivative(g(x), x), x*exp(x) + f(x) + g(x))]
- sol4 = [Eq(f(x), C1*exp(x) + x*exp(x)),
- Eq(g(x), C1*x*exp(x) + C2*exp(x) + x**2*exp(x))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(Derivative(f(x), x), 5*x + f(x) + g(x)),
- Eq(Derivative(g(x), x), f(x) - g(x))]
- sol5 = [Eq(f(x), C1*(1 + sqrt(2))*exp(sqrt(2)*x) + C2*(1 - sqrt(2))*exp(-sqrt(2)*x) + x*Rational(-5, 2) +
- Rational(-5, 2)),
- Eq(g(x), C1*exp(sqrt(2)*x) + C2*exp(-sqrt(2)*x) + x*Rational(-5, 2))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(f(x), x), -9*f(x) - 4*g(x)),
- Eq(Derivative(g(x), x), -4*g(x)),
- Eq(Derivative(h(x), x), h(x) + exp(x))]
- sol6 = [Eq(f(x), C2*exp(-4*x)*Rational(-4, 5) + C1*exp(-9*x)),
- Eq(g(x), C2*exp(-4*x)),
- Eq(h(x), C3*exp(x) + x*exp(x))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0])
- # Regression test case for issue #8859
- # https://github.com/sympy/sympy/issues/8859
- eqs7 = [Eq(Derivative(f(t), t), 3*t + f(t)),
- Eq(Derivative(g(t), t), g(t))]
- sol7 = [Eq(f(t), C1*exp(t) - 3*t - 3),
- Eq(g(t), C2*exp(t))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- # Regression test case for issue #8567
- # https://github.com/sympy/sympy/issues/8567
- eqs8 = [Eq(Derivative(f(t), t), f(t) + 2*g(t)),
- Eq(Derivative(g(t), t), -2*f(t) + g(t) + 2*exp(t))]
- sol8 = [Eq(f(t), C1*exp(t)*sin(2*t) + C2*exp(t)*cos(2*t)
- + exp(t)*sin(2*t)**2 + exp(t)*cos(2*t)**2),
- Eq(g(t), C1*exp(t)*cos(2*t) - C2*exp(t)*sin(2*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- # Regression test case for issue #19150
- # https://github.com/sympy/sympy/issues/19150
- eqs9 = [Eq(Derivative(f(t), t), (c - 2*f(t) + g(t))/(a*b)),
- Eq(Derivative(g(t), t), (f(t) - 2*g(t) + h(t))/(a*b)),
- Eq(Derivative(h(t), t), (d + g(t) - 2*h(t))/(a*b))]
- sol9 = [Eq(f(t), -C1*exp(-2*t/(a*b)) + C2*exp(-t*(sqrt(2) + 2)/(a*b)) + C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 4), 3*c + d, evaluate=False)),
- Eq(g(t), -sqrt(2)*C2*exp(-t*(sqrt(2) + 2)/(a*b)) + sqrt(2)*C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 2), c + d, evaluate=False)),
- Eq(h(t), C1*exp(-2*t/(a*b)) + C2*exp(-t*(sqrt(2) + 2)/(a*b)) + C3*exp(-t*(2 - sqrt(2))/(a*b)) +
- Mul(Rational(1, 4), c + 3*d, evaluate=False))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0, 0])
- # Regression test case for issue #16635
- # https://github.com/sympy/sympy/issues/16635
- eqs10 = [Eq(Derivative(f(t), t), 15*t + f(t) - g(t) - 10),
- Eq(Derivative(g(t), t), -15*t + f(t) - g(t) - 5)]
- sol10 = [Eq(f(t), C1 + C2 + 5*t**3 + 5*t**2 + t*(C2 - 10)),
- Eq(g(t), C1 + 5*t**3 - 10*t**2 + t*(C2 - 5))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- # Multiple solutions
- eqs11 = [Eq(Derivative(f(t), t)**2 - 2*Derivative(f(t), t) + 1, 4),
- Eq(-y*f(t) + Derivative(g(t), t), 0)]
- sol11 = [[Eq(f(t), C1 - t), Eq(g(t), C1*t*y + C2*y + t**2*y*Rational(-1, 2))],
- [Eq(f(t), C1 + 3*t), Eq(g(t), C1*t*y + C2*y + t**2*y*Rational(3, 2))]]
- assert dsolve(eqs11) == sol11
- for s11 in sol11:
- assert checksysodesol(eqs11, s11) == (True, [0, 0])
- # test case for issue #19831
- # https://github.com/sympy/sympy/issues/19831
- n = symbols('n', positive=True)
- x0 = symbols('x_0')
- t0 = symbols('t_0')
- x_0 = symbols('x_0')
- t_0 = symbols('t_0')
- t = symbols('t')
- x = Function('x')
- y = Function('y')
- T = symbols('T')
- eqs12 = [Eq(Derivative(y(t), t), x(t)),
- Eq(Derivative(x(t), t), n*(y(t) + 1))]
- sol12 = [Eq(y(t), C1*exp(sqrt(n)*t)*n**Rational(-1, 2) - C2*exp(-sqrt(n)*t)*n**Rational(-1, 2) - 1),
- Eq(x(t), C1*exp(sqrt(n)*t) + C2*exp(-sqrt(n)*t))]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- sol12b = [
- Eq(y(t), (T*exp(-sqrt(n)*t_0)/2 + exp(-sqrt(n)*t_0)/2 +
- x_0*exp(-sqrt(n)*t_0)/(2*sqrt(n)))*exp(sqrt(n)*t) +
- (T*exp(sqrt(n)*t_0)/2 + exp(sqrt(n)*t_0)/2 -
- x_0*exp(sqrt(n)*t_0)/(2*sqrt(n)))*exp(-sqrt(n)*t) - 1),
- Eq(x(t), (T*sqrt(n)*exp(-sqrt(n)*t_0)/2 + sqrt(n)*exp(-sqrt(n)*t_0)/2
- + x_0*exp(-sqrt(n)*t_0)/2)*exp(sqrt(n)*t)
- - (T*sqrt(n)*exp(sqrt(n)*t_0)/2 + sqrt(n)*exp(sqrt(n)*t_0)/2 -
- x_0*exp(sqrt(n)*t_0)/2)*exp(-sqrt(n)*t))
- ]
- assert dsolve(eqs12, ics={y(t0): T, x(t0): x0}) == sol12b
- assert checksysodesol(eqs12, sol12b) == (True, [0, 0])
- #Test cases added for the issue 19763
- #https://github.com/sympy/sympy/issues/19763
- eq13 = [Eq(Derivative(f(t), t), f(t) + g(t) + 9),
- Eq(Derivative(g(t), t), 2*f(t) + 5*g(t) + 23)]
- sol13 = [Eq(f(t), -C1*(2 + sqrt(6))*exp(t*(3 - sqrt(6)))/2 - C2*(2 - sqrt(6))*exp(t*(sqrt(6) + 3))/2 -
- Rational(22,3)),
- Eq(g(t), C1*exp(t*(3 - sqrt(6))) + C2*exp(t*(sqrt(6) + 3)) - Rational(5,3))]
- assert dsolve(eq13) == sol13
- assert checksysodesol(eq13, sol13) == (True, [0, 0])
- eq14 = [Eq(Derivative(f(t), t), f(t) + g(t) + 81),
- Eq(Derivative(g(t), t), -2*f(t) + g(t) + 23)]
- sol14 = [Eq(f(t), sqrt(2)*C1*exp(t)*sin(sqrt(2)*t)/2
- + sqrt(2)*C2*exp(t)*cos(sqrt(2)*t)/2
- - 58*sin(sqrt(2)*t)**2/3 - 58*cos(sqrt(2)*t)**2/3),
- Eq(g(t), C1*exp(t)*cos(sqrt(2)*t) - C2*exp(t)*sin(sqrt(2)*t)
- - 185*sin(sqrt(2)*t)**2/3 - 185*cos(sqrt(2)*t)**2/3)]
- assert dsolve(eq14) == sol14
- assert checksysodesol(eq14, sol14) == (True, [0,0])
- eq15 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), 3*f(t) + 4*g(t) + k2)]
- sol15 = [Eq(f(t), -C1*(3 - sqrt(33))*exp(t*(5 + sqrt(33))/2)/6 -
- C2*(3 + sqrt(33))*exp(t*(5 - sqrt(33))/2)/6 + 2*k1 - k2),
- Eq(g(t), C1*exp(t*(5 + sqrt(33))/2) + C2*exp(t*(5 - sqrt(33))/2) -
- Mul(Rational(1,2), 3*k1 - k2, evaluate = False))]
- assert dsolve(eq15) == sol15
- assert checksysodesol(eq15, sol15) == (True, [0,0])
- eq16 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), k2)]
- sol16 = [Eq(f(t), C1 + k1*t),
- Eq(g(t), C2 + k2*t)]
- assert dsolve(eq16) == sol16
- assert checksysodesol(eq16, sol16) == (True, [0,0])
- eq17 = [Eq(Derivative(f(t), t), 0),
- Eq(Derivative(g(t), t), c*f(t) + k2)]
- sol17 = [Eq(f(t), C1),
- Eq(g(t), C2*c + t*(C1*c + k2))]
- assert dsolve(eq17) == sol17
- assert checksysodesol(eq17 , sol17) == (True , [0,0])
- eq18 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), f(t) + k2)]
- sol18 = [Eq(f(t), C1 + k1*t),
- Eq(g(t), C2 + k1*t**2/2 + t*(C1 + k2))]
- assert dsolve(eq18) == sol18
- assert checksysodesol(eq18 , sol18) == (True , [0,0])
- eq19 = [Eq(Derivative(f(t), t), k1),
- Eq(Derivative(g(t), t), f(t) + 2*g(t) + k2)]
- sol19 = [Eq(f(t), -2*C1 + k1*t),
- Eq(g(t), C1 + C2*exp(2*t) - k1*t/2 - Mul(Rational(1,4), k1 + 2*k2 , evaluate = False))]
- assert dsolve(eq19) == sol19
- assert checksysodesol(eq19 , sol19) == (True , [0,0])
- eq20 = [Eq(diff(f(t), t), f(t) + k1),
- Eq(diff(g(t), t), k2)]
- sol20 = [Eq(f(t), C1*exp(t) - k1),
- Eq(g(t), C2 + k2*t)]
- assert dsolve(eq20) == sol20
- assert checksysodesol(eq20 , sol20) == (True , [0,0])
- eq21 = [Eq(diff(f(t), t), g(t) + k1),
- Eq(diff(g(t), t), 0)]
- sol21 = [Eq(f(t), C1 + t*(C2 + k1)),
- Eq(g(t), C2)]
- assert dsolve(eq21) == sol21
- assert checksysodesol(eq21 , sol21) == (True , [0,0])
- eq22 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), k2)]
- sol22 = [Eq(f(t), -2*C1 + C2*exp(t) - k1 - 2*k2*t - 2*k2),
- Eq(g(t), C1 + k2*t)]
- assert dsolve(eq22) == sol22
- assert checksysodesol(eq22 , sol22) == (True , [0,0])
- eq23 = [Eq(Derivative(f(t), t), g(t) + k1),
- Eq(Derivative(g(t), t), 2*g(t) + k2)]
- sol23 = [Eq(f(t), C1 + C2*exp(2*t)/2 - k2/4 + t*(2*k1 - k2)/2),
- Eq(g(t), C2*exp(2*t) - k2/2)]
- assert dsolve(eq23) == sol23
- assert checksysodesol(eq23 , sol23) == (True , [0,0])
- eq24 = [Eq(Derivative(f(t), t), f(t) + k1),
- Eq(Derivative(g(t), t), 2*f(t) + k2)]
- sol24 = [Eq(f(t), C1*exp(t)/2 - k1),
- Eq(g(t), C1*exp(t) + C2 - 2*k1 - t*(2*k1 - k2))]
- assert dsolve(eq24) == sol24
- assert checksysodesol(eq24 , sol24) == (True , [0,0])
- eq25 = [Eq(Derivative(f(t), t), f(t) + 2*g(t) + k1),
- Eq(Derivative(g(t), t), 3*f(t) + 6*g(t) + k2)]
- sol25 = [Eq(f(t), -2*C1 + C2*exp(7*t)/3 + 2*t*(3*k1 - k2)/7 -
- Mul(Rational(1,49), k1 + 2*k2 , evaluate = False)),
- Eq(g(t), C1 + C2*exp(7*t) - t*(3*k1 - k2)/7 -
- Mul(Rational(3,49), k1 + 2*k2 , evaluate = False))]
- assert dsolve(eq25) == sol25
- assert checksysodesol(eq25 , sol25) == (True , [0,0])
- eq26 = [Eq(Derivative(f(t), t), 2*f(t) - g(t) + k1),
- Eq(Derivative(g(t), t), 4*f(t) - 2*g(t) + 2*k1)]
- sol26 = [Eq(f(t), C1 + 2*C2 + t*(2*C1 + k1)),
- Eq(g(t), 4*C2 + t*(4*C1 + 2*k1))]
- assert dsolve(eq26) == sol26
- assert checksysodesol(eq26 , sol26) == (True , [0,0])
- # Test Case added for issue #22715
- # https://github.com/sympy/sympy/issues/22715
- eq27 = [Eq(diff(x(t),t),-1*y(t)+10), Eq(diff(y(t),t),5*x(t)-2*y(t)+3)]
- sol27 = [Eq(x(t), (C1/5 - 2*C2/5)*exp(-t)*cos(2*t)
- - (2*C1/5 + C2/5)*exp(-t)*sin(2*t)
- + 17*sin(2*t)**2/5 + 17*cos(2*t)**2/5),
- Eq(y(t), C1*exp(-t)*cos(2*t) - C2*exp(-t)*sin(2*t)
- + 10*sin(2*t)**2 + 10*cos(2*t)**2)]
- assert dsolve(eq27) == sol27
- assert checksysodesol(eq27 , sol27) == (True , [0,0])
- def test_sysode_linear_neq_order1_type3():
- f, g, h, k, x0 , y0 = symbols('f g h k x0 y0', cls=Function)
- x, t, a = symbols('x t a')
- r = symbols('r', real=True)
- eqs1 = [Eq(Derivative(f(r), r), r*g(r) + f(r)),
- Eq(Derivative(g(r), r), -r*f(r) + g(r))]
- sol1 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(Derivative(f(x), x), x**2*g(x) + x*f(x)),
- Eq(Derivative(g(x), x), 2*x**2*f(x) + (3*x**2 + x)*g(x))]
- sol2 = [Eq(f(x), (sqrt(17)*C1/17 + C2*(17 - 3*sqrt(17))/34)*exp(x**3*(3 + sqrt(17))/6 + x**2/2) -
- exp(x**3*(3 - sqrt(17))/6 + x**2/2)*(sqrt(17)*C1/17 + C2*(3*sqrt(17) + 17)*Rational(-1, 34))),
- Eq(g(x), exp(x**3*(3 - sqrt(17))/6 + x**2/2)*(C1*(17 - 3*sqrt(17))/34 + sqrt(17)*C2*Rational(-2,
- 17)) + exp(x**3*(3 + sqrt(17))/6 + x**2/2)*(C1*(3*sqrt(17) + 17)/34 + sqrt(17)*C2*Rational(2, 17)))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(f(x).diff(x), x*f(x) + g(x)),
- Eq(g(x).diff(x), -f(x) + x*g(x))]
- sol3 = [Eq(f(x), (C1/2 + I*C2/2)*exp(x**2/2 - I*x) + exp(x**2/2 + I*x)*(C1/2 + I*C2*Rational(-1, 2))),
- Eq(g(x), (I*C1/2 + C2/2)*exp(x**2/2 + I*x) - exp(x**2/2 - I*x)*(I*C1/2 + C2*Rational(-1, 2)))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(f(x).diff(x), x*(f(x) + g(x) + h(x))), Eq(g(x).diff(x), x*(f(x) + g(x) + h(x))),
- Eq(h(x).diff(x), x*(f(x) + g(x) + h(x)))]
- sol4 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0])
- eqs5 = [Eq(f(x).diff(x), x**2*(f(x) + g(x) + h(x))), Eq(g(x).diff(x), x**2*(f(x) + g(x) + h(x))),
- Eq(h(x).diff(x), x**2*(f(x) + g(x) + h(x)))]
- sol5 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(x**3))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0])
- eqs6 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x) + k(x))),
- Eq(Derivative(k(x), x), x*(f(x) + g(x) + h(x) + k(x)))]
- sol6 = [Eq(f(x), -C1/4 - C2/4 - C3/4 + 3*C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(g(x), 3*C1/4 - C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(h(x), -C1/4 + 3*C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2)),
- Eq(k(x), -C1/4 - C2/4 + 3*C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 + C4/4)*exp(2*x**2))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- y = symbols("y", real=True)
- eqs7 = [Eq(Derivative(f(y), y), y*f(y) + g(y)),
- Eq(Derivative(g(y), y), y*g(y) - f(y))]
- sol7 = [Eq(f(y), C1*exp(y**2/2)*sin(y) + C2*exp(y**2/2)*cos(y)),
- Eq(g(y), C1*exp(y**2/2)*cos(y) - C2*exp(y**2/2)*sin(y))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- #Test cases added for the issue 19763
- #https://github.com/sympy/sympy/issues/19763
- eqs8 = [Eq(Derivative(f(t), t), 5*t*f(t) + 2*h(t)),
- Eq(Derivative(h(t), t), 2*f(t) + 5*t*h(t))]
- sol8 = [Eq(f(t), Mul(-1, (C1/2 - C2/2), evaluate = False)*exp(5*t**2/2 - 2*t) + (C1/2 + C2/2)*exp(5*t**2/2 + 2*t)),
- Eq(h(t), (C1/2 - C2/2)*exp(5*t**2/2 - 2*t) + (C1/2 + C2/2)*exp(5*t**2/2 + 2*t))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- eqs9 = [Eq(diff(f(t), t), 5*t*f(t) + t**2*g(t)),
- Eq(diff(g(t), t), -t**2*f(t) + 5*t*g(t))]
- sol9 = [Eq(f(t), (C1/2 - I*C2/2)*exp(I*t**3/3 + 5*t**2/2) + (C1/2 + I*C2/2)*exp(-I*t**3/3 + 5*t**2/2)),
- Eq(g(t), Mul(-1, (I*C1/2 - C2/2) , evaluate = False)*exp(-I*t**3/3 + 5*t**2/2) + (I*C1/2 + C2/2)*exp(I*t**3/3 + 5*t**2/2))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9 , sol9) == (True , [0,0])
- eqs10 = [Eq(diff(f(t), t), t**2*g(t) + 5*t*f(t)),
- Eq(diff(g(t), t), -t**2*f(t) + (9*t**2 + 5*t)*g(t))]
- sol10 = [Eq(f(t), (C1*(77 - 9*sqrt(77))/154 + sqrt(77)*C2/77)*exp(t**3*(sqrt(77) + 9)/6 + 5*t**2/2) + (C1*(77 + 9*sqrt(77))/154 - sqrt(77)*C2/77)*exp(t**3*(9 - sqrt(77))/6 + 5*t**2/2)),
- Eq(g(t), (sqrt(77)*C1/77 + C2*(77 - 9*sqrt(77))/154)*exp(t**3*(9 - sqrt(77))/6 + 5*t**2/2) - (sqrt(77)*C1/77 - C2*(77 + 9*sqrt(77))/154)*exp(t**3*(sqrt(77) + 9)/6 + 5*t**2/2))]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10 , sol10) == (True , [0,0])
- eqs11 = [Eq(diff(f(t), t), 5*t*f(t) + t**2*g(t)),
- Eq(diff(g(t), t), (1-t**2)*f(t) + (5*t + 9*t**2)*g(t))]
- sol11 = [Eq(f(t), C1*x0(t) + C2*x0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t)),
- Eq(g(t), C1*y0(t) + C2*(y0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t) + exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)))]
- assert dsolve(eqs11) == sol11
- @slow
- def test_sysode_linear_neq_order1_type4():
- f, g, h, k = symbols('f g h k', cls=Function)
- x, t, a = symbols('x t a')
- r = symbols('r', real=True)
- eqs1 = [Eq(diff(f(r), r), f(r) + r*g(r) + r**2), Eq(diff(g(r), r), -r*f(r) + g(r) + r)]
- sol1 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2) + exp(r)*sin(r**2/2)*Integral(r**2*exp(-r)*sin(r**2/2) +
- r*exp(-r)*cos(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r**2*exp(-r)*cos(r**2/2) - r*exp(-r)*sin(r**2/2), r)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2) - exp(r)*sin(r**2/2)*Integral(r**2*exp(-r)*cos(r**2/2) -
- r*exp(-r)*sin(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r**2*exp(-r)*sin(r**2/2) + r*exp(-r)*cos(r**2/2), r))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(diff(f(r), r), f(r) + r*g(r) + r), Eq(diff(g(r), r), -r*f(r) + g(r) + log(r))]
- sol2 = [Eq(f(r), C1*exp(r)*sin(r**2/2) + C2*exp(r)*cos(r**2/2) + exp(r)*sin(r**2/2)*Integral(r*exp(-r)*sin(r**2/2) +
- exp(-r)*log(r)*cos(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r*exp(-r)*cos(r**2/2) - exp(-r)*log(r)*sin(
- r**2/2), r)),
- Eq(g(r), C1*exp(r)*cos(r**2/2) - C2*exp(r)*sin(r**2/2) - exp(r)*sin(r**2/2)*Integral(r*exp(-r)*cos(r**2/2) -
- exp(-r)*log(r)*sin(r**2/2), r) + exp(r)*cos(r**2/2)*Integral(r*exp(-r)*sin(r**2/2) + exp(-r)*log(r)*cos(
- r**2/2), r))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs2, simplify=False, doit=False) == [sol2]
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x)) + x),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x)) + x),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x)) + 1)]
- sol3 = [Eq(f(x), C1*Rational(-1, 3) + C2*Rational(-1, 3) + C3*Rational(2, 3) + x**2/6 + x*Rational(-1, 3) +
- (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9)),
- Eq(g(x), C1*Rational(2, 3) + C2*Rational(-1, 3) + C3*Rational(-1, 3) + x**2/6 + x*Rational(-1, 3) +
- (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9)),
- Eq(h(x), C1*Rational(-1, 3) + C2*Rational(2, 3) + C3*Rational(-1, 3) + x**2*Rational(-1, 3) +
- x*Rational(2, 3) + (C1/3 + C2/3 + C3/3)*exp(x**2*Rational(3, 2)) +
- sqrt(6)*sqrt(pi)*erf(sqrt(6)*x/2)*exp(x**2*Rational(3, 2))/18 + Rational(-2, 9))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0])
- eqs4 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x)) + sin(x)),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x)) + sin(x)),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x)) + sin(x))]
- sol4 = [Eq(f(x), C1*Rational(-1, 3) + C2*Rational(-1, 3) + C3*Rational(2, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2))),
- Eq(g(x), C1*Rational(2, 3) + C2*Rational(-1, 3) + C3*Rational(-1, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2))),
- Eq(h(x), C1*Rational(-1, 3) + C2*Rational(2, 3) + C3*Rational(-1, 3) + (C1/3 + C2/3 +
- C3/3)*exp(x**2*Rational(3, 2)) + Integral(sin(x)*exp(x**2*Rational(-3, 2)), x)*exp(x**2*Rational(3,
- 2)))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0])
- eqs5 = [Eq(Derivative(f(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(g(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(h(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(k(x), x), x*(f(x) + g(x) + h(x) + k(x) + 1))]
- sol5 = [Eq(f(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(3, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(g(x), C1*Rational(3, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(h(x), C1*Rational(-1, 4) + C2*Rational(3, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4)),
- Eq(k(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(3, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(2*x**2) + Rational(-1, 4))]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0, 0])
- eqs6 = [Eq(Derivative(f(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(g(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(h(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1)),
- Eq(Derivative(k(x), x), x**2*(f(x) + g(x) + h(x) + k(x) + 1))]
- sol6 = [Eq(f(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(3, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(g(x), C1*Rational(3, 4) + C2*Rational(-1, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(h(x), C1*Rational(-1, 4) + C2*Rational(3, 4) + C3*Rational(-1, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4)),
- Eq(k(x), C1*Rational(-1, 4) + C2*Rational(-1, 4) + C3*Rational(3, 4) + C4*Rational(-1, 4) + (C1/4 +
- C2/4 + C3/4 + C4/4)*exp(x**3*Rational(4, 3)) + Rational(-1, 4))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0, 0, 0])
- eqs7 = [Eq(Derivative(f(x), x), (f(x) + g(x) + h(x))*log(x) + sin(x)), Eq(Derivative(g(x), x), (f(x) + g(x)
- + h(x))*log(x) + sin(x)), Eq(Derivative(h(x), x), (f(x) + g(x) + h(x))*log(x) + sin(x))]
- sol7 = [Eq(f(x), -C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x)),
- Eq(g(x), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x)),
- Eq(h(x), -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 +
- C3/3)*exp(x*(3*log(x) - 3)) + exp(x*(3*log(x) -
- 3))*Integral(exp(3*x)*exp(-3*x*log(x))*sin(x), x))]
- with dotprodsimp(True):
- assert dsolve(eqs7, simplify=False, doit=False) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0, 0])
- eqs8 = [Eq(Derivative(f(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) + sin(x)), Eq(Derivative(g(x), x), (f(x)
- + g(x) + h(x) + k(x))*log(x) + sin(x)), Eq(Derivative(h(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) +
- sin(x)), Eq(Derivative(k(x), x), (f(x) + g(x) + h(x) + k(x))*log(x) + sin(x))]
- sol8 = [Eq(f(x), -C1/4 - C2/4 - C3/4 + 3*C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(g(x), 3*C1/4 - C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(h(x), -C1/4 + 3*C2/4 - C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x)),
- Eq(k(x), -C1/4 - C2/4 + 3*C3/4 - C4/4 + (C1/4 + C2/4 + C3/4 +
- C4/4)*exp(x*(4*log(x) - 4)) + exp(x*(4*log(x) -
- 4))*Integral(exp(4*x)*exp(-4*x*log(x))*sin(x), x))]
- with dotprodsimp(True):
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0, 0, 0])
- def test_sysode_linear_neq_order1_type5_type6():
- f, g = symbols("f g", cls=Function)
- x, x_ = symbols("x x_")
- # Type 5
- eqs1 = [Eq(Derivative(f(x), x), (2*f(x) + g(x))/x), Eq(Derivative(g(x), x), (f(x) + 2*g(x))/x)]
- sol1 = [Eq(f(x), -C1*x + C2*x**3), Eq(g(x), C1*x + C2*x**3)]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- # Type 6
- eqs2 = [Eq(Derivative(f(x), x), (2*f(x) + g(x) + 1)/x),
- Eq(Derivative(g(x), x), (x + f(x) + 2*g(x))/x)]
- sol2 = [Eq(f(x), C2*x**3 - x*(C1 + Rational(1, 4)) + x*log(x)*Rational(-1, 2) + Rational(-2, 3)),
- Eq(g(x), C2*x**3 + x*log(x)/2 + x*(C1 + Rational(-1, 4)) + Rational(1, 3))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- def test_higher_order_to_first_order():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- eqs1 = [Eq(Derivative(f(x), (x, 2)), 2*f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x))]
- sol1 = [Eq(f(x), -C2*x*exp(-x) + C3*x*exp(x) - (C1 - C2)*exp(-x) + (C3 + C4)*exp(x)),
- Eq(g(x), C2*x*exp(-x) - C3*x*exp(x) + (C1 + C2)*exp(-x) + (C3 - C4)*exp(x))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- eqs2 = [Eq(f(x).diff(x, 2), 0), Eq(g(x).diff(x, 2), f(x))]
- sol2 = [Eq(f(x), C1 + C2*x), Eq(g(x), C1*x**2/2 + C2*x**3/6 + C3 + C4*x)]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = [Eq(Derivative(f(x), (x, 2)), 2*f(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x) + 2*g(x))]
- sol3 = [Eq(f(x), 4*C1*exp(-sqrt(2)*x) + 4*C2*exp(sqrt(2)*x)),
- Eq(g(x), sqrt(2)*C1*x*exp(-sqrt(2)*x) - sqrt(2)*C2*x*exp(sqrt(2)*x) + (C1 +
- sqrt(2)*C4)*exp(-sqrt(2)*x) + (C2 - sqrt(2)*C3)*exp(sqrt(2)*x))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- eqs4 = [Eq(Derivative(f(x), (x, 2)), 2*f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), 2*g(x))]
- sol4 = [Eq(f(x), C1*x*exp(sqrt(2)*x)/4 + C3*x*exp(-sqrt(2)*x)/4 + (C2/4 + sqrt(2)*C3/8)*exp(-sqrt(2)*x) -
- exp(sqrt(2)*x)*(sqrt(2)*C1/8 + C4*Rational(-1, 4))),
- Eq(g(x), sqrt(2)*C1*exp(sqrt(2)*x)/2 + sqrt(2)*C3*exp(-sqrt(2)*x)*Rational(-1, 2))]
- assert dsolve(eqs4) == sol4
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- eqs5 = [Eq(f(x).diff(x, 2), f(x)), Eq(g(x).diff(x, 2), f(x))]
- sol5 = [Eq(f(x), -C1*exp(-x) + C2*exp(x)), Eq(g(x), -C1*exp(-x) + C2*exp(x) + C3 + C4*x)]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- eqs6 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x)),
- Eq(Derivative(g(x), (x, 2)), -f(x) - g(x))]
- sol6 = [Eq(f(x), C1 + C2*x**2/2 + C2 + C4*x**3/6 + x*(C3 + C4)),
- Eq(g(x), -C1 + C2*x**2*Rational(-1, 2) - C3*x + C4*x**3*Rational(-1, 6))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- eqs7 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x) + 1),
- Eq(Derivative(g(x), (x, 2)), f(x) + g(x) + 1)]
- sol7 = [Eq(f(x), -C1 - C2*x + sqrt(2)*C3*exp(sqrt(2)*x)/2 + sqrt(2)*C4*exp(-sqrt(2)*x)*Rational(-1, 2) +
- Rational(-1, 2)),
- Eq(g(x), C1 + C2*x + sqrt(2)*C3*exp(sqrt(2)*x)/2 + sqrt(2)*C4*exp(-sqrt(2)*x)*Rational(-1, 2) +
- Rational(-1, 2))]
- assert dsolve(eqs7) == sol7
- assert checksysodesol(eqs7, sol7) == (True, [0, 0])
- eqs8 = [Eq(Derivative(f(x), (x, 2)), f(x) + g(x) + 1),
- Eq(Derivative(g(x), (x, 2)), -f(x) - g(x) + 1)]
- sol8 = [Eq(f(x), C1 + C2 + C4*x**3/6 + x**4/12 + x**2*(C2/2 + Rational(1, 2)) + x*(C3 + C4)),
- Eq(g(x), -C1 - C3*x + C4*x**3*Rational(-1, 6) + x**4*Rational(-1, 12) - x**2*(C2/2 + Rational(-1,
- 2)))]
- assert dsolve(eqs8) == sol8
- assert checksysodesol(eqs8, sol8) == (True, [0, 0])
- x, y = symbols('x, y', cls=Function)
- t, l = symbols('t, l')
- eqs10 = [Eq(Derivative(x(t), (t, 2)), 5*x(t) + 43*y(t)),
- Eq(Derivative(y(t), (t, 2)), x(t) + 9*y(t))]
- sol10 = [Eq(x(t), C1*(61 - 9*sqrt(47))*sqrt(sqrt(47) + 7)*exp(-t*sqrt(sqrt(47) + 7))/2 + C2*sqrt(7 -
- sqrt(47))*(61 + 9*sqrt(47))*exp(-t*sqrt(7 - sqrt(47)))/2 + C3*(61 - 9*sqrt(47))*sqrt(sqrt(47) +
- 7)*exp(t*sqrt(sqrt(47) + 7))*Rational(-1, 2) + C4*sqrt(7 - sqrt(47))*(61 + 9*sqrt(47))*exp(t*sqrt(7
- - sqrt(47)))*Rational(-1, 2)),
- Eq(y(t), C1*(7 - sqrt(47))*sqrt(sqrt(47) + 7)*exp(-t*sqrt(sqrt(47) + 7))*Rational(-1, 2) + C2*sqrt(7
- - sqrt(47))*(sqrt(47) + 7)*exp(-t*sqrt(7 - sqrt(47)))*Rational(-1, 2) + C3*(7 -
- sqrt(47))*sqrt(sqrt(47) + 7)*exp(t*sqrt(sqrt(47) + 7))/2 + C4*sqrt(7 - sqrt(47))*(sqrt(47) +
- 7)*exp(t*sqrt(7 - sqrt(47)))/2)]
- assert dsolve(eqs10) == sol10
- assert checksysodesol(eqs10, sol10) == (True, [0, 0])
- eqs11 = [Eq(7*x(t) + Derivative(x(t), (t, 2)) - 9*Derivative(y(t), t), 0),
- Eq(7*y(t) + 9*Derivative(x(t), t) + Derivative(y(t), (t, 2)), 0)]
- sol11 = [Eq(y(t), C1*(9 - sqrt(109))*sin(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)/14 + C2*(9 -
- sqrt(109))*cos(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C3*(9 +
- sqrt(109))*sin(sqrt(2)*t*sqrt(95 - 9*sqrt(109))/2)/14 + C4*(9 + sqrt(109))*cos(sqrt(2)*t*sqrt(95 -
- 9*sqrt(109))/2)*Rational(-1, 14)),
- Eq(x(t), C1*(9 - sqrt(109))*cos(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C2*(9 -
- sqrt(109))*sin(sqrt(2)*t*sqrt(9*sqrt(109) + 95)/2)*Rational(-1, 14) + C3*(9 +
- sqrt(109))*cos(sqrt(2)*t*sqrt(95 - 9*sqrt(109))/2)/14 + C4*(9 + sqrt(109))*sin(sqrt(2)*t*sqrt(95 -
- 9*sqrt(109))/2)/14)]
- assert dsolve(eqs11) == sol11
- assert checksysodesol(eqs11, sol11) == (True, [0, 0])
- # Euler Systems
- # Note: To add examples of euler systems solver with non-homogeneous term.
- eqs13 = [Eq(Derivative(f(t), (t, 2)), Derivative(f(t), t)/t + f(t)/t**2 + g(t)/t**2),
- Eq(Derivative(g(t), (t, 2)), g(t)/t**2)]
- sol13 = [Eq(f(t), C1*(sqrt(5) + 3)*Rational(-1, 2)*t**(Rational(1, 2) +
- sqrt(5)*Rational(-1, 2)) + C2*t**(Rational(1, 2) +
- sqrt(5)/2)*(3 - sqrt(5))*Rational(-1, 2) - C3*t**(1 -
- sqrt(2))*(1 + sqrt(2)) - C4*t**(1 + sqrt(2))*(1 - sqrt(2))),
- Eq(g(t), C1*(1 + sqrt(5))*Rational(-1, 2)*t**(Rational(1, 2) +
- sqrt(5)*Rational(-1, 2)) + C2*t**(Rational(1, 2) +
- sqrt(5)/2)*(1 - sqrt(5))*Rational(-1, 2))]
- assert dsolve(eqs13) == sol13
- assert checksysodesol(eqs13, sol13) == (True, [0, 0])
- # Solving systems using dsolve separately
- eqs14 = [Eq(Derivative(f(t), (t, 2)), t*f(t)),
- Eq(Derivative(g(t), (t, 2)), t*g(t))]
- sol14 = [Eq(f(t), C1*airyai(t) + C2*airybi(t)),
- Eq(g(t), C3*airyai(t) + C4*airybi(t))]
- assert dsolve(eqs14) == sol14
- assert checksysodesol(eqs14, sol14) == (True, [0, 0])
- eqs15 = [Eq(Derivative(x(t), (t, 2)), t*(4*Derivative(x(t), t) + 8*Derivative(y(t), t))),
- Eq(Derivative(y(t), (t, 2)), t*(12*Derivative(x(t), t) - 6*Derivative(y(t), t)))]
- sol15 = [Eq(x(t), C1 - erf(sqrt(6)*t)*(sqrt(6)*sqrt(pi)*C2/33 + sqrt(6)*sqrt(pi)*C3*Rational(-1, 44)) +
- erfi(sqrt(5)*t)*(sqrt(5)*sqrt(pi)*C2*Rational(2, 55) + sqrt(5)*sqrt(pi)*C3*Rational(4, 55))),
- Eq(y(t), C4 + erf(sqrt(6)*t)*(sqrt(6)*sqrt(pi)*C2*Rational(2, 33) + sqrt(6)*sqrt(pi)*C3*Rational(-1,
- 22)) + erfi(sqrt(5)*t)*(sqrt(5)*sqrt(pi)*C2*Rational(3, 110) + sqrt(5)*sqrt(pi)*C3*Rational(3, 55)))]
- assert dsolve(eqs15) == sol15
- assert checksysodesol(eqs15, sol15) == (True, [0, 0])
- @slow
- def test_higher_order_to_first_order_9():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- eqs9 = [f(x) + g(x) - 2*exp(I*x) + 2*Derivative(f(x), x) + Derivative(f(x), (x, 2)),
- f(x) + g(x) - 2*exp(I*x) + 2*Derivative(g(x), x) + Derivative(g(x), (x, 2))]
- sol9 = [Eq(f(x), -C1 + C4*exp(-2*x)/2 - (C2/2 - C3/2)*exp(-x)*cos(x)
- + (C2/2 + C3/2)*exp(-x)*sin(x) + 2*((1 - 2*I)*exp(I*x)*sin(x)**2/5)
- + 2*((1 - 2*I)*exp(I*x)*cos(x)**2/5)),
- Eq(g(x), C1 - C4*exp(-2*x)/2 - (C2/2 - C3/2)*exp(-x)*cos(x)
- + (C2/2 + C3/2)*exp(-x)*sin(x) + 2*((1 - 2*I)*exp(I*x)*sin(x)**2/5)
- + 2*((1 - 2*I)*exp(I*x)*cos(x)**2/5))]
- assert dsolve(eqs9) == sol9
- assert checksysodesol(eqs9, sol9) == (True, [0, 0])
- def test_higher_order_to_first_order_12():
- f, g = symbols('f g', cls=Function)
- x = symbols('x')
- x, y = symbols('x, y', cls=Function)
- t, l = symbols('t, l')
- eqs12 = [Eq(4*x(t) + Derivative(x(t), (t, 2)) + 8*Derivative(y(t), t), 0),
- Eq(4*y(t) - 8*Derivative(x(t), t) + Derivative(y(t), (t, 2)), 0)]
- sol12 = [Eq(y(t), C1*(2 - sqrt(5))*sin(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C2*(2 -
- sqrt(5))*cos(2*t*sqrt(4*sqrt(5) + 9))/2 + C3*(2 + sqrt(5))*sin(2*t*sqrt(9 - 4*sqrt(5)))*Rational(-1,
- 2) + C4*(2 + sqrt(5))*cos(2*t*sqrt(9 - 4*sqrt(5)))/2),
- Eq(x(t), C1*(2 - sqrt(5))*cos(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C2*(2 -
- sqrt(5))*sin(2*t*sqrt(4*sqrt(5) + 9))*Rational(-1, 2) + C3*(2 + sqrt(5))*cos(2*t*sqrt(9 -
- 4*sqrt(5)))/2 + C4*(2 + sqrt(5))*sin(2*t*sqrt(9 - 4*sqrt(5)))/2)]
- assert dsolve(eqs12) == sol12
- assert checksysodesol(eqs12, sol12) == (True, [0, 0])
- def test_second_order_to_first_order_2():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- eqs2 = [Eq(f(x).diff(x, 2), 2*(x*g(x).diff(x) - g(x))),
- Eq(g(x).diff(x, 2),-2*(x*f(x).diff(x) - f(x)))]
- sol2 = [Eq(f(x), C1*x + x*Integral(C2*exp(-x_)*exp(I*exp(2*x_))/2 + C2*exp(-x_)*exp(-I*exp(2*x_))/2 -
- I*C3*exp(-x_)*exp(I*exp(2*x_))/2 + I*C3*exp(-x_)*exp(-I*exp(2*x_))/2, (x_, log(x)))),
- Eq(g(x), C4*x + x*Integral(I*C2*exp(-x_)*exp(I*exp(2*x_))/2 - I*C2*exp(-x_)*exp(-I*exp(2*x_))/2 +
- C3*exp(-x_)*exp(I*exp(2*x_))/2 + C3*exp(-x_)*exp(-I*exp(2*x_))/2, (x_, log(x))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs2, simplify=False, doit=False) == [sol2]
- assert checksysodesol(eqs2, sol2) == (True, [0, 0])
- eqs3 = (Eq(diff(f(t),t,t), 9*t*diff(g(t),t)-9*g(t)), Eq(diff(g(t),t,t),7*t*diff(f(t),t)-7*f(t)))
- sol3 = [Eq(f(t), C1*t + t*Integral(C2*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/2 + C2*exp(-t_)*
- exp(-3*sqrt(7)*exp(2*t_)/2)/2 + 3*sqrt(7)*C3*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/14 -
- 3*sqrt(7)*C3*exp(-t_)*exp(-3*sqrt(7)*exp(2*t_)/2)/14, (t_, log(t)))),
- Eq(g(t), C4*t + t*Integral(sqrt(7)*C2*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/6 - sqrt(7)*C2*exp(-t_)*
- exp(-3*sqrt(7)*exp(2*t_)/2)/6 + C3*exp(-t_)*exp(3*sqrt(7)*exp(2*t_)/2)/2 + C3*exp(-t_)*exp(-3*sqrt(7)*
- exp(2*t_)/2)/2, (t_, log(t))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs3, simplify=False, doit=False) == [sol3]
- assert checksysodesol(eqs3, sol3) == (True, [0, 0])
- # Regression Test case for sympy#19238
- # https://github.com/sympy/sympy/issues/19238
- # Note: When the doit method is removed, these particular types of systems
- # can be divided first so that we have lesser number of big matrices.
- eqs5 = [Eq(Derivative(g(t), (t, 2)), a*m),
- Eq(Derivative(f(t), (t, 2)), 0)]
- sol5 = [Eq(g(t), C1 + C2*t + a*m*t**2/2),
- Eq(f(t), C3 + C4*t)]
- assert dsolve(eqs5) == sol5
- assert checksysodesol(eqs5, sol5) == (True, [0, 0])
- # Type 2
- eqs6 = [Eq(Derivative(f(t), (t, 2)), f(t)/t**4),
- Eq(Derivative(g(t), (t, 2)), d*g(t)/t**4)]
- sol6 = [Eq(f(t), C1*sqrt(t**2)*exp(-1/t) - C2*sqrt(t**2)*exp(1/t)),
- Eq(g(t), C3*sqrt(t**2)*exp(-sqrt(d)/t)*d**Rational(-1, 2) -
- C4*sqrt(t**2)*exp(sqrt(d)/t)*d**Rational(-1, 2))]
- assert dsolve(eqs6) == sol6
- assert checksysodesol(eqs6, sol6) == (True, [0, 0])
- @slow
- def test_second_order_to_first_order_slow1():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- # Type 1
- eqs1 = [Eq(f(x).diff(x, 2), 2/x *(x*g(x).diff(x) - g(x))),
- Eq(g(x).diff(x, 2),-2/x *(x*f(x).diff(x) - f(x)))]
- sol1 = [Eq(f(x), C1*x + 2*C2*x*Ci(2*x) - C2*sin(2*x) - 2*C3*x*Si(2*x) - C3*cos(2*x)),
- Eq(g(x), -2*C2*x*Si(2*x) - C2*cos(2*x) - 2*C3*x*Ci(2*x) + C3*sin(2*x) + C4*x)]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- def test_second_order_to_first_order_slow4():
- f, g = symbols("f g", cls=Function)
- x, t, x_, t_, d, a, m = symbols("x t x_ t_ d a m")
- eqs4 = [Eq(Derivative(f(t), (t, 2)), t*sin(t)*Derivative(g(t), t) - g(t)*sin(t)),
- Eq(Derivative(g(t), (t, 2)), t*sin(t)*Derivative(f(t), t) - f(t)*sin(t))]
- sol4 = [Eq(f(t), C1*t + t*Integral(C2*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*exp(-sin(exp(t_)))/2 +
- C2*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2 - C3*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*
- exp(-sin(exp(t_)))/2 +
- C3*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2, (t_, log(t)))),
- Eq(g(t), C4*t + t*Integral(-C2*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*exp(-sin(exp(t_)))/2 +
- C2*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2 + C3*exp(-t_)*exp(exp(t_)*cos(exp(t_)))*
- exp(-sin(exp(t_)))/2 + C3*exp(-t_)*exp(-exp(t_)*cos(exp(t_)))*exp(sin(exp(t_)))/2, (t_, log(t))))]
- # XXX: dsolve hangs for this in integration
- assert dsolve_system(eqs4, simplify=False, doit=False) == [sol4]
- assert checksysodesol(eqs4, sol4) == (True, [0, 0])
- def test_component_division():
- f, g, h, k = symbols('f g h k', cls=Function)
- x = symbols("x")
- funcs = [f(x), g(x), h(x), k(x)]
- eqs1 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), h(x)**4 + k(x))]
- sol1 = [Eq(f(x), 2*C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x) + C2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C3**4*exp(4*x)/3 + C4*exp(x))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0, 0, 0])
- components1 = {((Eq(Derivative(f(x), x), 2*f(x)),), (Eq(Derivative(g(x), x), f(x)),)),
- ((Eq(Derivative(h(x), x), h(x)),), (Eq(Derivative(k(x), x), h(x)**4 + k(x)),))}
- eqsdict1 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {h(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), h(x)**4 + k(x))})
- graph1 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), h(x))}]
- assert {tuple(tuple(scc) for scc in wcc) for wcc in _component_division(eqs1, funcs, x)} == components1
- assert _eqs2dict(eqs1, funcs) == eqsdict1
- assert [set(element) for element in _dict2graph(eqsdict1[0])] == graph1
- eqs2 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol2 = [Eq(f(x), C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x)/2 + C2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C1**4*exp(8*x)/7 + C4*exp(x))]
- assert dsolve(eqs2) == sol2
- assert checksysodesol(eqs2, sol2) == (True, [0, 0, 0, 0])
- components2 = {frozenset([(Eq(Derivative(f(x), x), 2*f(x)),),
- (Eq(Derivative(g(x), x), f(x)),),
- (Eq(Derivative(k(x), x), f(x)**4 + k(x)),)]),
- frozenset([(Eq(Derivative(h(x), x), h(x)),)])}
- eqsdict2 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph2 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), f(x))}]
- assert {frozenset(tuple(scc) for scc in wcc) for wcc in _component_division(eqs2, funcs, x)} == components2
- assert _eqs2dict(eqs2, funcs) == eqsdict2
- assert [set(element) for element in _dict2graph(eqsdict2[0])] == graph2
- eqs3 = [Eq(Derivative(f(x), x), 2*f(x)),
- Eq(Derivative(g(x), x), x + f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol3 = [Eq(f(x), C1*exp(2*x)),
- Eq(g(x), C1*exp(2*x)/2 + C2 + x**2/2),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C1**4*exp(8*x)/7 + C4*exp(x))]
- assert dsolve(eqs3) == sol3
- assert checksysodesol(eqs3, sol3) == (True, [0, 0, 0, 0])
- components3 = {frozenset([(Eq(Derivative(f(x), x), 2*f(x)),),
- (Eq(Derivative(g(x), x), x + f(x)),),
- (Eq(Derivative(k(x), x), f(x)**4 + k(x)),)]),
- frozenset([(Eq(Derivative(h(x), x), h(x)),),])}
- eqsdict3 = ({f(x): set(), g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), 2*f(x)),
- g(x): Eq(Derivative(g(x), x), x + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph3 = [{f(x), g(x), h(x), k(x)}, {(g(x), f(x)), (k(x), f(x))}]
- assert {frozenset(tuple(scc) for scc in wcc) for wcc in _component_division(eqs3, funcs, x)} == components3
- assert _eqs2dict(eqs3, funcs) == eqsdict3
- assert [set(l) for l in _dict2graph(eqsdict3[0])] == graph3
- # Note: To be uncommented when the default option to call dsolve first for
- # single ODE system can be rearranged. This can be done after the doit
- # option in dsolve is made False by default.
- eqs4 = [Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), f(x) + x*g(x) + x),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol4 = [Eq(f(x), (C1/2 - sqrt(2)*C2/2 - sqrt(2)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 +\
- sqrt(2)*x)/2, x)/2 + Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 +\
- sqrt(2)*x)/2, x)/2)*exp(x**2/2 - sqrt(2)*x) + (C1/2 + sqrt(2)*C2/2 + sqrt(2)*Integral(x*exp(-x**2/2
- - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2
- - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(g(x), (-sqrt(2)*C1/4 + C2/2 + Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 -\
- sqrt(2)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2,
- x)/4)*exp(x**2/2 - sqrt(2)*x) + (sqrt(2)*C1/4 + C2/2 + Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 +
- x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + sqrt(2)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 -
- sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/4)*exp(x**2/2 + sqrt(2)*x)),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C4*exp(x) + exp(x)*Integral((C1*exp(x**2/2 - sqrt(2)*x)/2 + C1*exp(x**2/2 + sqrt(2)*x)/2 -
- sqrt(2)*C2*exp(x**2/2 - sqrt(2)*x)/2 + sqrt(2)*C2*exp(x**2/2 + sqrt(2)*x)/2 - sqrt(2)*exp(x**2/2 -
- sqrt(2)*x)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2 + exp(x**2/2 -
- sqrt(2)*x)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 - sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2,
- x)/2 + sqrt(2)*exp(x**2/2 + sqrt(2)*x)*Integral(x*exp(-x**2/2 - sqrt(2)*x)/2 + x*exp(-x**2/2 +
- sqrt(2)*x)/2, x)/2 + exp(x**2/2 + sqrt(2)*x)*Integral(sqrt(2)*x*exp(-x**2/2 - sqrt(2)*x)/2 -
- sqrt(2)*x*exp(-x**2/2 + sqrt(2)*x)/2, x)/2)**4*exp(-x), x))]
- components4 = {(frozenset([Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + x + f(x))]),
- frozenset([Eq(Derivative(k(x), x), f(x)**4 + k(x)),])),
- (frozenset([Eq(Derivative(h(x), x), h(x)),]),)}
- eqsdict4 = ({f(x): {g(x)}, g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- g(x): Eq(Derivative(g(x), x), x*g(x) + x + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph4 = [{f(x), g(x), h(x), k(x)}, {(f(x), g(x)), (g(x), f(x)), (k(x), f(x))}]
- assert {tuple(frozenset(scc) for scc in wcc) for wcc in _component_division(eqs4, funcs, x)} == components4
- assert _eqs2dict(eqs4, funcs) == eqsdict4
- assert [set(element) for element in _dict2graph(eqsdict4[0])] == graph4
- # XXX: dsolve hangs in integration here:
- assert dsolve_system(eqs4, simplify=False, doit=False) == [sol4]
- assert checksysodesol(eqs4, sol4) == (True, [0, 0, 0, 0])
- eqs5 = [Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + f(x)),
- Eq(Derivative(h(x), x), h(x)),
- Eq(Derivative(k(x), x), f(x)**4 + k(x))]
- sol5 = [Eq(f(x), (C1/2 - sqrt(2)*C2/2)*exp(x**2/2 - sqrt(2)*x) + (C1/2 + sqrt(2)*C2/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(g(x), (-sqrt(2)*C1/4 + C2/2)*exp(x**2/2 - sqrt(2)*x) + (sqrt(2)*C1/4 + C2/2)*exp(x**2/2 + sqrt(2)*x)),
- Eq(h(x), C3*exp(x)),
- Eq(k(x), C4*exp(x) + exp(x)*Integral((C1*exp(x**2/2 - sqrt(2)*x)/2 + C1*exp(x**2/2 + sqrt(2)*x)/2 -
- sqrt(2)*C2*exp(x**2/2 - sqrt(2)*x)/2 + sqrt(2)*C2*exp(x**2/2 + sqrt(2)*x)/2)**4*exp(-x), x))]
- components5 = {(frozenset([Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- Eq(Derivative(g(x), x), x*g(x) + f(x))]),
- frozenset([Eq(Derivative(k(x), x), f(x)**4 + k(x)),])),
- (frozenset([Eq(Derivative(h(x), x), h(x)),]),)}
- eqsdict5 = ({f(x): {g(x)}, g(x): {f(x)}, h(x): set(), k(x): {f(x)}},
- {f(x): Eq(Derivative(f(x), x), x*f(x) + 2*g(x)),
- g(x): Eq(Derivative(g(x), x), x*g(x) + f(x)),
- h(x): Eq(Derivative(h(x), x), h(x)),
- k(x): Eq(Derivative(k(x), x), f(x)**4 + k(x))})
- graph5 = [{f(x), g(x), h(x), k(x)}, {(f(x), g(x)), (g(x), f(x)), (k(x), f(x))}]
- assert {tuple(frozenset(scc) for scc in wcc) for wcc in _component_division(eqs5, funcs, x)} == components5
- assert _eqs2dict(eqs5, funcs) == eqsdict5
- assert [set(element) for element in _dict2graph(eqsdict5[0])] == graph5
- # XXX: dsolve hangs in integration here:
- assert dsolve_system(eqs5, simplify=False, doit=False) == [sol5]
- assert checksysodesol(eqs5, sol5) == (True, [0, 0, 0, 0])
- def test_linodesolve():
- t, x, a = symbols("t x a")
- f, g, h = symbols("f g h", cls=Function)
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(1, t))
- raises(ValueError, lambda: linodesolve(a, t))
- A1 = Matrix([[1, 2], [2, 4], [4, 6]])
- raises(NonSquareMatrixError, lambda: linodesolve(A1, t))
- A2 = Matrix([[1, 2, 1], [3, 1, 2]])
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t))
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t) + g(t).diff(t), g(t)), Eq(g(t).diff(t), f(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [C1*(-Rational(1, 2) + sqrt(5)/2)*exp(t*(-Rational(1, 2) + sqrt(5)/2)) + C2*(-sqrt(5)/2 - Rational(1, 2))*
- exp(t*(-sqrt(5)/2 - Rational(1, 2))),
- C1*exp(t*(-Rational(1, 2) + sqrt(5)/2)) + C2*exp(t*(-sqrt(5)/2 - Rational(1, 2)))]
- assert constant_renumber(linodesolve(A, t), variables=Tuple(*eq).free_symbols) == sol
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(1, t, b=Matrix([t+1])))
- raises(ValueError, lambda: linodesolve(a, t, b=Matrix([log(t) + sin(t)])))
- raises(ValueError, lambda: linodesolve(Matrix([7]), t, b=t**2))
- raises(ValueError, lambda: linodesolve(Matrix([a+10]), t, b=log(t)*cos(t)))
- raises(ValueError, lambda: linodesolve(7, t, b=t**2))
- raises(ValueError, lambda: linodesolve(a, t, b=log(t) + sin(t)))
- A1 = Matrix([[1, 2], [2, 4], [4, 6]])
- b1 = Matrix([t, 1, t**2])
- raises(NonSquareMatrixError, lambda: linodesolve(A1, t, b=b1))
- A2 = Matrix([[1, 2, 1], [3, 1, 2]])
- b2 = Matrix([t, t**2])
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t, b=b2))
- raises(ValueError, lambda: linodesolve(A1[:2, :], t, b=b1))
- raises(ValueError, lambda: linodesolve(A1[:2, :], t, b=b1[:1]))
- # DOIT check
- A1 = Matrix([[1, -1], [1, -1]])
- b1 = Matrix([15*t - 10, -15*t - 5])
- sol1 = [C1 + C2*t + C2 - 10*t**3 + 10*t**2 + t*(15*t**2 - 5*t) - 10*t,
- C1 + C2*t - 10*t**3 - 5*t**2 + t*(15*t**2 - 5*t) - 5*t]
- assert constant_renumber(linodesolve(A1, t, b=b1, type="type2", doit=True),
- variables=[t]) == sol1
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t) + g(t).diff(t), g(t) + t), Eq(g(t).diff(t), f(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [-C1*exp(-t/2 + sqrt(5)*t/2)/2 + sqrt(5)*C1*exp(-t/2 + sqrt(5)*t/2)/2 - sqrt(5)*C2*exp(-sqrt(5)*t/2 -
- t/2)/2 - C2*exp(-sqrt(5)*t/2 - t/2)/2 - exp(-t/2 + sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)), t)/2 + sqrt(5)*exp(-t/2 +
- sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)), t)/2 - sqrt(5)*exp(-sqrt(5)*t/2 - t/2)*Integral(-sqrt(5)*t*exp(t/2 +
- sqrt(5)*t/2)/5, t)/2 - exp(-sqrt(5)*t/2 - t/2)*Integral(-sqrt(5)*t*exp(t/2 + sqrt(5)*t/2)/5, t)/2,
- C1*exp(-t/2 + sqrt(5)*t/2) + C2*exp(-sqrt(5)*t/2 - t/2) + exp(-t/2 +
- sqrt(5)*t/2)*Integral(t*exp(-sqrt(5)*t/2 + t/2)/(-5 + sqrt(5)) - sqrt(5)*t*exp(-sqrt(5)*t/2 +
- t/2)/(-5 + sqrt(5)), t) + exp(-sqrt(5)*t/2 -
- t/2)*Integral(-sqrt(5)*t*exp(t/2 + sqrt(5)*t/2)/5, t)]
- assert constant_renumber(linodesolve(A, t, b=b), variables=[t]) == sol
- # non-homogeneous term assumed to be 0
- sol1 = [-C1*exp(-t/2 + sqrt(5)*t/2)/2 + sqrt(5)*C1*exp(-t/2 + sqrt(5)*t/2)/2 - sqrt(5)*C2*exp(-sqrt(5)*t/2
- - t/2)/2 - C2*exp(-sqrt(5)*t/2 - t/2)/2,
- C1*exp(-t/2 + sqrt(5)*t/2) + C2*exp(-sqrt(5)*t/2 - t/2)]
- assert constant_renumber(linodesolve(A, t, type="type2"), variables=[t]) == sol1
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(t+10, t))
- raises(ValueError, lambda: linodesolve(a*t, t))
- A1 = Matrix([[1, t], [-t, 1]])
- B1, _ = _is_commutative_anti_derivative(A1, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A1[:, :1], t, B=B1))
- raises(ValueError, lambda: linodesolve(A1, t, B=1))
- A2 = Matrix([[t, t, t], [t, t, t], [t, t, t]])
- B2, _ = _is_commutative_anti_derivative(A2, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A2, t, B=B2[:2, :]))
- raises(ValueError, lambda: linodesolve(A2, t, B=2))
- raises(ValueError, lambda: linodesolve(A2, t, B=B2, type="type31"))
- raises(ValueError, lambda: linodesolve(A1, t, B=B2))
- raises(ValueError, lambda: linodesolve(A2, t, B=B1))
- # Testing auto functionality
- func = [f(t), g(t)]
- eq = [Eq(f(t).diff(t), f(t) + t*g(t)), Eq(g(t).diff(t), -t*f(t) + g(t))]
- ceq = canonical_odes(eq, func, t)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, t, 1)
- A = A0
- sol = [(C1/2 - I*C2/2)*exp(I*t**2/2 + t) + (C1/2 + I*C2/2)*exp(-I*t**2/2 + t),
- (-I*C1/2 + C2/2)*exp(-I*t**2/2 + t) + (I*C1/2 + C2/2)*exp(I*t**2/2 + t)]
- assert constant_renumber(linodesolve(A, t), variables=Tuple(*eq).free_symbols) == sol
- assert constant_renumber(linodesolve(A, t, type="type3"), variables=Tuple(*eq).free_symbols) == sol
- A1 = Matrix([[t, 1], [t, -1]])
- raises(NotImplementedError, lambda: linodesolve(A1, t))
- # Testing the Errors
- raises(ValueError, lambda: linodesolve(t+10, t, b=Matrix([t+1])))
- raises(ValueError, lambda: linodesolve(a*t, t, b=Matrix([log(t) + sin(t)])))
- raises(ValueError, lambda: linodesolve(Matrix([7*t]), t, b=t**2))
- raises(ValueError, lambda: linodesolve(Matrix([a + 10*log(t)]), t, b=log(t)*cos(t)))
- raises(ValueError, lambda: linodesolve(7*t, t, b=t**2))
- raises(ValueError, lambda: linodesolve(a*t**2, t, b=log(t) + sin(t)))
- A1 = Matrix([[1, t], [-t, 1]])
- b1 = Matrix([t, t ** 2])
- B1, _ = _is_commutative_anti_derivative(A1, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A1[:, :1], t, b=b1))
- A2 = Matrix([[t, t, t], [t, t, t], [t, t, t]])
- b2 = Matrix([t, 1, t**2])
- B2, _ = _is_commutative_anti_derivative(A2, t)
- raises(NonSquareMatrixError, lambda: linodesolve(A2[:2, :], t, b=b2))
- raises(ValueError, lambda: linodesolve(A1, t, b=b2))
- raises(ValueError, lambda: linodesolve(A2, t, b=b1))
- raises(ValueError, lambda: linodesolve(A1, t, b=b1, B=B2))
- raises(ValueError, lambda: linodesolve(A2, t, b=b2, B=B1))
- # Testing auto functionality
- func = [f(x), g(x), h(x)]
- eq = [Eq(f(x).diff(x), x*(f(x) + g(x) + h(x)) + x),
- Eq(g(x).diff(x), x*(f(x) + g(x) + h(x)) + x),
- Eq(h(x).diff(x), x*(f(x) + g(x) + h(x)) + 1)]
- ceq = canonical_odes(eq, func, x)
- (A1, A0), b = linear_ode_to_matrix(ceq[0], func, x, 1)
- A = A0
- _x1 = exp(-3*x**2/2)
- _x2 = exp(3*x**2/2)
- _x3 = Integral(2*_x1*x/3 + _x1/3 + x/3 - Rational(1, 3), x)
- _x4 = 2*_x2*_x3/3
- _x5 = Integral(2*_x1*x/3 + _x1/3 - 2*x/3 + Rational(2, 3), x)
- sol = [
- C1*_x2/3 - C1/3 + C2*_x2/3 - C2/3 + C3*_x2/3 + 2*C3/3 + _x2*_x5/3 + _x3/3 + _x4 - _x5/3,
- C1*_x2/3 + 2*C1/3 + C2*_x2/3 - C2/3 + C3*_x2/3 - C3/3 + _x2*_x5/3 + _x3/3 + _x4 - _x5/3,
- C1*_x2/3 - C1/3 + C2*_x2/3 + 2*C2/3 + C3*_x2/3 - C3/3 + _x2*_x5/3 - 2*_x3/3 + _x4 + 2*_x5/3,
- ]
- assert constant_renumber(linodesolve(A, x, b=b), variables=Tuple(*eq).free_symbols) == sol
- assert constant_renumber(linodesolve(A, x, b=b, type="type4"),
- variables=Tuple(*eq).free_symbols) == sol
- A1 = Matrix([[t, 1], [t, -1]])
- raises(NotImplementedError, lambda: linodesolve(A1, t, b=b1))
- # non-homogeneous term not passed
- sol1 = [-C1/3 - C2/3 + 2*C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2), 2*C1/3 - C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2),
- -C1/3 + 2*C2/3 - C3/3 + (C1/3 + C2/3 + C3/3)*exp(3*x**2/2)]
- assert constant_renumber(linodesolve(A, x, type="type4", doit=True), variables=Tuple(*eq).free_symbols) == sol1
- @slow
- def test_linear_3eq_order1_type4_slow():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- f = t ** 3 + log(t)
- g = t ** 2 + sin(t)
- eq1 = (Eq(diff(x(t), t), (4 * f + g) * x(t) - f * y(t) - 2 * f * z(t)),
- Eq(diff(y(t), t), 2 * f * x(t) + (f + g) * y(t) - 2 * f * z(t)), Eq(diff(z(t), t), 5 * f * x(t) + f * y(
- t) + (-3 * f + g) * z(t)))
- with dotprodsimp(True):
- dsolve(eq1)
- @slow
- def test_linear_neq_order1_type2_slow1():
- i, r1, c1, r2, c2, t = symbols('i, r1, c1, r2, c2, t')
- x1 = Function('x1')
- x2 = Function('x2')
- eq1 = r1*c1*Derivative(x1(t), t) + x1(t) - x2(t) - r1*i
- eq2 = r2*c1*Derivative(x1(t), t) + r2*c2*Derivative(x2(t), t) + x2(t) - r2*i
- eq = [eq1, eq2]
- # XXX: Solution is too complicated
- [sol] = dsolve_system(eq, simplify=False, doit=False)
- assert checksysodesol(eq, sol) == (True, [0, 0])
- # Regression test case for issue #9204
- # https://github.com/sympy/sympy/issues/9204
- @slow
- def test_linear_new_order1_type2_de_lorentz_slow_check():
- if ON_CI:
- skip("Too slow for CI.")
- m = Symbol("m", real=True)
- q = Symbol("q", real=True)
- t = Symbol("t", real=True)
- e1, e2, e3 = symbols("e1:4", real=True)
- b1, b2, b3 = symbols("b1:4", real=True)
- v1, v2, v3 = symbols("v1:4", cls=Function, real=True)
- eqs = [
- -e1*q + m*Derivative(v1(t), t) - q*(-b2*v3(t) + b3*v2(t)),
- -e2*q + m*Derivative(v2(t), t) - q*(b1*v3(t) - b3*v1(t)),
- -e3*q + m*Derivative(v3(t), t) - q*(-b1*v2(t) + b2*v1(t))
- ]
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0, 0])
- # Regression test case for issue #14001
- # https://github.com/sympy/sympy/issues/14001
- @slow
- def test_linear_neq_order1_type2_slow_check():
- RC, t, C, Vs, L, R1, V0, I0 = symbols("RC t C Vs L R1 V0 I0")
- V = Function("V")
- I = Function("I")
- system = [Eq(V(t).diff(t), -1/RC*V(t) + I(t)/C), Eq(I(t).diff(t), -R1/L*I(t) - 1/L*V(t) + Vs/L)]
- [sol] = dsolve_system(system, simplify=False, doit=False)
- assert checksysodesol(system, sol) == (True, [0, 0])
- def _linear_3eq_order1_type4_long():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- f = t ** 3 + log(t)
- g = t ** 2 + sin(t)
- eq1 = (Eq(diff(x(t), t), (4*f + g)*x(t) - f*y(t) - 2*f*z(t)),
- Eq(diff(y(t), t), 2*f*x(t) + (f + g)*y(t) - 2*f*z(t)), Eq(diff(z(t), t), 5*f*x(t) + f*y(
- t) + (-3*f + g)*z(t)))
- dsolve_sol = dsolve(eq1)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- x_1 = sqrt(-t**6 - 8*t**3*log(t) + 8*t**3 - 16*log(t)**2 + 32*log(t) - 16)
- x_2 = sqrt(3)
- x_3 = 8324372644*C1*x_1*x_2 + 4162186322*C2*x_1*x_2 - 8324372644*C3*x_1*x_2
- x_4 = 1 / (1903457163*t**3 + 3825881643*x_1*x_2 + 7613828652*log(t) - 7613828652)
- x_5 = exp(t**3/3 + t*x_1*x_2/4 - cos(t))
- x_6 = exp(t**3/3 - t*x_1*x_2/4 - cos(t))
- x_7 = exp(t**4/2 + t**3/3 + 2*t*log(t) - 2*t - cos(t))
- x_8 = 91238*C1*x_1*x_2 + 91238*C2*x_1*x_2 - 91238*C3*x_1*x_2
- x_9 = 1 / (66049*t**3 - 50629*x_1*x_2 + 264196*log(t) - 264196)
- x_10 = 50629 * C1 / 25189 + 37909*C2/25189 - 50629*C3/25189 - x_3*x_4
- x_11 = -50629*C1/25189 - 12720*C2/25189 + 50629*C3/25189 + x_3*x_4
- sol = [Eq(x(t), x_10*x_5 + x_11*x_6 + x_7*(C1 - C2)), Eq(y(t), x_10*x_5 + x_11*x_6), Eq(z(t), x_5*(
- -424*C1/257 - 167*C2/257 + 424*C3/257 - x_8*x_9) + x_6*(167*C1/257 + 424*C2/257 -
- 167*C3/257 + x_8*x_9) + x_7*(C1 - C2))]
- assert dsolve_sol1 == sol
- assert checksysodesol(eq1, dsolve_sol1) == (True, [0, 0, 0])
- @slow
- def test_neq_order1_type4_slow_check1():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [Eq(diff(f(x), x), x*f(x) + x**2*g(x) + x),
- Eq(diff(g(x), x), 2*x**2*f(x) + (x + 3*x**2)*g(x) + 1)]
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0])
- @slow
- def test_neq_order1_type4_slow_check2():
- f, g, h = symbols("f, g, h", cls=Function)
- x = Symbol("x")
- eqs = [
- Eq(Derivative(f(x), x), x*h(x) + f(x) + g(x) + 1),
- Eq(Derivative(g(x), x), x*g(x) + f(x) + h(x) + 10),
- Eq(Derivative(h(x), x), x*f(x) + x + g(x) + h(x))
- ]
- with dotprodsimp(True):
- sol = dsolve(eqs)
- assert checksysodesol(eqs, sol) == (True, [0, 0, 0])
- def _neq_order1_type4_slow3():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [
- Eq(Derivative(f(x), x), x*f(x) + g(x) + sin(x)),
- Eq(Derivative(g(x), x), x**2 + x*g(x) - f(x))
- ]
- sol = [
- Eq(f(x), (C1/2 - I*C2/2 - I*Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 + Integral(-I*x**2*exp(-x**2/2
- - I*x)/2 + I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 -
- I*x)*sin(x)/2 + exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 +
- I*x) + (C1/2 + I*C2/2 + I*Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 + Integral(-I*x**2*exp(-x**2/2
- - I*x)/2 + I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 -
- I*x)*sin(x)/2 + exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 -
- I*x)),
- Eq(g(x), (-I*C1/2 + C2/2 + Integral(x**2*exp(-x**2/2 - I*x)/2 +
- x**2*exp(-x**2/2 + I*x)/2 + I*exp(-x**2/2 - I*x)*sin(x)/2 -
- I*exp(-x**2/2 + I*x)*sin(x)/2, x)/2 -
- I*Integral(-I*x**2*exp(-x**2/2 - I*x)/2 + I*x**2*exp(-x**2/2 +
- I*x)/2 + exp(-x**2/2 - I*x)*sin(x)/2 + exp(-x**2/2 +
- I*x)*sin(x)/2, x)/2)*exp(x**2/2 - I*x) + (I*C1/2 + C2/2 +
- Integral(x**2*exp(-x**2/2 - I*x)/2 + x**2*exp(-x**2/2 + I*x)/2 +
- I*exp(-x**2/2 - I*x)*sin(x)/2 - I*exp(-x**2/2 + I*x)*sin(x)/2,
- x)/2 + I*Integral(-I*x**2*exp(-x**2/2 - I*x)/2 +
- I*x**2*exp(-x**2/2 + I*x)/2 + exp(-x**2/2 - I*x)*sin(x)/2 +
- exp(-x**2/2 + I*x)*sin(x)/2, x)/2)*exp(x**2/2 + I*x))
- ]
- return eqs, sol
- def test_neq_order1_type4_slow3():
- eqs, sol = _neq_order1_type4_slow3()
- assert dsolve_system(eqs, simplify=False, doit=False) == [sol]
- # XXX: dsolve gives an error in integration:
- # assert dsolve(eqs) == sol
- # https://github.com/sympy/sympy/issues/20155
- @slow
- def test_neq_order1_type4_slow_check3():
- eqs, sol = _neq_order1_type4_slow3()
- assert checksysodesol(eqs, sol) == (True, [0, 0])
- @XFAIL
- @slow
- def test_linear_3eq_order1_type4_long_dsolve_slow_xfail():
- if ON_CI:
- skip("Too slow for CI.")
- eq, sol = _linear_3eq_order1_type4_long()
- dsolve_sol = dsolve(eq)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- assert dsolve_sol1 == sol
- @slow
- def test_linear_3eq_order1_type4_long_dsolve_dotprodsimp():
- if ON_CI:
- skip("Too slow for CI.")
- eq, sol = _linear_3eq_order1_type4_long()
- # XXX: Only works with dotprodsimp see
- # test_linear_3eq_order1_type4_long_dsolve_slow_xfail which is too slow
- with dotprodsimp(True):
- dsolve_sol = dsolve(eq)
- dsolve_sol1 = [_simpsol(sol) for sol in dsolve_sol]
- assert dsolve_sol1 == sol
- @slow
- def test_linear_3eq_order1_type4_long_check():
- if ON_CI:
- skip("Too slow for CI.")
- eq, sol = _linear_3eq_order1_type4_long()
- assert checksysodesol(eq, sol) == (True, [0, 0, 0])
- def test_dsolve_system():
- f, g = symbols("f g", cls=Function)
- x = symbols("x")
- eqs = [Eq(f(x).diff(x), f(x) + g(x)), Eq(g(x).diff(x), f(x) + g(x))]
- funcs = [f(x), g(x)]
- sol = [[Eq(f(x), -C1 + C2*exp(2*x)), Eq(g(x), C1 + C2*exp(2*x))]]
- assert dsolve_system(eqs, funcs=funcs, t=x, doit=True) == sol
- raises(ValueError, lambda: dsolve_system(1))
- raises(ValueError, lambda: dsolve_system(eqs, 1))
- raises(ValueError, lambda: dsolve_system(eqs, funcs, 1))
- raises(ValueError, lambda: dsolve_system(eqs, funcs[:1], x))
- eq = (Eq(f(x).diff(x), 12 * f(x) - 6 * g(x)), Eq(g(x).diff(x) ** 2, 11 * f(x) + 3 * g(x)))
- raises(NotImplementedError, lambda: dsolve_system(eq) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)]) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], t=x) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], t=x, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, t=x, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, ics={f(0): 1, g(0): 1}) == ([], []))
- raises(NotImplementedError, lambda: dsolve_system(eq, funcs=[f(x), g(x)], ics={f(0): 1, g(0): 1}) == ([], []))
- def test_dsolve():
- f, g = symbols('f g', cls=Function)
- x, y = symbols('x y')
- eqs = [f(x).diff(x) - x, f(x).diff(x) + x]
- with raises(ValueError):
- dsolve(eqs)
- eqs = [f(x, y).diff(x)]
- with raises(ValueError):
- dsolve(eqs)
- eqs = [f(x, y).diff(x)+g(x).diff(x), g(x).diff(x)]
- with raises(ValueError):
- dsolve(eqs)
- @slow
- def test_higher_order1_slow1():
- x, y = symbols("x y", cls=Function)
- t = symbols("t")
- eq = [
- Eq(diff(x(t),t,t), (log(t)+t**2)*diff(x(t),t)+(log(t)+t**2)*3*diff(y(t),t)),
- Eq(diff(y(t),t,t), (log(t)+t**2)*2*diff(x(t),t)+(log(t)+t**2)*9*diff(y(t),t))
- ]
- sol, = dsolve_system(eq, simplify=False, doit=False)
- # The solution is too long to write out explicitly and checkodesol is too
- # slow so we test for particular values of t:
- for e in eq:
- res = (e.lhs - e.rhs).subs({sol[0].lhs:sol[0].rhs, sol[1].lhs:sol[1].rhs})
- res = res.subs({d: d.doit(deep=False) for d in res.atoms(Derivative)})
- assert ratsimp(res.subs(t, 1)) == 0
- def test_second_order_type2_slow1():
- x, y, z = symbols('x, y, z', cls=Function)
- t, l = symbols('t, l')
- eqs1 = [Eq(Derivative(x(t), (t, 2)), t*(2*x(t) + y(t))),
- Eq(Derivative(y(t), (t, 2)), t*(-x(t) + 2*y(t)))]
- sol1 = [Eq(x(t), I*C1*airyai(t*(2 - I)**(S(1)/3)) + I*C2*airybi(t*(2 - I)**(S(1)/3)) - I*C3*airyai(t*(2 +
- I)**(S(1)/3)) - I*C4*airybi(t*(2 + I)**(S(1)/3))),
- Eq(y(t), C1*airyai(t*(2 - I)**(S(1)/3)) + C2*airybi(t*(2 - I)**(S(1)/3)) + C3*airyai(t*(2 + I)**(S(1)/3)) +
- C4*airybi(t*(2 + I)**(S(1)/3)))]
- assert dsolve(eqs1) == sol1
- assert checksysodesol(eqs1, sol1) == (True, [0, 0])
- @slow
- @XFAIL
- def test_nonlinear_3eq_order1_type1():
- if ON_CI:
- skip("Too slow for CI.")
- a, b, c = symbols('a b c')
- eqs = [
- a * f(x).diff(x) - (b - c) * g(x) * h(x),
- b * g(x).diff(x) - (c - a) * h(x) * f(x),
- c * h(x).diff(x) - (a - b) * f(x) * g(x),
- ]
- assert dsolve(eqs) # NotImplementedError
- @XFAIL
- def test_nonlinear_3eq_order1_type4():
- eqs = [
- Eq(f(x).diff(x), (2*h(x)*g(x) - 3*g(x)*h(x))),
- Eq(g(x).diff(x), (4*f(x)*h(x) - 2*h(x)*f(x))),
- Eq(h(x).diff(x), (3*g(x)*f(x) - 4*f(x)*g(x))),
- ]
- dsolve(eqs) # KeyError when matching
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- @slow
- @XFAIL
- def test_nonlinear_3eq_order1_type3():
- if ON_CI:
- skip("Too slow for CI.")
- eqs = [
- Eq(f(x).diff(x), (2*f(x)**2 - 3 )),
- Eq(g(x).diff(x), (4 - 2*h(x) )),
- Eq(h(x).diff(x), (3*h(x) - 4*f(x)**2)),
- ]
- dsolve(eqs) # Not sure if this finishes...
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- @XFAIL
- def test_nonlinear_3eq_order1_type5():
- eqs = [
- Eq(f(x).diff(x), f(x)*(2*f(x) - 3*g(x))),
- Eq(g(x).diff(x), g(x)*(4*g(x) - 2*h(x))),
- Eq(h(x).diff(x), h(x)*(3*h(x) - 4*f(x))),
- ]
- dsolve(eqs) # KeyError
- # sol = ?
- # assert dsolve_sol == sol
- # assert checksysodesol(eqs, dsolve_sol) == (True, [0, 0, 0])
- def test_linear_2eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- k, l, m, n = symbols('k, l, m, n', Integer=True)
- t = Symbol('t')
- x0, y0 = symbols('x0, y0', cls=Function)
- eq1 = (Eq(diff(x(t),t), x(t) + y(t) + 9), Eq(diff(y(t),t), 2*x(t) + 5*y(t) + 23))
- sol1 = [Eq(x(t), C1*exp(t*(sqrt(6) + 3)) + C2*exp(t*(-sqrt(6) + 3)) - Rational(22, 3)), \
- Eq(y(t), C1*(2 + sqrt(6))*exp(t*(sqrt(6) + 3)) + C2*(-sqrt(6) + 2)*exp(t*(-sqrt(6) + 3)) - Rational(5, 3))]
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
- eq2 = (Eq(diff(x(t),t), x(t) + y(t) + 81), Eq(diff(y(t),t), -2*x(t) + y(t) + 23))
- sol2 = [Eq(x(t), (C1*cos(sqrt(2)*t) + C2*sin(sqrt(2)*t))*exp(t) - Rational(58, 3)), \
- Eq(y(t), (-sqrt(2)*C1*sin(sqrt(2)*t) + sqrt(2)*C2*cos(sqrt(2)*t))*exp(t) - Rational(185, 3))]
- assert checksysodesol(eq2, sol2) == (True, [0, 0])
- eq3 = (Eq(diff(x(t),t), 5*t*x(t) + 2*y(t)), Eq(diff(y(t),t), 2*x(t) + 5*t*y(t)))
- sol3 = [Eq(x(t), (C1*exp(2*t) + C2*exp(-2*t))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (C1*exp(2*t) - C2*exp(-2*t))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq3, sol3) == (True, [0, 0])
- eq4 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), -t**2*x(t) + 5*t*y(t)))
- sol4 = [Eq(x(t), (C1*cos((t**3)/3) + C2*sin((t**3)/3))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (-C1*sin((t**3)/3) + C2*cos((t**3)/3))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq4, sol4) == (True, [0, 0])
- eq5 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), -t**2*x(t) + (5*t+9*t**2)*y(t)))
- sol5 = [Eq(x(t), (C1*exp((sqrt(77)/2 + Rational(9, 2))*(t**3)/3) + \
- C2*exp((-sqrt(77)/2 + Rational(9, 2))*(t**3)/3))*exp(Rational(5, 2)*t**2)), \
- Eq(y(t), (C1*(sqrt(77)/2 + Rational(9, 2))*exp((sqrt(77)/2 + Rational(9, 2))*(t**3)/3) + \
- C2*(-sqrt(77)/2 + Rational(9, 2))*exp((-sqrt(77)/2 + Rational(9, 2))*(t**3)/3))*exp(Rational(5, 2)*t**2))]
- assert checksysodesol(eq5, sol5) == (True, [0, 0])
- eq6 = (Eq(diff(x(t),t), 5*t*x(t) + t**2*y(t)), Eq(diff(y(t),t), (1-t**2)*x(t) + (5*t+9*t**2)*y(t)))
- sol6 = [Eq(x(t), C1*x0(t) + C2*x0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t)), \
- Eq(y(t), C1*y0(t) + C2*(y0(t)*Integral(t**2*exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)**2, t) + \
- exp(Integral(5*t, t))*exp(Integral(9*t**2 + 5*t, t))/x0(t)))]
- s = dsolve(eq6)
- assert s == sol6 # too complicated to test with subs and simplify
- # assert checksysodesol(eq10, sol10) == (True, [0, 0]) # this one fails
- def test_nonlinear_2eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- t = Symbol('t')
- eq1 = (Eq(diff(x(t),t),x(t)*y(t)**3), Eq(diff(y(t),t),y(t)**5))
- sol1 = [
- Eq(x(t), C1*exp((-1/(4*C2 + 4*t))**(Rational(-1, 4)))),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(-1/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(-I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), C1*exp(I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq1) == sol1
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
- eq2 = (Eq(diff(x(t),t), exp(3*x(t))*y(t)**3),Eq(diff(y(t),t), y(t)**5))
- sol2 = [
- Eq(x(t), -log(C1 - 3/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 + 3/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 + 3*I/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), -log(C1 - 3*I/(-1/(4*C2 + 4*t))**Rational(1, 4))/3),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq2) == sol2
- assert checksysodesol(eq2, sol2) == (True, [0, 0])
- eq3 = (Eq(diff(x(t),t), y(t)*x(t)), Eq(diff(y(t),t), x(t)**3))
- tt = Rational(2, 3)
- sol3 = [
- Eq(x(t), 6**tt/(6*(-sinh(sqrt(C1)*(C2 + t)/2)/sqrt(C1))**tt)),
- Eq(y(t), sqrt(C1 + C1/sinh(sqrt(C1)*(C2 + t)/2)**2)/3)]
- assert dsolve(eq3) == sol3
- # FIXME: assert checksysodesol(eq3, sol3) == (True, [0, 0])
- eq4 = (Eq(diff(x(t),t),x(t)*y(t)*sin(t)**2), Eq(diff(y(t),t),y(t)**2*sin(t)**2))
- sol4 = {Eq(x(t), -2*exp(C1)/(C2*exp(C1) + t - sin(2*t)/2)), Eq(y(t), -2/(C1 + t - sin(2*t)/2))}
- assert dsolve(eq4) == sol4
- # FIXME: assert checksysodesol(eq4, sol4) == (True, [0, 0])
- eq5 = (Eq(x(t),t*diff(x(t),t)+diff(x(t),t)*diff(y(t),t)), Eq(y(t),t*diff(y(t),t)+diff(y(t),t)**2))
- sol5 = {Eq(x(t), C1*C2 + C1*t), Eq(y(t), C2**2 + C2*t)}
- assert dsolve(eq5) == sol5
- assert checksysodesol(eq5, sol5) == (True, [0, 0])
- eq6 = (Eq(diff(x(t),t),x(t)**2*y(t)**3), Eq(diff(y(t),t),y(t)**5))
- sol6 = [
- Eq(x(t), 1/(C1 - 1/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 + (-1/(4*C2 + 4*t))**(Rational(-1, 4)))),
- Eq(y(t), (-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 + I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), -I*(-1/(4*C2 + 4*t))**Rational(1, 4)),
- Eq(x(t), 1/(C1 - I/(-1/(4*C2 + 4*t))**Rational(1, 4))),
- Eq(y(t), I*(-1/(4*C2 + 4*t))**Rational(1, 4))]
- assert dsolve(eq6) == sol6
- assert checksysodesol(eq6, sol6) == (True, [0, 0])
- @slow
- def test_nonlinear_3eq_order1():
- x, y, z = symbols('x, y, z', cls=Function)
- t, u = symbols('t u')
- eq1 = (4*diff(x(t),t) + 2*y(t)*z(t), 3*diff(y(t),t) - z(t)*x(t), 5*diff(z(t),t) - x(t)*y(t))
- sol1 = [Eq(4*Integral(1/(sqrt(-4*u**2 - 3*C1 + C2)*sqrt(-4*u**2 + 5*C1 - C2)), (u, x(t))),
- C3 - sqrt(15)*t/15), Eq(3*Integral(1/(sqrt(-6*u**2 - C1 + 5*C2)*sqrt(3*u**2 + C1 - 4*C2)),
- (u, y(t))), C3 + sqrt(5)*t/10), Eq(5*Integral(1/(sqrt(-10*u**2 - 3*C1 + C2)*
- sqrt(5*u**2 + 4*C1 - C2)), (u, z(t))), C3 + sqrt(3)*t/6)]
- assert [i.dummy_eq(j) for i, j in zip(dsolve(eq1), sol1)]
- # FIXME: assert checksysodesol(eq1, sol1) == (True, [0, 0, 0])
- eq2 = (4*diff(x(t),t) + 2*y(t)*z(t)*sin(t), 3*diff(y(t),t) - z(t)*x(t)*sin(t), 5*diff(z(t),t) - x(t)*y(t)*sin(t))
- sol2 = [Eq(3*Integral(1/(sqrt(-6*u**2 - C1 + 5*C2)*sqrt(3*u**2 + C1 - 4*C2)), (u, x(t))), C3 +
- sqrt(5)*cos(t)/10), Eq(4*Integral(1/(sqrt(-4*u**2 - 3*C1 + C2)*sqrt(-4*u**2 + 5*C1 - C2)),
- (u, y(t))), C3 - sqrt(15)*cos(t)/15), Eq(5*Integral(1/(sqrt(-10*u**2 - 3*C1 + C2)*
- sqrt(5*u**2 + 4*C1 - C2)), (u, z(t))), C3 + sqrt(3)*cos(t)/6)]
- assert [i.dummy_eq(j) for i, j in zip(dsolve(eq2), sol2)]
- # FIXME: assert checksysodesol(eq2, sol2) == (True, [0, 0, 0])
- def test_C1_function_9239():
- t = Symbol('t')
- C1 = Function('C1')
- C2 = Function('C2')
- C3 = Symbol('C3')
- C4 = Symbol('C4')
- eq = (Eq(diff(C1(t), t), 9*C2(t)), Eq(diff(C2(t), t), 12*C1(t)))
- sol = [Eq(C1(t), 9*C3*exp(6*sqrt(3)*t) + 9*C4*exp(-6*sqrt(3)*t)),
- Eq(C2(t), 6*sqrt(3)*C3*exp(6*sqrt(3)*t) - 6*sqrt(3)*C4*exp(-6*sqrt(3)*t))]
- assert checksysodesol(eq, sol) == (True, [0, 0])
- def test_dsolve_linsystem_symbol():
- eps = Symbol('epsilon', positive=True)
- eq1 = (Eq(diff(f(x), x), -eps*g(x)), Eq(diff(g(x), x), eps*f(x)))
- sol1 = [Eq(f(x), -C1*eps*cos(eps*x) - C2*eps*sin(eps*x)),
- Eq(g(x), -C1*eps*sin(eps*x) + C2*eps*cos(eps*x))]
- assert checksysodesol(eq1, sol1) == (True, [0, 0])
|