SPLINE(1) GNU Plotting Utilities SPLINE(1)

spline - درونیابی مجموعه‌داده‌ها با استفاده از اسپلاین‌های تحت کشش

spline [ گزینه‌ها ] [ فایل‌ها ]

دستور spline مجموعه‌داده‌ها را از ورودی استاندارد یا از یک یا چند فایل می‌خواند، و یک منحنی هموار (یک «اسپلاین») را بر هر مجموعه‌داده برازش می‌کند. نسخه‌ای درونیابی‌شده از هر مجموعه‌داده، متشکل از نقاطی از منحنی هموار، در خروجی استاندارد نوشته می‌شود.

مگر در حالتی که گزینه‌های -a یا -A به کار روند (پایین را ببینید)، هر مجموعه‌داده باید دنباله‌ای از مقادیر برای یک تابع برداری از یک متغیر مستقل اسکالر باشد. بدین معنا که هر مجموعه‌داده باید دنباله‌ای از نقاط داده باشد که به صورت مقادیر متناوب t و y داده شده‌اند. t یک متغیر مستقل اسکالر و y یک متغیر وابستهٔ برداری است. بُعدِ y با گزینهٔ -d مشخص می‌شود (بُعد پیش‌فرض ۱ است). بین هر نقطهٔ داده و نقطهٔ پس از آن، t باید افزایش یابد.

یک فایل ورودی می‌تواند شامل بیش از یک مجموعه‌داده باشد. اگر فایل ورودی در قالب ASCII (پیش‌فرض) باشد، مجموعه‌داده‌های آن باید با خطوط خالی از هم جدا شوند. مقادیر t و y نقاط داده در هر مجموعه‌داده می‌توانند به دلخواه چیده شوند، به شرطی که با نویسه‌های فاصله (white space) از یکدیگر جدا شده باشند. علاوه بر مجموعه‌داده‌ها، یک فایل ورودی می‌تواند شامل هر تعداد خط توضیح (کامنت) باشد که باید با نویسهٔ «#» آغاز شوند. خطوط توضیح نادیده گرفته می‌شوند. آن‌ها به عنوان خط خالی در نظر گرفته نمی‌شوند؛ یعنی مانع خواندن یک مجموعه‌دادهٔ در جریان نمی‌شوند.

گزینه‌ها و نام‌های فایل می‌توانند به صورت درهم‌آمیخته در خط فرمان قرار گیرند، اما گزینه‌ها پیش از خوانده شدن نام‌های فایل پردازش می‌شوند. اگر -- دیده شود، به عنوان پایان گزینه‌ها تفسیر می‌شود. اگر هیچ نام فایلی مشخص نشود، یا نام فایل - مشاهده شود، ورودی استاندارد خوانده می‌شود.

نوع درونیابی و قالب فایل‌های ورودی و خروجی را می‌توان با گزینه‌های خط فرمان انتخاب کرد.


استفاده از الگوریتم درونیابی محلی (الگوریتم درجه‌سوم بـِسل)، به‌طوری که spline بتواند به عنوان یک فیلتر بی‌درنگ (real-time) استفاده شود. شیب منحنی درونیاب در هر نقطه از یک مجموعه‌داده با برازش یک تابع درجه‌دوم روی آن نقطه و دو نقطهٔ مجاور در مجموعه‌داده انتخاب خواهد شد. اگر -f مشخص شده باشد، آنگاه گزینهٔ -t که در غیر این صورت اختیاری است، باید به کار رود. همچنین، اگر -f مشخص شود، گزینه‌های -k، -p و -T نباید استفاده شوند.
اگر -f مشخص نشده باشد، الگوریتم درونیابی پیش‌فرض (سراسری) به کار گرفته خواهد شد.

تنظیم پارامتر شرایط مرزی برای هر اسپلاین ساخته‌شده به مقدار k. (مقدار پیش‌فرض 1.0 است.) اسپلاین در هر یک از مؤلفه‌های خود دو شرط مرزی y"[0]=ky"[1] و y"[n]=ky"[n-1] را برآورده خواهد کرد. در اینجا y[0] و y[1] نمایانگر مقادیر مؤلفهٔ مشخص‌شده از متغیر وابستهٔ برداری y در دو نقطهٔ نخست مجموعه‌داده، و y[n-1] و y[n] مقادیر آن در دو نقطهٔ پایانی هستند. تنظیم k روی صفر یک اسپلاین «طبیعی» (natural) ایجاد می‌کند؛ یعنی اسپلاینی که انحنای آن در دو انتهای مجموعه‌داده صفر است. در صورت مشخص شدن -f یا -p، گزینهٔ -k نمی‌تواند استفاده شود.

تقسیم بازه‌ای که درونیابی در آن رخ می‌دهد به n زیربازه. تعداد نقاط دادهٔ محاسبه‌شده و نوشته‌شده در خروجی، برابر با n+1 خواهد بود. مقدار پیش‌فرض برای n برابر 100 است.

