باستخدام متعدد الحدود تايلور برمجيا في القيقب

StackOverflow https://stackoverflow.com/questions/1828855

  •  11-09-2019
  •  | 
  •  

سؤال

أحاول استخدام تايلور متعدد الحدود برمجيا في القيقب، لكن ما يلي لا يبدو أنه يعمل ...

T[6]:=taylor(sin(x),x=Pi/4,6);convert(T[6], polynom, x);
f:=proc(x)
  convert(T[6], polynom, x);
end proc;
f(1);

كل ما يلي أيضا لا تعمل:

  • f:=convert(T[6], polynom);
  • f:=convert(T[6], polynom, x);
  • f:=x->convert(T[6], polynom);
  • f:=x->convert(T[6], polynom, x);.

هل هناك طريقة للقيام بذلك دون نسخ ولصق إخراج التحويل إلى تعريف f?

هل كانت مفيدة؟

المحلول

قد يكون من الطبيعي أيضا تحديد ر وظيفة.

T:=y->subs(x=y,convert(taylor(sin(x),x=Pi/4,6),polynom));

T(1);

نصائح أخرى

إذا فهمت لك بشكل صحيح، فإن هذا ينجز ما تريد:

f := proc(z)
    local p :: polynom;
    p := convert(T[6], polynom); 
    return subs(x = z, p)
end proc

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

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

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

> f:=unapply(convert(taylor(sin(x),x=Pi/4,6),polynom),x):
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top