الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استيفاء دالة .. برمجياً

مغلق
بدأه haroon في 31 مارس 2006 · 18 رد · 7,420 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

هو من ايمتا المنتدى مفتوح ... معقوله بتفتحوه وما بتخبروني ..

عل كل يا شباب أنا منذ زمن أعمل على مسألة إستيفاء دالة (polation) ومن ثم مكاملتها (أي عندما يكون عندنا مجموعة من القيم العددية ونريد أن نوجد الدالة التي تمر بهذه القيم) وهذه مسألة معروفة في التحليل العددي ولكن ما أريد هو تحقيق ذلك برمجياً أنا عملت برنامج لعمل ذلك ولكن بصراحه أنا غير مطمئن من ناحية الدقة والسرعة (وهما كما تعلمون مسألتين محوريتين في مثل هذا النوع من المسائل)

وبصراحة أثارني الكلام في الموضوع السابق عن matlab و mathematica و maple وغيرها من البرامج المختصة بالرياضيات والتي أنا مقصر في دراستها (كخريج رياضيات) ولذلك أرتأريت أن أطرح هذا الموضوع للنقاش في هذا المنتدى

فإذا كان هناك دوال جاهزة لحل هذه المسالة في أحد البرامج السابقة فيا ريت حدا يدلني

أو إذا لم يكن هناك دوال جاهزة يمكن ان نفتح النقاش حول حل هذه المسألة عن إن كان عن طريق هذه البرامج (ماتلاب وغيرها ..) أو عن طريق اللغات الأخرى مثل vb .net التي أقنها أو غيرها

المهم أن نصل لحل مرضي حول هذه المسألة - إذا أثار اهتمامكم هذا الموضوع -

وشكراً

#2

كتبت class قبل حوالي سنة لعمل ال interpolation بطريقة لاجرانج , وكانت ذات مشكلة حيث توجد بعض العمليات الرياضية لم أستطع أن أختصرها لتكتب في البرنامج بشكل طبيعي , ففي النهاية قمت بعمل فئة تحمل العوامل * بشكل زائد Operator Overloading لأداء العمليات على الكسور والقسمة والجمع والطرح , وفي النهاية تقوم بكتابة متسلسلة الكسور بطريقة لاجرانج بشكل طبيعي وتعطي الناتج بشكل دقيق ,,,

كما خمنت الفئة كتبتها لمشروع عمل تكامل على الدوال كنا نستفيد منها في إستنتاج بعض الجداول الإحصائية للتوزيعات المتماثلة أمثال التوزيع الطبيعي ومربع كاي وF و T ,,,

