Maxima: speciální pravá strana -- reálná verze
/*
poloautomatický program na hledání
řešení pro "speciální pravou stranu"
*/
"--------------------prava_strana_rovnice-------------------------"$
LHS : 'diff(y,x,3) + 3*'diff(y,x,2) + 'diff(y,x) $
"--------------------prava_strana-------------------------"$
RHS : x^3 $
"--------------------ansatz-------------------------"$
/*
ANSatz:
1.clen = x^k, kde _k_ je nasobnost korene char. polynomu
2.clen = exp(a*x), kde _a_ je dotyčný kořen
3.clen = stupen hledaneho polynomu
*/
ANS : [
x, 1 , 3
]$
/* dale uz to pocita samo */
S : ANS[3]$
CON : makelist(concat(c,i),i,0,S)$
ans : sum( ANS[1] * ANS [2] * CON[i+1] * x^i, i, 0,S)$
dosad : factor ( ev(LHS-RHS,y:ans,diff) ) $
eq1 : ratsimp( dosad / ANS[2] ) $
"--------------------ansatz-------------------------"$
ans;
"--------------------dosazeni do rovnice-------------------------"$
dosad;
"--------------------rovnice_pro_konstanty-------------------------"$
RCE : makelist( coeff(eq1,x,i),i,0,S) ;
"--------------------reseni_techto_rovnic-------------------------"$
RES : solve(RCE,CON);
"--------------------partikularuni reseni-------------------------"$
YP : factor ( ev(ans,RES) ) ;
"------------------------------------ZKOUSKA-------------------"$
ev(LHS-RHS, y:YP,diff);
ratsimp(%);
read();
Maxima: speciální pravá strana -- komplexní verze
/*
hledání řešení pro ODR
se "speciální pravou stranou"
--- goniometrické funkce
*/
"--------------------leva_strana_rovnice-------------------------"$
LHS : 'diff(y,x,3) - 'diff(y,x,2)
$
"--------------------prava_strana-------------------------"$
RHS : exp(-x)*cos(x)
$
"--------------------ansatz 1 a 2-------------------------"$
/* ANS1 ---
1.člen = x^k, kde _k_ je násobnost kořene char. polynomu
2.člen = e^(ax)cos(bx), kde _a+ib_ je dotyčný kořen
3.člen = stupeň hledaného polynomu
ANS2 --- totéž se ale se sinem...
*/
ANS1 : [
1, exp(-x)*cos(x), 0
]$
ANS2 : [
1, exp(-x)*sin(x), 0
]$
/* dále už to počítá samo */
S1 : ANS1[3]$
S2 : ANS2[3]$
CON1 : makelist(concat(a,i),i,0,S1)$
CON2 : makelist(concat(b,i),i,0,S2)$
ans1 : sum( ANS1[1] * ANS1 [2] * CON1[i+1] * x^i, i, 0,S1)$
ans2 : sum( ANS2[1] * ANS2 [2] * CON2[i+1] * x^i, i, 0,S2)$
CON : join(CON1,CON2)$
ans : ans1 + ans2$
dosad : ratsimp( ev(LHS-RHS,y:ans,diff) ) $
eq1 : ratcoef(dosad,ANS1[2],1)$
eq2 : ratcoef(dosad,ANS2[2])$
"--------------------ansatz-------------------------"$
ans;
"--------------------dosazeni do rovnice-------------------------"$
dosad;
"--------------------rovnice_pro_konstanty-------------------------"$
RCE1 : makelist( coeff(eq1,x,i),i,0,S1) $
RCE2 : makelist( coeff(eq2,x,i),i,0,S2) $
RCE : join(RCE1,RCE2);
"--------------------reseni_techto_rovnic-------------------------"$
RES : solve(RCE,CON);
"--------------------partikularuni reseni-------------------------"$
YP : factor ( ev(ans,RES) ) ;
"------------------------------------ZKOUSKA-------------------"$
ev(LHS-RHS, y:YP,diff);
ratsimp(%);
read();