آقای @Amirmza دستوری را در نرمافزار Maple در پاسخشان معرفی کردند که اگر به آن رابطهٔ بازگشتیِ یک دنباله را بدهید (که الزامی ندارد خطی هم باشد) آنگاه به شما یک جملهٔ عمومیِ یکضرب و نابازگشتی برای دنبالهتان به شما میدهد. اما با توجه به پرسشهای گذشتهتان گفتم شاید دوست داشتهباشید با دستور دیگری که اگر چند جملهٔ نخست دنباله را به Maple بدهید آنگاه به شما رابطهٔ بازگشتی (نه الزاما خطی) که مربوط به دنبالهای باشد که چند جملهٔ نخستش با عددهایی که دادهاید برابر است یکسان شود. دستور rsolve
که @Amirmza معرفی کردند در بستهٔ خاصی نیست و بدون فراخوانی بستهای قابل استفاده است. اما دستوری که میخواهم معرفی کنم یعنی listtorec
که کوتاهشدهٔ list to recursive به معنای «لیست را به (رابطهٔ) بازگشتی (تبدیل کن)» است در بستهٔ gfun
که کوتاهشدهٔ generating function به معنای «تابع مولد» است قرار دارد. پس برای استفاده از این دستور ابتدا باید بستهاش را فراخوانی کنید. پس یا پیش از شروع دستور زیر را میزنید:
with(gfun):
و سپس هر جا از این دستور خواستید استفاده کنید از listtorec
استفاده میکنید یا اینکه بدون زدن دستور بالا، همه جا از gfun[listtorec]
استفاده میکنید (یعنی اسم بسته را پیش از اسم دستور میآورید). این دستور دو ورودیِ اجباری و یک ورودی اختیاری دارد. ورودی یکُم لیست عددهایی است که به همان ترتیب میخواهید جملههای نخست دنبالهتان باشند. به یاد داشته باشید که لیست را در نرمافزار Maple با کروشه تعریف میکنیم نه با ابرو (آکولاد) یا پرانتز. ورودی دوم نام دنباله و نام متغیرتان است، برای نمونه اگر a_n را دوست دارید از a(n)
میتوانید استفاده کنید که یعنی نام دنباله a و متغیر (یا اندیسگذار) n است. میتوانید چیزهای دیگری استفاده کنید برای نمونه oilprice(day)
(بهای نفت، روز). ورودی سوم که اختیاری است، نوع لیست است که برای ما در اینجا فعلا اهمیتی ندارد، در صورت علاقه میتوانید در نرمافزار Maple عبارت ?gftype
را بزنید که صفحهٔ راهنمای مربوطه را میآورد. زمانی که ورودی سوم را خالی رها میکنید به طور خودکار 'ogf'
در نظر گرفته میشود که کوتاهشدهٔ ordinary generating function (به معنای تابع مولد معمولی) است. توجه کنید که اگر خواستید خروجی که یک تابع بازگشتی است را به دستورِ rsolve
بدهید تا یک تابع explicit بگیرید باید فقط مؤلفهٔ نخستِ خروجی را به آن بدهید و همینطور نام دنباله را (کل خروجی را به عنوان ورودیِ نخست دستور rsolve
به آن ندهید) برای انتخاب مؤلفهٔ نخست به تنهایی باید مقابل آن عدد ۱ را در یک کروشه قرار دهید. اکنون بیاییم این دستور را بر روی سه نمونهٔ ساده بیاموزیم. چند جملهٔ نخست سه دنباله که به ترتیب دنبالهٔ نوسانیِ (-1)^n، دنبالهٔ حسابی با جمله شروع ۱ و قدر نسبت ۲، دنبالهٔ هندسی با جملهٔ شروع ۱ و قدر نسبت ۲ هستند را در زیر به این دستور میدهم. به نحوهٔ دادن لیستها و غیره توجه کنید.
with(gfun):
l=[1,-1,1,-1,1,-1,1,-1]:
listtorec(l,a(n));
rsolve(%[1],a(n));
mysequence:=listtorec([1,2,4,8,16,32,64],b(n));
rsolve(mysequence[1],b(n));
listtorec([1,3,5,7,9,11,13],c(n));
rsolve(%[1],c(n));
خروجی این دستورها در خود محیط Maple را در زیر میبینید.

سه رابطهٔ بازگشتی پیشنهاد شده بوسیلهٔ Maple در زیر بازنویسی شدهاند. توجه کنید که برای نمونه -a(n+1)-a(n)
یعنی -a_{n+1}-a_n=0. و توجه کنید که Maple دنبالههای بازگشتیاش را از صفر شروع به اندیسگذاری میکند نه یک.
\begin{array}{lll}
a_{n+1}=-a_n, & a_0=1 & \\
b_{n+1}=2b_n, & b_0=1 & \\
c_{n+2}=2c_{n+1}-c_n, & c_0=1, & c_1=2
\end{array}
که در هر سه نمونهٔ ما رابطهٔ بازگشتیِ پیشنهادشدهٔ Maple خطی هم هستند. در حالت کلی Maple تلاش میکند سادهترین رابطهٔ ممکن (مطابق با معیارهای الگوریتم نوشتهشدهاش) را محاسبه کند بنابراین با احتمال زیاد اگر رابطهٔ بازگشتی خطیای باشد که ساده باشد، Maple آن را به شما میدهد.