इसलिए, मैंने सी में एक प्रोग्राम लिखने की कोशिश की है जो टेलर श्रृंखला का उपयोग करके कोसाइन का अनुमान लगाएगा:

#include <stdio.h>
#include <math.h>

int main() {
  printf("degrees\tTaylor\tcos(degrees)\n");
  for (double i=0; i<=90; i++) {
  double factorial=1;
  double x,xn=1;
  x=i/(180/M_PI);
  double y=1;
  for (int i=1; i<30; i++) {
    factorial*=i;
    xn*=x;
    y+=((i%3==0)?(1):(i%3==1)?(0):(-1))*xn/factorial;
  }
  printf("%lf\t%lf\t%lf\n",i,y,cos(x));
  }
}

हालाँकि, 90 डिग्री के लिए त्रुटि 1/3 से अधिक है:

The error grows very fast

मैंने सोचा था कि त्रुटि सी double प्रकार के कारण संख्यात्मक अस्थिरता के कारण थी। हालाँकि, जब मैंने अपने प्रोग्राम को पायथन में फिर से लिखा, तो मुझे लगभग एक ही परिणाम मिला:

import math
print("degrees\tTaylor\tcos(degrees)\tdeviance")
for degrees in range(0,90+1):
  factorial=1
  x=degrees/(180/math.pi)
  xn=1
  y=1
  for i in range(1,50):
    factorial=factorial*i
    xn=xn*x
    multiplicator=0
    if i % 3 == 0:
      multiplicator=1
    elif i % 3 == 1:
      multiplicator=0
    else:
      multiplicator=-1
    y=y+multiplicator*xn/factorial
  print(str(degrees)+"\t"+str(y)+"\t"+str(math.cos(x))+"\t"+str(abs(y-math.cos(x))))

क्या आपको पता है कि यहाँ क्या हो रहा है? टेलर सीरीज़ के पहले 50 शब्दों का उपयोग करके, यह वास्तविक कोसाइन फ़ंक्शन से लगभग अप्रभेद्य होना चाहिए। लेकिन यह नहीं है।

0
FlatAssembler 6 पद 2020, 19:46

1 उत्तर

सबसे बढ़िया उत्तर

आपकी बग i % 3 है। कोसाइन गो 1, 0, -1, 0, 1, 0, -1, 0....

1
Frank Yellin 6 पद 2020, 16:51