ساخت یک اسپلاین متناوب (دوره‌ای). اگر این گزینه مشخص شود، مقادیر y برای اولین و آخرین نقطه در هر مجموعه‌داده باید برابر باشند. در صورت مشخص شدن -p، گزینه‌های -f و -k نباید استفاده شوند.

هر منحنی درونیاب یک اسپلاین تحت کشش خواهد بود. این گزینه مقدار کشش را تعیین می‌کند (مقدار پیش‌فرض 0.0 است).
اگر tension برابر با صفر باشد، منحنی یک اسپلاین مکعبی (درجه‌سوم) تکه‌ای خواهد بود. افزایش کشش به بیشتر از صفر، منحنی را «محکم‌تر» می‌کند و احتمال نقاط عطف کاذب را کاهش می‌دهد. دلیل آن این است که بین هر جفت نقطهٔ متوالی در مجموعه‌داده، منحنی معادلهٔ دیفرانسیل مرتبه چهارم y""=sgn(tension)*(tension^2)y" را در هر یک از مؤلفه‌های خود ارضا می‌کند. با میل کردن tension به سمت بی‌نهایت مثبت، منحنی به یک خط شکسته همگرا می‌شود. در صورت مشخص شدن -f، گزینهٔ -T نمی‌تواند استفاده شود.

برای هر مجموعه‌داده، بازه‌ای را که درونیابی در آن رخ می‌دهد، برابر با بازهٔ بین tmin و tmax قرار می‌دهد. اگر tspacing مشخص نشود، این بازه به تعداد زیربازه‌های تعیین‌شده با گزینهٔ -n تقسیم می‌شود.
اگر گزینهٔ -t استفاده نشود، بازه‌ای که درونیابی در آن انجام می‌شود کل دامنهٔ متغیر مستقل در مجموعه‌داده خواهد بود. اگر از گزینهٔ -f برای رفتار شبیه فیلتر استفاده شود، گزینهٔ -t همواره باید به کار رود (به بالا مراجعه کنید)..SS "گزینه‌های مربوط به قالب (Format-Related Options)"

بعد متغیر وابسته y را در فایل‌های ورودی و خروجی برابر با dimension قرار می‌دهد. بعد پیش‌فرض 1 است.

قالب داده را برای فایل(های) ورودی برابر با data-format تعیین می‌کند که می‌تواند یکی از موارد زیر باشد:
قالب ASCII (پیش‌فرض). هر فایل دنباله‌ای از اعداد ممیز شناور است که به عنوان مختصات‌های t و y نقاط متوالی داده‌ها در یک مجموعه‌داده تفسیر می‌شوند. اگر y دارای بعد d باشد، برای هر نقطه d+1 عدد وجود خواهد داشت. نیازی نیست که مختصات‌های t و y یک نقطه در همان سطر ظاهر شوند، و نقاط نیز لزومی ندارد در سطرهای جداگانه باشند. اما اگر یک سطر خالی رخ دهد (یعنی دو خط جدید متوالی دیده شوند)، به عنوان پایان یک مجموعه‌داده و آغاز مجموعه‌داده بعدی تفسیر می‌شود.
قالب باینری با دقت یگانه (Single precision). هر فایل دنباله‌ای از اعداد ممیز شناور است که به عنوان مختصات‌های t و y نقاط متوالی داده‌ها در یک مجموعه‌داده تفسیر می‌شوند. اگر y دارای بعد d باشد، برای هر نقطه d+1 عدد وجود خواهد داشت. مجموعه‌داده‌های متوالی با یک بار رخداد مقدار FLT_MAX از یکدیگر جدا می‌شوند، که بزرگ‌ترین عدد ممیز شناور ممکن با دقت یگانه است. روی بیشتر ماشین‌ها این مقدار تقریباً 3.4x10^38 است.
قالب باینری با دقت مضاعف (Double precision). هر فایل دنباله‌ای از اعداد ممیز شناور با دقت مضاعف است که به عنوان مختصات‌های t و y نقاط متوالی داده‌ها در یک مجموعه‌داده تفسیر می‌شوند. اگر y دارای بعد d باشد، برای هر نقطه d+1 عدد وجود خواهد داشت. مجموعه‌داده‌های متوالی با یک بار رخداد مقدار DBL_MAX از یکدیگر جدا می‌شوند، که بزرگ‌ترین عدد ممیز شناور ممکن با دقت مضاعف است. روی بیشتر ماشین‌ها این مقدار تقریباً 1.8x10^308 است.
قالب باینری عدد صحیح (Integer). هر فایل دنباله‌ای از اعداد صحیح است که به عنوان مختصات‌های t و y نقاط متوالی داده‌ها در یک مجموعه‌داده تفسیر می‌شوند. اگر y دارای بعد d باشد، برای هر نقطه d+1 عدد وجود خواهد داشت. مجموعه‌داده‌های متوالی با یک بار رخداد مقدار INT_MAX از یکدیگر جدا می‌شوند، که بزرگ‌ترین عدد صحیح ممکن است. روی بیشتر ماشین‌ها این مقدار 2^31-1 است.
-a [step_size [lower_limit]]