ذكرت الموضوع لأني سأبحث عن الفئة في ملفات المشروع الذي ضاع للأسف كعادة برامجي :( لكن توجد منها نسخ في أمكان خارج المنزل , أو لتعرف المشكلة والتي حللتها بعمل محاكاة تماما لنفس العملية كما تتم بالورقة والقلم في السي ++

عذرا على الإطالة ..

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

أنا جربت الطريقة العامة (أي بإيجاد معين فاندرموند)

لكن تفاجئت أنه كلما زاد عدد النقاط انخفضت الدقة كما أنني لم أستطع الوصول إلى إيجاد دالة بدرجة أكبر من 22 وكان الأداء في الدرجات العليا بطيئاً جداً.

لذلك نسيت الموضوع ولجأت إلى حساب التكامل بطريقة أشباه المنحرفات .. أعطت أداء جيد ولكني لست واثقاً من الدقة ..

أما لاغرانج .. لم أجربها .. تصورت أن تكون متعبه ...

على كل حال ياريت تلاقي برنامجك يا أخ HGB ليتسنى لنا تجربته

وشكراً

#4
اقتباس
أنا عملت برنامج لعمل ذلك ولكن بصراحه أنا غير مطمئن من ناحية الدقة والسرعة (وهما كما تعلمون مسألتين محوريتين في مثل هذا النوع من المسائل)

لو شاركتنا بالبرنامج فسيكون شيء جميل جدا ,,,

==========

اقتباس
أنا جربت الطريقة العامة (أي بإيجاد معين فاندرموند)

ماهو معين فاندرموند ؟؟

اقتباس
لذلك نسيت الموضوع ولجأت إلى حساب التكامل بطريقة أشباه المنحرفات .. أعطت أداء جيد ولكني لست واثقاً من الدقة ..

هل تقصد أشباه منحرفات بين النقاط المعطاة في المسألة ؟ لأن النقاط المعطاة قد تكون بعيدة عن بعضها فسيكون الأداء في هذه الحال سيء جدا ,,,

يجب أن تقوم بعمل الإستكمال ,, توجد فئة غير هذه أيضا كتبتها تقوم بعمل إستكمال عن طريق المصفوفات العكسية وكانت تعمل جيدا لكن المنحنيات أكثر من الأس 8 لم تكن تعطي فيه نتائج دقيقة ,, (السبب غالبا loss في دقة الفاصلة)

بالنسبة للفئتين واحدة يمكن أن أجدها خلال الأيام التالية , والأخرى رحمة الله عليها !!(المصفوفات العكسية)

========

لكن طريقة لاجرانج ليست صعبة جدا وستأخذ منك بعض الوقت إن كنت تبرمج بالسي++ بشكل جيد ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#5
اقتباس
لو شاركتنا بالبرنامج فسيكون شيء جميل جدا ,,,

إن شاء الله سأرفق البرنامج في مشاركة قادمة لأنه ليس بين يدي الآن

اقتباس
ماهو معين فاندرموند ؟؟

هو المعين الذي نوجده من مجموعة المعادلات اللازمة لإيجاد المنحني في الطريقة العامة حيث تكون قيمة هذا المعين هي مقسوم المعينات الباقية (المستنتجة هي الأخرى من معين فاندرموند) ربما تسمونه أنتم بشكل آخر ... على كل حال إذا كان كلامي غير واضح سأوضح الشرح في المرة القادمة.

اقتباس
هل تقصد أشباه منحرفات بين النقاط المعطاة في المسألة ؟ لأن النقاط المعطاة قد تكون بعيدة عن بعضها فسيكون الأداء في هذه الحال سيء جدا ,,,

وضعت يدك على الجرح ... -_-

اقتباس
لكن طريقة لاجرانج ليست صعبة جدا وستأخذ منك بعض الوقت إن كنت تبرمج بالسي++ بشكل جيد ,,

المشكلة الحقيقية عند استخدام لاغرانج هي أنها تفرض أن تكون الأبعاد بين النقاط متساوية وهذا غير محقق دائماً (بل غير محقق أبداً) في مسألتي

وأنا مبرمج vb.net ولكن ليس لدي مشكلة مع c++

سأقوم بإرفاق حلي المشكلة عندي (الطريقة العامة وأشباه المنحرفات) وأرجو أن تقوم بإرفاق حلك كي تعم الفائدة.

اقتباس
معقول ما في حل لهذه المسألة في ماتلاب أو ماثماتيكا إذا كان الحل موجوداً فأرجو بيانه

وشكراً

#6

وجدت برنامج الإستكمال , وطلع نيوتن كما هو واضح من أسماء الدوال وليس لاجرانج , مع أني كنت شبه واثق أني كتبته بلاجرانج !

لم أراجع الكود حتى الآن لكن سيعمل بشكل مباشر على أي مصرف سي++ عادي ,,,

==========

لاأتذكر حتى صيغة إستكمال نيوتن أو لاجرانج بشكل واضح فمن سيستطيع أرجو أن يضيف الصيغ الرياضية لتعم الفائدة ,,

إن كان هناك أي سؤال حول الclass , فأنا موجود , لكن كبداية إن لاحظت فتوجد فئتين واحدة لتقوم بتمثيل كثيرات الحدود بشكل طبيعي , والأخرى للحدود (الكسور ) التي تكون كثيرات الحدود :)

والدالة الأساسية طبعا Newton ,,,

هذا الإستكمال للاجرانج وليس لنيوتن ,,,

إضغط بالزر الأيمن ثم save as وإنقله للهاردسك ثم إفتح بأي محرر ,,

( تم تعديل المرفقات للجديدة )

ملف ال txt فيه الفئة class فقط يمكن إستخدامها بشكل بسيط بإستدعاء الدالة Newton فقط وبتمرير قيم x و y كأول بارمترين لها والقيمة size البارمتر الثالث فيه درجة كثيرة الحدود المطلوبة .

الملف الثاني المضغوط فيه البرنامج كاملا يكفي تشغيل ملف solution فقط ليعمل في بيئة VS2005 بشكل مباشر , بالطبع بشرط تثبيت ال C++ مع ال VS2005

newton.zip

lagrange_class.txt

تم تعديل هذه المشاركة بواسطة HGB في 24 سبتمبر 2007 في 22:15

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#7

مشكور جداً أخي الكريم

جاري التحميل

وأنا بدوري لم أنس وعدي بوضع برنامجي ولكنه يحتاج إلى تنزيل vb6 للبحث عنه فهو معمول فيها وأنا لحد الآن مكسل بس بوعدك ما يدوم هالكسل طويلاً .... :D

مشكور مرة أخرى

#8

صيغة لاجرانج ....

كثيرة الحدود النهائية ,,,

mimetex.cgi?\sum_{j=1}^n p_j(x)

حيث :

