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();