ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﻴﻢ ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪ ﺳﺎزي ﺑﻪ زﺑﺎن C / C++ ﭘﺮوژه ﭘﺎﻳﺎﻧﻲ ﺷﻤﺎره 2 دروﻧﻴﺎﺑﻲ 2-3ﻧﻔﺮ اﻣﺮوزه ﻳﻜﻲ از ﻣﻬﻤﺘﺮﻳﻦ ﻣﻌﻀﻼت در ﺗﻘﺮﻳﺐ زدن داده ﻫﺎ در رﻳﺎﺿﻴﺎت ﻛﺎرﺑﺮدي دروﻧﻴﺎﺑﻲ ﺗﻌـﺪادي ﻧﻘﻄـﻪ ) ورودي ( ﺑﻪ ﻛﻤﻚ ﻳﻚ ﺗﺎﺑﻊ ) ﺧﺮوﺟﻲ ( ﻣﻲ ﺑﺎﺷﺪ .ﻛﻠﻲ ﺗﺮﻳﻦ ﺻﻮرت ﻳﻚ ﻣﺴﺌﻠﻪ دروﻧﻴﺎﺑﻲ ﺑﻪ ﺻﻮرت زﻳﺮ اﺳﺖ: nﻧﻘﻄﻪ x1, ... , xnو y1,...,ynداده ﺷﺪه اﺳﺖ .ﭼﻨﺪ ﺟﻤﻠﻪ اي ) pn-1(xاز درﺟﻪ ﺣـﺪاﻛﺜﺮ n-1را ﺑﻪ ﻧﺤﻮي ﺑﻴﺎﺑﻴﺪ ﺑﻪ ﻃﻮري ﻛﻪ ﺑﺮاي ﻫﺮ 0<i≤nداﺷﺘﻪ ﺑﺎﺷﻴﻢ pn-1(xi) = yi ﺑﺮاي ﻣﺜﺎل ﺗﺎﺑﻊ p2(x) = 1 + 4x – 2x2ﻧﻘﺎط ) (-2,-15), (3,-5), (1,3را دروﻧﻴﺎﺑﻲ ﻣﻲ ﻧﻤﺎﻳﺪ. اﻧﻮاع ﻣﺨﺘﻠﻔﻲ از دروﻧﻴﺎﺑﻲ ﺑﺮ ﺣﺴﺐ ﻛﺎراﻳﻲ و دﻗﺖ آﻧﻬﺎ وﺟﻮد دارﻧﺪ .ﻫﺪف ﺷﻤﺎ در اﻳﻦ ﭘﺮوژه ﭘﻴﺎده ﺳﺎزي ﭼﻨﺪ دروﻧﻴـﺎﺑﻲ ﻛﺎراﻣﺪ ﻣﻲ ﺑﺎﺷﺪ. • دروﻧﻴﺎﺑﻲ ﺑﻪ ﻛﻤﻚ ﻣﺎﺗﺮﻳﺲ واﻧﺪرﻣﻮﻧﺪ:1 ﻓﺮض ﻛﻨﻴﺪ ﭼﻨﺪ ﺟﻤﻠﻪ اي ) p(xﺑﻪ ﺻﻮرت زﻳﺮ ﺑﺎﺷﺪ: pn-1(x) = a1 + a2x + a3x2 + ... + anxn-1 = y ﺑﺪﻳﻬﻲ اﺳﺖ ﻛﻪ ﺑﺎ ﺣﻞ ﻣﻌﺎدﻟﻪ ﻣﺎﺗﺮﻳﺴﻲ زﻳﺮ ﻣﻲ ﺗﻮان ﺿﺮاﻳﺐ aiرا ﺑﺪﺳﺖ آورد: ⎤ x1n−1 ⎤ ⎡ a1 ⎤ ⎡ y1 ⎥ ⎢ ⎥ ⎢⎥ ⎥ x2n−1 ⎥ ⎢ a 2 ⎥ ⎢ y 2 ⎥ x3n−1 ⎥ ⎢ a3 ⎥ = ⎢ y3 ⎥ ⎢ ⎥ ⎢⎥ ⎥ M ⎥⎢ M ⎥ ⎢ M ⎦⎥ xnn−1 ⎥⎦ ⎢⎣an ⎥⎦ ⎢⎣ y n ﺣﻞ و ﺑﺮرﺳﻲ اﻳﻦ ﻣﺎﺗﺮﻳﺲ ﺑﺮ ﻋﻬﺪه ﺷﻤﺎ! Vandermonde Matrix 1 L x12 x1 1 L x22 x2 1 L 2 3 x x3 M M O L 2 n x xn 1 M 1 ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ • دروﻧﻴﺎﺑﻲ ﭼﻨﺪ ﺟﻤﻠﻪ اي و دروﻧﻴﺎﺑﻲ ﻫﺮﻣﻴﺖ ﻣﻜﻌﺒﻲ: دروﻧﻴﺎﺑﻲ ﺑﻪ ﻛﻤﻚ ﻣﺎﺗﺮﻳﺲ واﻧﺪوﻣﻮﻧﺪ ﺷﻴﻮه ﺳﺮراﺳﺘﻲ ﺑـﺮاي ﺗﻘﺮﻳـﺐ اﺳـﺖ اﻣـﺎ اﻳـﺮاد اﺳﺎﺳﻲ آن ﻛﻨﺪي ﺑﻴﺶ از ﺣﺪ اﺳﺖ .در اﻳﻦ راﺳﺘﺎ ﺗﻘﺮﻳﺐ ﻫﺎي ﺑﻬﺘﺮ و ﻛﺎراﻣﺪ ﺗﺮي اراﺋـﻪ ﺷﺪه اﺳﺖ .ﻧﻤﻮﻧﻪ از اﻳﻦ ﺗﻘﺮﻳﺐ ﻫﺎ ﺗﻘﺮﻳﺐ ﻫﺮﻣﻴﺖ درﺟﻪ ﺳﻪ ﻣﻲ ﺑﺎﺷﺪ. ﻓﺮق اﺳﺎﺳﻲ اﻳﻦ دروﻧﻴﺎﺑﻲ ﺑﺎ ﻣﻮارد ﻣﺸﺎﺑﻪ ﺑـﻪ روش واﻧﺪرﻣﻮﻧـﺪ دﺧﻴـﻞ ﻛـﺮدن ﻣﺸﺘﻘﺎت ﺗﺎﺑﻊ در ﻣﺤﺎﺳﺒﻪ ﺗﺎﺑﻊ اﺳﺖ ﺗﺎ ﻧﻤﻮدار ﻫﺎي ﻫﻤﻮارﺗﺮي ﺑﺪﺳﺖ آﻳﺪ.2 ﺑﻪ ﺻﻮرت ﺧﻼﺻﻪ در ﻣﺴﺌﻠﻪ دروﻧﻴﺎﺑﻲ ﻫﺮﻣﻴﺖ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ ﺑﺎ داﺷﺘﻦ ﻣﻘﺎدﻳﺮ xr, xl, yr, ylو ﻣﻘﺎدﻳﺮ ﻣﺸﺘﻘﺎت sr,slﻛﻪ در آن r,lﺑﻪ ﺗﺮﺗﻴﺐ ﺑﻪ ﻣﻌﻨﺎي ﭼﭗ و راﺳﺖ ﻣـﻲ ﺑﺎﺷﻨﺪ ﺿﺮاﻳﺐ a,b,c,dرا در ﻣﻌﺎدﻟﻪ زﻳﺮ ﭘﻴﺪا ﻧﻤﺎﻳﻴﺪ: )q(z) = a + b(z-xL) + c(z-xL)2 + d(z-xL)2(z-xR اﻟﺒﺘﻪ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ: q(xL) = yL q(xR) = yR q'(xL) = sL q'(xR) = yR ﺑﺮاي اﻳﻨﻜﺎر ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ اﻳﻨﻜﻪ )q'(z) = b + 2c(z-xL) + d(2(z-xL)(z-xR) + (z-xL)2 ﺿﺮاﻳﺐ a,b,c,dﺑﻪ آﺳﺎﻧﻲ ﺑﺪﺳﺖ ﺧﻮاﻫﻨﺪ آﻣﺪ. 2ﺗﻌﺮﻳﻒ دﻗﻴﻖ اﻳﻨﻜﻪ واﻗﻌﺎً ﻳﻚ ﻧﻤﻮدار ﻫﻤﻮار smoothﺑﻪ ﭼﻪ ﻣﻌﻨﻲ ﻣﻲ ﺑﺎﺷﺪ را در رﻳﺎﺿﻴﺎت 2ﻓﺮا ﺧﻮاﻫﻴﺪ ﮔﺮﻓﺖ .در ﺣﺎل ﺣﺎﺿﺮ ﺗﻨﻬﺎ ﺑﻪ ﺷﻬﻮد ﺧﻮد در اﻳﻦ زﻣﻴﻨﻪ ﺗﻜﻴﻪ ﻛﻨﻴﺪ. • دروﻧﻴﺎﺑﻲ اﺳﭙﻼﻳﻦ ﻣﻜﻌﺒﻲ: ﻫﺮﻣﻴﺖ ﻧﻤﻮدار ﻫﺎي ﻫﻤﻮار و ﺧﻮﺑﻲ را ﺑﺮاي ﻣﺎ اﻳﺠﺎد ﻣﻲ ﻛﻨﺪ وﻟﻲ اﻳﻦ ﻫﻨﻮز ﻛﺎﻓﻲ ﻧﻴﺴﺖ .ﺑﺮاي ﻣﺜﺎل ﺗﻘﺮﻳﺐ ﻫﺎﻳﻲ ﻛﻪ ﻫﺮﻣﻴﺖ ﺑﺮاي ﺗﺎﺑﻌﻲ ﻣﺜﻞ ) e-2xsin(10πxﺑﻪ ازاي ﺗﻌﺪاد ﻧﻘﺎط ﻣﺘﻮﺳﻂ اراﺋﻪ ﻣﻲ ﻛﻨﺪ ﺑﺴﻴﺎر ﺑـﺪ اﺳـﺖ .ﺑـﺮاي ﻫﻤﻴﻦ ﻧﻮع ﺑﻬﺘﺮ ) و اﻟﺒﺘﻪ ﻛﻤﻲ ﺳﺨﺖ ﺗﺮ ﺑﺮاي ﺷﻤﺎ! ( دروﻧﻴﺎﺑﻲ ﺑﻪ ﻧﺎم اﺳﭙﻼﻳﻦ وﺟﻮد دارد ﻛﻪ در آن ﺗﻀﻤﻴﻦ ﺷـﺪه اﺳﺖ ﺧﻮد ﺗﺎﺑﻊ و ﻣﺸﺘﻖ اول و ﻣﺸﺘﻖ دوم آن ﭘﻴﻮﺳﺘﻪ ﻣﻲ ﺑﺎﺷﻨﺪ .اﻳﻦ ﺷﺮاﻳﻂ ﺑﺎ ﻣﻌﺎدﻟﻪ زﻳﺮ ﻗﺎﺑﻞ ﭘﻴﺎده ﺳﺎزي اﺳﺖ: yi' − si 's + s − 2 y ) ( z − xi ) 2 + i i +1 2 i ( z − xi ) 2 ( z − xi +1 Δxi ) (Δxi q i ( z ) = y i + s i ( z − xi ) + ﺑﺮاي آﻧﻜﻪ ﻣﺸﺘﻖ دوم ﭘﻴﻮﺳﺘﻪ ﺑﺎﺷﺪ ﺑﺎﻳﺪ داﺷﺘﻪ ﺑﺎﺷﻴﻢ: 2 ) ' (2 si +1 + si − 3 yi Δxi 2 ) ' (−2si +1 − si + 2 + 3 yi +1 Δxi +1 = ) q' 'i ( xi +1 = ) q' 'i +1 ( xi +1 اﮔﺮ ﻛﻤﻲ دﻗﺖ ﻛﻨﻴﺪ ﺑﺎ ﻛﻤﻚ ﻋﺒﺎرت ﺑﺎﻻ ﻣﻲ ﺗﻮان ﻫﻤﻪ ﺿﺮاﻳﺐ siرا ﺑﻪ ﺟﺰ s1و snﺗﻌﻴﻴﻦ ﻛﻨﻴﻢ .ﺷﺮاﻳﻂ اوﻟﻴﻪ اي ﻛـﻪ ﺑﺮ s1و snاﻋﻤﺎل ﻣﻲ ﺷﻮﻧﺪ ﺑﻪ اﻳﺠﺎد ﺳﻪ دﺳﺘﻪ اﺳﭙﻼﻳﻦ ﻣﺨﺘﻠﻒ ﻣﻲ اﻧﺠﺎﻣﻨﺪ: .1اﺳﭙﻼﻳﻦ ﻛﺎﻣﻞ در اﻳﻦ اﺳﭙﻼﻳﻦ ﻣﻘﺪار s1و snﻣﺴﺘﻘﻴﻤﺎ داده ﻣﻲ ﺷﻮد. .2اﺳﭙﻼﻳﻦ ﻃﺒﻴﻌﻲ ﻣﻘﺎدﻳﺮ s1و snﺑﺮاﺑﺮ ﺑﺎ ﺻﻔﺮ ﺧﻮاﻫﺪ ﺑﻮد. .3اﺳﭙﻼﻳﻦ NaK در اﻳﻦ ﻧﻮع اﺳﭙﻼﻳﻦ ﻣﻘﺎدﻳﺮ s1و snﺑﺎ اﻋﻤﺎل ﻣﺸﺘﻖ ﺳﻮم ﺑﻪ ﺷﻜﻞ 's + s − 2 y q' ' 'i ( x) = 6 i i +1 2 i ) (Δxi ﺑﺪﺳﺖ ﻣﻲ آﻳﻨﺪ. ﺑﺮاي اﻫﺪاف اﻳﻦ ﭘﺮوژه ﺗﻨﻬﺎ ﭘﻴﺎده ﺳﺎزي اﺳﭙﻼﻳﻦ ﻃﺒﻴﻌﻲ ﻛﺎﻓﻲ اﺳﺖ. ورودي/ﺧﺮوﺟﻲ: ورودي ﺧــﻮد را از standard inputﺑﺨﻮاﻧﻴــﺪ و ﺧﺮوﺟــﻲ ﺗــﺎن را ﺑــﺮ روي standard outputﺑﻨﻮﻳﺴﻴﺪ. 3 .1ورودي ﺑﺮﻧﺎﻣﻪ: ورودي ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ اﺑﺘﺪا ﻋﺪد ) nﺗﻌﺪاد ﻧﻘـﺎط ( و ﺑﻌـﺪ از ان nزوج ﻧﻘﻄـﻪ ﺑـﻪ ﺷـﻜﻞ xi,yiﻣﻲ ﺑﺎﺷﺪ. .2ﺧﺮوﺟﻲ ﻫﺎي ﺑﺮﻧﺎﻣﻪ: ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﻣﻲ ﺑﺎﻳﺴﺖ دروﻧﻴﺎﺑﻲ ﻧﻘﺎط ورودي را ﺑﻪ ﻛﻤﻚ ﻣـﺎﺗﺮﻳﺲ واﻧﺪرﻣﻮﻧـﺪ ،روش ﻫﺮﻣﻴﺖ و ﻳﻜﻲ از اﺳﭙﻼﻳﻦ ﻫﺎ دروﻧﻴﺎﺑﻲ ﻛﻨﺪ .ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﺑﺎﻳﺪ ﻫﺮ ﺳـﻪ دروﻧﻴـﺎﺑﻲ را ﭘﻴﺎده ﺳﺎزي ﻧﻤﺎﻳﻴﺪ .در ﻣﻴﺎن اﺳﭙﻼﻳﻦ ﻫﺎ ﻫﻴﭽﻜﺪام اوﻟﻮﻳﺘﻲ ﺑﺮ دﻳﮕـﺮي ﻧﺪارﻧـﺪ .ﺑـﺮاي ﻫﻤﻴﻦ ﺗﻮﺻﻴﻪ ﻣﻲ ﻛﻨﻴﻢ از اﺳﭙﻼﻳﻦ ﻃﺒﻴﻌﻲ ﻛﻪ راﺣﺘﺘﺮ اﺳﺖ اﺳﺘﻔﺎده ﻛﻨﻴﺪ .در اﻧﺘﻬﺎ ﺳﻪ ﭼﻨﺪ ﺟﻤﻠﻪ اي ﻛﻪ ﺣﺎﺻﻞ از دروﻧﻴﺎﺑﻲ ﻧﻘﺎﻃﻪ ﻫﺴﺘﻨﺪ را ﺑﻨﻮﻳﺴﻴﺪ. .3ﻗﺎﺑﻠﻴﺖ ﻫﺎي اﺿﺎﻓﻲ: ﭘﻴﺎده ﺳﺎزي ﻣﻮارد زﻳﺮ ﻣﺸﻤﻮل ﻧﻤﺮه اﺿﺎﻓﻲ ﺧﻮاﻫﺪ ﺑﻮد: • اﺳﺘﻔﺎده از روش ﻧﻴﻮﺗﻦ ﺑﺮاي دروﻧﻴﺎﺑﻲ. • ﻛﺸﻴﺪن ﻧﻤﻮدار ﭼﻨﺪ ﺟﻤﻠﻪ اي دروﻧﻴﺎﺑﻲ ﺷﺪه ﺑـﺮ روي ﺻـﻔﺤﻪ ﻣـﺎﻧﻴﺘﻮر ﺑـﺎ ﻛﻤﻚ ﻛﺘﺎﺑﺨﺘﺎﻧﻪ ﻫﺎي ﮔﺮاﻓﻴﻜﻲ ﻣﻮﺟﻮد ﺑﺮاي C/C++ • ﺗﻮﺟﻪ ﺑﺴﻴﺎر ﻣﻬﻢ: ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎﻳﺪ در زﻣﺎن ﺗﺤﻮﻳﻞ ﻛﻤﭙﺎﻳﻞ و اﺟﺮا ﺷﻮد و ﺑﺘﻮاﻧﺪ ﺑﺮاي ﺗﺴﺖ ﻫﺎي ورودي ﺧﺮوﺟﻲ ﺻﺤﻴﺢ اﻳﺠﺎد ﻛﻨﺪ. 4 ﻛﺪ ﻣﻨﺒﻊ ﭘﺮوژه ﺧﻮدﺗﺎن را ﺑﻪ ﻫﻤـﺮاه ﻣـﺴﺘﻨﺪات ﻣﺮﺑـﻮط ﺑـﻪ آن را در ﻏﺎﻟـﺐ ﻳـﻚ ﻓﺎﻳـﻞ ﻓـﺸﺮده ﺑـﻪ ﻧـﺎم interpolationﺗﺎ زﻣﺎن ﺗﺤﻮﻳﻞ ﺑﻪ آدرس [email protected]ارﺳﺎل ﻧﻤﺎﻳﻴﺪ .ﻓﻴﻠﺪ subjectﻧﺎﻣﻪ ﺧﻮد را ﺑﺮاﺑﺮ ﺑﺎ ) Project2-interpolation-(8510xxxx-8510xxxxﻗﺮار دﻫﻴﺪ ﻛـﻪ در آن xxxxﭼﻬـﺎر رﻗﻢ اﻧﺘﻬﺎﻳﻲ ﺷﻤﺎره داﻧﺸﺠﻮﻳﻲ اﻋﻀﺎي ﺗﻴﻢ ﺷﻤﺎ ﻣﻲ ﺑﺎﺷﺪ. ﻣﻮﻓﻖ ﺑﺎﺷﻴﺪ. 3ﺑﺮاي اﻳﻦ ﻛﺎر از header fileﻫﺎي )stdio.hﺑﺮاي زﺑﺎن (Cو ﻓﺎﻳﻞ ) iostreamﺑﺮاي زﺑﺎن (C++اﺳﺘﻔﺎده ﻛﻨﻴﺪ. 4ﺑﺎ ﻓﺮﻣﺖ rar ،zipﻳﺎ tar
© Copyright 2026 Paperzz