mimetex.cgi? p_j(x)=\prod_{k=1  \\k \ne

بالمفكوك تصبح :

mimetex.cgi?p(x)=\frac {(x-x_2)(x-x_3)\l

وبالتعويض بقيم x_1 و x_2 بالنقاط المعطاه في المسألة , وبتعويض قيم y_1 و y_2 ,, كلها نحصل على كثيرة الحدود التي تستكمل البيانات وتعطي منحنى يمر بهذه البيانات ,,,

للتفاصيل في الموضوع :

http://mathworld.wolfram.com/LagrangeInter...Polynomial.html

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

هناك برنامج استفاء الدالة في منتدى الرياضيات

#10

السلام عليكم

آسف إذا كنت قد تأخرت بس هلأيام أنا فعلاً مشغول جداً فبدكو تعذروني

مرفق كلاسين معمولين بالـ vb6 الأول لحساب معين (determinent) والثاني لاستيفاء الدالة بالطريقة العامة ومن ثم مكاملة التابع الناتج.

أخ HGB نزلت الكلاس وبدأت بدراسته ولكن لم أنتهي منه لسبيين الأول ذكرته مسبقاً (المشاغل) والثاني هو أن معلوماتي في سي قليلة (أنا من جماعة البياسكة ... :D ) وانت تعرف صعوبة قراءة البرنامج حتى على مبرجي اللغة الواحدة على كل مجهود مبارك أرجو أن تتطلع على الكلاسين وأنا سأدرس كلاسك بتعمق أكثر ثم أعود إليك لمناقشة النتائج.

مع التنويه إلى أن طرق نيوتن ولاغرانج ونحوها على حسب معلوماتي تتطلب أن يكون البعد بين النقاط ثابتاً وهذا ما يضع قيداً مزعجاً على المسألة وأنا شخصياً لا أعرف طرقاً لا تضع هذا القيد (البعد الثابت) سوى الطريقة العامة وطريقتي المستطيلات وأشباه المنحرفات لذلك لجأت إلى مثل هذه الطرق في الحل على فكرة أخبرتك أن قمت بتطبيق طريقة أشباه المنحرفات لحل هذه المسألة وعندي برنامج يطبق هذه الطريقة في vb.net ولكنه بسيط وليس فيه أي فكرة متقدمة فهو ببساطة يأخذ متوسط كل نقطتين متتاليتين ومن ثم يضر الناتج بالبعد بينهما لإيجاد التكامل الجزئي ومن ثم يجمع النواتج لإيجاد الناتج النهائي ... يعني مش محرز ينحط بس إذا حابب ولا بد تتطلع عليه خبرني وسأقوم بإرفاقه.

أخ bachirk لم أفهم ماذا تقصد .. هل نسيت جزءاً لم تكتبه في المشاركة أم هي ببساطة مزحة .. :D

سأعتبرها مزحة حتى يثبت العكس .. إذا لم تكن كذلك يرجى التوضيح

على كل حال شكراً على إنضمامك إلينا لأني فكرت إني والأخ HGB الوحيدين المهتمين بهذا الموضوع هنا

فأهلاً وسهلاً بك

يبدو أنني نسيت نفسي وإذا ظليت هيك راح أسهركوا معي للصبح

عذراً على الإطالة ... وشكراً

Polation.rar

#11

في الحقيقة انا لا امزح

عندي مشكل في فهم المصطلحات التي تستعملونها "انا من الجزائر"

فكلمة استفاء ادا كنت تقصد بها لاحقة الدالة "مثل الدالة sin لاحقة 90 درجة هي 1"

فهدا المشكل محلول "اطلع على الملف المرفق"

لكن انا اقصد ايجاد العبارة وهدا امر مهم جدا بالنسبة لي

مثلا عندما اعطي للبرنامج x تكون النتيجة 0.5*x*x

ارجو المساعدة

شكرا

math.rar

#12

أخي بشير

عندي عادة سيئة وهي أني أقرأ البريد وأرد عليه قبل قرائة المشاركات :D

استيفاء دالة (polation) هو إيجاد الدالة التقريبية التي تمر من مجموعة من القيم التي لا تعرف دالتها وله نوعين استيفاء داخلي (interpolation) واستيفاء خارجي outerpolation والموضوع برمته يندرج تحت مواضيح التحليل العددي numerical anlysis .

كما يتبع لهذا الموضوع موضوع إيجاد التكامل التقريبي للدالة السابقة ولب المشكلة هو إيجاد الدالة (الاستيفاء ) ومن مكاملتها بالطرق التقليدية.

استخدمت بعض المصطلحات الانكليزية للتوضيح لأنها عالمية وأنا لا أعرف المصطلحات التي تستخدمونها في الجزائر .....

عذراً إذا كنا خربطناك .... :D

#13

لقد درست مادة التحليل العددي في الجامعة

هناك طريقة وحيدة و النتيجة عبارة عن كثير حدود

وتتناسب عدد النقاط المعلومة مع كثير الحدود المطلوب

ادا كانت الدالة المطلوبة من الدرجة الخامسة فيجب ان

تكون عدد النقاط المعطات 4 او اكثر وهكدا دواليك

لكن ماعلاقة التكامل

تم تعديل هذه المشاركة بواسطة bachirk في 9 أبريل 2006 في 23:00

#14

أخي

المشكلة ليست في طريقة الحل فهي معروفة كما ذكرت في مشاركتي الأولى لكن المشكلة في تطبيق ذلك برمجياً ، نريد برنامجاً يقوم باستيفاء الدالة إلى كثير حدود كما ذكرت

اقتباس
لكن ماعلاقة التكامل

بعد أن نقوم باستيفاء الدالة نريد أن نوجد قيمة التكامل في منطقة محدودة (السطح الذي يحصره المنحني) وهو أيضاً أحد المواضيع المدروسة في التحليل العددي ... ألا تذكر

أرجو أن تكون المسألة قد توضحت لديك ومن ثم مشاركتنا بمقترحاتك

وشكراً

#15
اقتباس
حسب معلوماتي تتطلب أن يكون البعد بين النقاط ثابتاً وهذا ما يضع قيداً مزعجاً على المسألة وأنا شخصياً لا أعرف طرقاً لا تضع هذا القيد (البعد الثابت)

ليس بالضرورة طبعا والمنحنى الناتج سيمر فعلا بكل النقاط التي وضعتها أنت , ولم أسمع بموضوع البعد الثابت بين النقاط !!

يمكن أن تجرب عمل interpolation على أي مجموعة نقاط وستجدها تمر بها فعلا ,,,

سأرى الكود , مع أن ليس لي علاقة بالفيبي :)

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#16

أخي HGB

أحب أن أعلمك أني وجدت دالة تقوم بعمل الاستيفاء تلقائياً

وهي الدالة interp في البرنامج mathcad

جربها

#17

أيضا توجد الدالة spline في ماتلاب تقوم بعمل الإستيفاء (الإستكمال) interpolation بطريقة سبلاين , وتمرر لها الأعداد x_1,x_2, x_3 وتمرر لها النقاط الموافقة y_1,y_2,y_3 أيضا , وتعطيك الدالة الناتجة , لكن لاتظهرها لك , تعطيها قيمة t مثلا وتعطيك النقطة المواجهة لها في الدالة الجديدة ,,,

لكن هل يمكن الإستفادة من إستيفاء mathcad أو ماتلاب لإستخدامه في برامجنا ؟ بالسي++ أو غيره ؟

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#18
HGB كتب:

أيضا توجد الدالة spline في ماتلاب تقوم بعمل الإستيفاء (الإستكمال) interpolation بطريقة سبلاين , وتمرر لها الأعداد x_1,x_2, x_3 وتمرر لها النقاط الموافقة y_1,y_2,y_3 أيضا , وتعطيك الدالة الناتجة , لكن لاتظهرها لك , تعطيها قيمة t مثلا وتعطيك النقطة المواجهة لها في الدالة الجديدة ,,,

لكن هل يمكن الإستفادة من إستيفاء mathcad أو ماتلاب لإستخدامه في برامجنا ؟ بالسي++ أو غيره ؟

يوجد في ماتلاب مكتبات للعمل مع سي بلس بلس وبيئة دوت نت وأخرى لجافا لا أذكر أسمائها ولكنها موجودة في وثائق ماتلاب والعثور عليها سهل جداً

سأراجع هذه الوثائق وأخبرك الرد

لك تحياتي

#19
اقتباس
يوجد في ماتلاب مكتبات للعمل مع سي بلس بلس وبيئة دوت نت وأخرى لجافا لا أذكر أسمائها ولكنها موجودة في وثائق ماتلاب والعثور عليها سهل جداً

سأراجع هذه الوثائق وأخبرك الرد

بداية أعتذر مرة أخرى عن التأخير

وثانياً أريد أن أقول أني أخطأت في ما ذكرة في المشاركة السابقة فالمكتبات التي تكلمت عنها موجودة في ماثماتيكا وليس ماتلاب وهي:

.net/link من أجل دوت نت

j/link من أجل جافا

وتتضمن وثائق ماثماتيكا مكتبات أخرى من أجل c ولكني لا أعرفها ولا أعرف التعامل معها

علما أن ماتلاب أيضاً قادر على التعامل مع سي أما من أجل دوت نت وجافا فلا أعلم إذا كان ماتلاب يدعمها

كما يتضمن ماثماتيكا عدة توابع لتنفيذ الاستيفاء

اسمحوا لي أن أعتذر عن الخطأ الذي وقعت به بشأن المكتبات

والسلام عليكم

هذا الموضوع مغلق.

مواضيع مشابهة