به‌طور خودکار مقادیری را برای متغیر مستقل، t، تولید می‌کند (مقادیر پیش‌فرض step_size و lower_limit به ترتیب 1.0 و 0.0 هستند).
صرف‌نظر از قالب داده (`a`، `f`، `d` یا `i`)، این گزینه مشخص می‌کند که مقادیر t در فایل ورودی وجود ندارند: مجموعه‌داده(های) خوانده‌شده تنها حاوی مقادیر متغیر وابسته، y، هستند. بنابراین اگر y دارای بعد d باشد، برای هر نقطه تنها d عدد وجود خواهد داشت. میزان افزایش از هر مقدار t به مقدار بعدی برابر با step_size خواهد بود و نخستین مقدار t برابر با lower_limit خواهد بود. این گزینه به عنوان مثال هنگام درون‌یابی منحنی‌ها به جای توابع مفید است.

به‌طور خودکار مقادیری را برای متغیر مستقل، t، تولید می‌کند. این یک حالت دیگر از گزینه -a است. میزان افزایش از هر مقدار t به مقدار بعدی، فاصله در فضای d-بعدی میان مقادیر متناظر y خواهد بود و نخستین مقدار t برابر با 0.0 خواهد بود. بدین معنا که t «طول کمان چندضلعی» خواهد بود. این گزینه هنگام درون‌یابی منحنی‌ها به جای توابع کاربرد دارد.

قالب داده را برای فایل خروجی برابر با data-format تنظیم می‌کند. تفسیر data-format مانند گزینه -I است. پیش‌فرض `a` است، یعنی قالب ASCII.

دقت عددی را برای مقادیر t و y در فایل خروجی برابر با significant-digits قرار می‌دهد. این گزینه تنها زمانی اثرگذار است که فایل خروجی در قالب `a` یعنی به صورت ASCII نوشته شود. significant-digits باید یک عدد صحیح مثبت باشد (پیش‌فرض 6 است).

متغیر مستقل t را از فایل خروجی حذف می‌کند؛ برای هر نقطه، تنها متغیر وابسته y را ارائه می‌دهد. اگر y دارای بعد d باشد، برای هر نقطه تنها d عدد وجود خواهد داشت، نه d+1. این گزینه هنگام درون‌یابی منحنی‌ها به جای توابع مفید است..SS گزینه‌های اطلاعاتی
نمایش فهرستی از گزینه‌های خط فرمان و خروج.
نمایش شماره نسخهٔ spline و بستهٔ ابزارهای رسم (plotting utilities) و خروج.

با وارد کردن

echo 0 0 1 1 2 0 | spline

یک مجموعه دادهٔ درون‌یابی‌شده شامل ۱۰۱ نقطه در خروجی استاندارد تولید خواهد شد. در صورت رسم، این مجموعه دادهٔ درون‌یابی‌شده یک سهمی را تشکیل می‌دهد.

گاهی درون‌یابی بین دنباله‌ای از نقاط دلخواه در فضای d بعدی، یعنی «اسپلاین کردن یک منحنی» به جای یک تابع، مفید است. گزینه‌های -a و -s برای این منظور استفاده می‌شوند. برای مثال،

echo 0 0 1 0 1 1 0 1 | spline -d 2 -a -s

یک مجموعه دادهٔ ۱۰۱ نقطه‌ای در خروجی استاندارد تولید می‌کند که بین چهار نقطهٔ (0,0)، (1,0)، (1,1) و (0,1) درون‌یابی انجام می‌دهد. گزینهٔ -d 2 مشخص می‌کند که متغیر وابستهٔ y دوبعدی است. گزینهٔ -a مشخص می‌کند که مقادیر t در ورودی وجود ندارند و باید به‌طور خودکار تولید شوند. گزینهٔ -s مشخص می‌کند که مقادیر t باید از خروجی حذف شوند.

ابزار spline توسط Robert S. Maier (rsm@math.arizona.edu) و بر پایه نسخهٔ پیشین نوشته‌شده توسط Rich Murphey (rich@freebsd.org) پیاده‌سازی شده است. الگوریتم‌های ساخت اسپلاین تحت کشش (splines under tension) مشابه موارد استفاده‌شده در کتابخانهٔ زیربرنامه‌های FITPACK بوده و در نهایت اثر Alan K. Cline (cline@cs.utexas.edu) هستند.

"The GNU Plotting Utilities Manual".

گزارش‌های باگ را از طریق رایانامه به bug-gnu-utils@gnu.org ارسال کنید.

Dec 1998 FSF