الهدف هو كتابة الخوارزمية التي تقوم بحساب (cox(x لزاوية ما بالدرجة دون إستخدام الدالة المدرجة مسبقا في أي لغة برمجة.
الصورة التالية توضح كيف يمكن حساب (cos( x بعلاقة رياضية بسيطة :
يمكنك تنفيذها بأي لغة برمجة تحب
الهدف هو كتابة الخوارزمية التي تقوم بحساب (cox(x لزاوية ما بالدرجة دون إستخدام الدالة المدرجة مسبقا في أي لغة برمجة.
الصورة التالية توضح كيف يمكن حساب (cos( x بعلاقة رياضية بسيطة :
يمكنك تنفيذها بأي لغة برمجة تحب
أتذكر أني قمت بكتابة هذا الالغوريتم من قبل
لكن يجب انت تضع شرط للتوقف الـ loop
مثلا عندما يصبح x^n/n! f اصغر من 0.00001 :p
مشاركتي بإستخدام جافاسكريبت
وقمت بعمل مقارنة فوجدت فرق الخطأ 0 تقريبا
var anglec = prompt("أدخل الزاوية بالدرجة لحساب cos ");
function oux(angled) {
var angle = angled * (Math.PI / 180),
a = 0,
b = 0,
c = 0,
d = 0,
e = 0;
var f = [];
function factorial(n) {
if (n === 0 || n == 1)
return 1;
if (f[n] > 0)
return f[n];
return f[n] = factorial(n - 1) * n;
}
var i1 = 0,
n1 = 2;
while (i1 < 10) {
a = a + (Math.pow(angle, n1) / factorial(n1));
n1 = n1 + 4;
i1++;
}
var i2 = 0,
n2 = 4;
while (i2 < 10) {
b = b + (Math.pow(angle, n2) / factorial(n2));
n2 = n2 + 4;
i2++;
}
return c = 1 + (a * -1) + b;
}
d = Math.cos(anglec * (Math.PI / 180));
e = d - oux(anglec);
alert("cos(" + anglec + ")= " + oux(anglec) + "\nrealcos(" + anglec + " )= " + d + "\nفرق الخطأ = " + e);
فرق الخطأ لديك سيزداد طرديا بزيادة الزاوية.
جرب مثلا 36000 كزاوية.
ولا داعي لتخزين كل قيم n! التي سبقت. يكفيك الاحتفاظ بالقيمة الأخيرة.
فرق الخطأ لديك سيزداد طرديا بزيادة الزاوية.
أنت محق لكن من أجل زاوية 360
cos(360)= 1.0000000000000284
فالزاوية لا تزيد عن 360 فيمكن القول خطأ برتبة 14- رتبة عشرية و كما ذكر الأخ محمد فهذه متسلسة تايلور التي تسمح بتمثيل أي دالة على شكل كثير حدود و أوجدها عالم رياضي تايلور الأنجليزي في عام 1715
فهي تستعمل لحل المسائل المعقدة بشكل تقريبي و شكرا لك
أعلم أن الدالة المدرجة لا تستخدم هذه الخوارزمية
إذن ماهي الخوارزمية المستخدمة ؟؟؟؟؟ و هل يمكن محاكاتها ؟
تقصد الدالة المستخدمة في cos الموفرة من قبل النظام؟
لا تستخدم taylor ولكن _مجموعة_ خوارزميات أخرى أكثر تعقيدا.
مثلا هذه هي cos لل glibc:
نعم أقصد ذالك شكرا لك
حقا معقدة جدا و نحن عندما نقوم بحساب cos نظنه سهلا تخيل الأمر دون حواسيب أو دون ألات حاسبة
و هل لديك فكرة كيف كان العرب الذين طوروا علم المثلثات يحسبون cos ؟؟؟؟؟؟
بحثت لم أجد سوى فكرة غامضة حيث كانو يستعملون جداول أو ماشابه!!
كانوا يحاولون الوصول إلى معادلات متعددة الحدود مقاربة للقيم الفعلية. القيم الأصلية سهلة التأكد منها لأنه يمكنك رسم دائرة ذو قطر معين (كلما كان أكبر كان أفضل) ثم مقارنة القياس بالحساب.
ثم يتم إستخدم المعادلة في حساب كل الزوايا بخطوة صغيرة (مثلا 1/100 من الزاوية القائمة) و تدوين ذلك في جداول.
التعليقات