C言語における非線形方程式に対するSimpsonの1/3統合法による統合 -- c フィールド と linked-list フィールド と codeblocks フィールド と dynamic-programming フィールド と simpsons-rule フィールド 関連 問題

Integration by simpson's 1/3rd integration method for any non-linear equation in C language?












0
vote

問題

日本語

LinkListによるSimpson 1/3統合方法

<事前> <コード> #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> struct term{ int power; int coefficient; struct term *nxt; }; struct term *start=NULL; int deg=0; double valOfFuncAt(double); void createEquationTermsInLL(int); int main(){ double xo,xoTemp,xn,*fx,value; double h; double y=0.0,y_=0.0,z=0.0; int n,i; printf("Enter The Degree Of The Equation:: "); scanf("%d",&deg); createEquationTermsInLL(deg); printf(" Enter The Lower Limit,Upper Limit And No. Of Intervals(Must Be Even)::"); scanf("%lf %lf %d",&xo,&xn,&n); h = (xn - xo)/n; fx = (double*)malloc((n+1)*sizeof(double)); i=0; xoTemp=xo; while(i<=n){ *(fx + i)=valOfFuncAt(xoTemp); xoTemp = xoTemp + h; i++; } y = (*(fx+0)) + (*(fx + n)); i=1; while(i<n){ z = z + *(fx + i); i+=2; } z = 4*z; i=2; while(i<n){ y_ = y_ + *(fx + i); i+=2; } y_ = 2*y_; value = (h/3)*(y + z + y_); printf("Integral Is:: %ld",value); getch(); } double valOfFuncAt(double x){ double fx1=0; int i; struct term *temp=start; for(i=deg;i>=0;i--){ fx1 = fx1 + (temp->coefficient) * pow(x,temp->power); temp=temp->nxt; } return fx1; } void createEquationTermsInLL(int deg1){ /*Creating link list nodes */ static int i=0; int j,coefficient; int degClone=deg1; struct term *temp=NULL; for(j=1;j<=deg1+1;j++){ if(i==0){ start=(struct term*)malloc(sizeof(struct term)); printf("Enter Coefficient of %dst term",j); scanf("%d",&coefficient); start->coefficient=coefficient; start->power=degClone; i++; degClone-=1; temp=start; } else{ temp->nxt=(struct term*)malloc(sizeof(struct term)); temp=temp->nxt; if(j==2) printf("Enter Coefficient of %dnd term",j); else if(j==3) printf("Enter Coefficient of %drd term",j); else printf("Enter Coefficient of %dth term",j); fflush(stdin); scanf("%d",&coefficient); temp->power=degClone; temp->coefficient=coefficient; degClone-=1; } } temp->nxt=NULL; }

出力を期待しているのは60.00であるが0を得るのはなぜですか? SimpSonの1/3統合方法による統合をしようとしていない任意の非線形方程式について。これをコードブロックIDEで試してみました。 SimpSonの1/3ルールの正しいロジックを統合するために、依然としてintegrandの値を常にゼロにする、このコードでどこに問題があったのかわからない。

英語

Simpson 1/3rd integration method by Linklist.

#include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h>  struct term{     int power;     int coefficient;     struct term *nxt; };  struct term *start=NULL; int deg=0; double valOfFuncAt(double); void createEquationTermsInLL(int);  int main(){     double xo,xoTemp,xn,*fx,value;     double h;     double y=0.0,y_=0.0,z=0.0;     int n,i;     printf("Enter The Degree Of The Equation:: ");     scanf("%d",&deg);     createEquationTermsInLL(deg);     printf("  Enter The Lower Limit,Upper Limit And No. Of Intervals(Must Be Even)::");     scanf("%lf %lf %d",&xo,&xn,&n);     h = (xn - xo)/n;     fx = (double*)malloc((n+1)*sizeof(double));     i=0;     xoTemp=xo;     while(i<=n){          *(fx + i)=valOfFuncAt(xoTemp);         xoTemp = xoTemp + h;         i++;     }       y = (*(fx+0)) + (*(fx + n));      i=1;     while(i<n){         z = z + *(fx + i);         i+=2;     }     z = 4*z;     i=2;     while(i<n){          y_ = y_ + *(fx + i);         i+=2;     }     y_ = 2*y_;      value = (h/3)*(y + z + y_);     printf("Integral Is:: %ld",value);      getch(); }    double valOfFuncAt(double x){     double fx1=0; int i;     struct term *temp=start;      for(i=deg;i>=0;i--){         fx1 = fx1 + (temp->coefficient) * pow(x,temp->power);         temp=temp->nxt;     }     return fx1; }    void createEquationTermsInLL(int deg1){ /*Creating link list nodes */     static int i=0;     int j,coefficient;     int degClone=deg1;     struct term *temp=NULL;     for(j=1;j<=deg1+1;j++){         if(i==0){             start=(struct term*)malloc(sizeof(struct term));             printf("Enter Coefficient of %dst term",j);             scanf("%d",&coefficient);             start->coefficient=coefficient;             start->power=degClone; i++;              degClone-=1;             temp=start;         }         else{             temp->nxt=(struct term*)malloc(sizeof(struct term));             temp=temp->nxt;             if(j==2)             printf("Enter Coefficient of %dnd term",j);             else if(j==3)             printf("Enter Coefficient of %drd term",j);             else             printf("Enter Coefficient of %dth term",j);             fflush(stdin);             scanf("%d",&coefficient);             temp->power=degClone;             temp->coefficient=coefficient;             degClone-=1;         }     }     temp->nxt=NULL; } 

expecting output to be 60.00 but getting 0, don't know why? Trying to do integration by Simpson's 1/3rd integration method for any non-linear Equation. Tried this in code blocks IDE. Applying the correct logic of Simpson's 1/3rd rule for integration, still getting the Integrand value always to zero, don't know where I did wrong in this code.

</div
              
       
       

回答リスト

-4
 
vote
<事前> <コード> X0
 
/* DEFINING TRAPEZIUM RULE FUNCTION */  double trapeziumrule (Variables *p){      printf("You have chosen the Trapezium Rule! ");     printf("Please enter the highest order polynomial. ");     scanf("%d",&p->poly);      for(int i=p->poly ; i>=0 ; --i){         printf("Please enter the coefficient for x^%d:  ", i);         scanf("%lg",&p->coeff[i]);     }      //Establishing conditions     printf(" Please enter the lower bound  ");     scanf("%lg",&p->lbound);     printf("Please enter the higher bound  ");     scanf("%lg",&p->hbound);      //Sanity Check     if (p->hbound<=p->lbound){         printf("The higher bound must be higher than the lower bound! ");         return -1;     }      printf("Please enter how many intervals you wish to use  ");     scanf("%lg",&p->interval);     printf("  You chose a lower bound of %lg, an upper bound of %lg and  %lg intervals  ",p->lbound, p->hbound,p->interval);      p->width = (p->hbound-p->lbound)/p->interval;      //Finding the x values to evaluate y at     for (int i=0 ; i<=p->interval ; ++i){         p->x[i]=p->lbound + i*p->width;     }      for (int k=0; k<=p->interval; ++k){         for (int i=0; i<=p->poly; ++i){             //Case for y(0) and y(interval)             if (k==0 || k==p->interval){                 p->value=p->coeff[i]*pow(p->x[k],i)*(1.0/2.0);             }             //Case for middle y values             else if (k!=0 || k!=p->interval){                 p->value=p->coeff[i]*pow(p->x[k],i);             }             //Adding each segment onto the previous             p->area=p->area+p->value;         }     }     //Finding the area under the curve     p->area=p->area*p->width;     printf("  The result of the integration via Trapezium rule is %lg  ", p->area);      return 0; }  /* DEFINING SIMPSONS RULE FUNCTION */  double simpsonsrule (Variables *s){      printf("You have chosen Simpsons rule! ");     printf("Please enter the highest order polynomial. ");     scanf("%d",&s->poly);      for(int i=s->poly ; i>=0 ; --i){         printf("Please enter the coefficient for x^%d:  ", i);         scanf("%lg",&s->coeff[i]);     }     //Conditions     printf("Please enter the lower bound  ");     scanf("%lg",&s->lbound);     printf("Please enter the higher bound  ");     scanf("%lg",&s->hbound);      //Sanity Check     if (s->hbound<=s->lbound){         printf("The higher bound must be higher than the lower bound! ");         return -1;     }      printf("Please enter how many intervals you wish to use  ");     scanf("%lg",&s->interval);     printf(" You chose a lower bound of %lg, an upper bound of %lg and  %lg intervals  ",s->lbound, s->hbound,s->interval);      s->width = (s->hbound-s->lbound)/s->interval;      //Finding the x values to evaluate y at     for (int i=0 ; i<=s->interval ; ++i){         s->x[i]=s->lbound + i*s->width;     }      for (int k=0; k<=s->interval; ++k){         for (int i=0; i<=s->poly; ++i){             //Case for y(0) and y(interval)             if (k==0 || k==s->interval){                 s->value=s->coeff[i]*pow(s->x[k],i)*(1.0/3.0);             }             //Case for odd values of y(interval)             else if (k%2!=0 && k!=s->interval){                 s->value=s->coeff[i]*pow(s->x[k],i)*(4.0/3.0);             }             //Case for even values of y(interval)             else if (k%2==0 && k!=s->interval){                 s->value=s->coeff[i]*pow(s->x[k],i)*(2.0/3.0);             }             s->area=s->area+s->value;         }     }     s->area=s->area*s->width;     printf("  The result of the integration via Simpsons rule is %lg  ", s->area);     return 0; }  double midptrule (Variables *m){      printf("You have chosen the Midpoint Rule! ");     printf("Please enter the highest order polynomial. ");     scanf("%d",&m->poly);      for(int i=m->poly ; i>=0 ; --i){         printf("Please enter the coefficient for x^%d:  ", i);         scanf("%lg",&m->coeff[i]);     }     //Conditions     printf("Please enter the lower bound  ");     scanf("%lg",&m->lbound);     printf("Please enter the higher bound  ");     scanf("%lg",&m->hbound);        printf("Please enter how many intervals you wish to use  ");     scanf("%lg",&m->interval);     printf(" You chose a lower bound of %lg, an upper bound of %lg and  %lg intervals  ",m->lbound, m->hbound, m->interval);      m->width = ((m->hbound-m->lbound)/m->interval)/2;      //Finding and storing x values     for (int i=0 ; i<m->interval ; ++i){         m->x[i]=m->lbound + (m->width+i*2*m->width);     }      //Calculating the y values     for (int k=0; k<m->interval; ++k){         for (int i=0; i<=m->poly; ++i){             m->value=m->coeff[i]*pow(m->x[k],i);             m->area=m->area+m->value;         }     }     m->area=m->area*2*m->width;     printf("  The result is %lg  ", m->area);     return 0; } 
</div
 
 
   
   

関連する質問

0  C言語における非線形方程式に対するSimpsonの1/3統合法による統合  ( Integration by simpsons 1 3rd integration method for any non linear equation in ) 
LinkListによるSimpson 1/3統合方法 <事前> <コード> #include<stdio.h> #include<conio.h> #include<math.h> #include<stdlib.h> struct term{ i...

0  Excelの式の入力に関する質問  ( Question about inputting formulas in excel ) 
私はシンプソンの規則のためのワークシートを作成しています、そして私はそれを異なる式に対して柔軟にしたいと思います。 だから私はエンドポイント、ステップサイズ、そして式のためだけにセルを持っています、そして私の計算のためのテーブルを持っています。 私は私がテーブ...

0  SimpSonの規則を使用して(x ^ 2)(e ^ -x ^ 2)DXの積分を評価するためのCコードを書き込みます(固定数20,000ステップを使用)。  ( Write c code to evaluate the integral between 0 and y of x2e x2dx using s ) 
Qの2段目の部分:次に、括弧内のy ^(e ^( - x ^ 2))dx = 0.1の間の積分を解く。 これまでにしたことです。 <事前> <コード> dotnet command0 それは実行されるが、私がそれが必要なことを正確にはしない。範囲として0...

1  C ++におけるコンポジットシンプソンのルール  ( Composite simpsons rule in c ) 
複合シンプソンの規則を使用して積分の値を近似する関数を書いています。 <事前> <コード> template <typename func_type> double simp_rule(double a, double b, int n, func_type...

3  Cプログラムを使用して特定の曲線に対応するSimpson 1/3ルールに積分面積をプロットする方法  ( How to plot area of the integral in simpson 1 3 rule corresponding to a given cu ) 
Cプログラムを使用して、特定の曲線に対応するSimpson 1/3ルールの積分面積をプロットしたいですか? これは私のコードです: <事前> <コード> /* Simpson's 1/3 Rule Equation: x/(1+x) dx lower...

3  シンプソンのルールエラー  ( Simpsons rule error ) 
このコードはSimpSonの規則を使用して、x * sin(x)の積分を(1,2)の範囲で計算します。私が持っている問題は、実際の価値に非常に近づいています。 999回の反復でも、それはまだ点に当たらない。同じことに台形規則を使用する別のプログラムがあり、10...

1  Fortran 90を用いた数値積分  ( Numerical integration using fortran 90 ) 
SimpSonのルールを使用して、-1から1までの間隔でSQRT(1 - x ^ 2)の積分を評価しようとしています。ただし、コード内の変数 "S"で表される合計開発された、まったくPIに収束しません2.私はFortranからプログラミングまで絶対的な初...

0  なぜシンプソンの統合の規則がPythonで再書き直された結果を与えていますか?  ( Why simpsons rule of integration rewritten in python giving a different result ) 
次のソースコードは、 simpsonのルールの統合の実装です。 c#ソースコード。 <事前> <コード> using System; public class Simpson { private double Function(double ...

1  SCIPYを使用してSimpsonsルールを統合する方法1Dグラフをプロットする  ( How to integrate simpsons rule using scipy to plot a 1d graph ) 
私はいくつかの助けが必要です、私はSimpsons規則を使用して関数の統合をコーディングするための課題を持っています。 1Dグラフをプロットするには、InBuilt Scipy IntegrateSimps関数を使用する必要があります。どこに始まるのかわからな...

1  GAMにおけるSimpSonの統合ルールを使用する問題  ( Problem using simpsons integration rule in gams ) 
TrapezioD統合を使用してグライダーの最大リーチを決定するGAMを使用して簡単なコードを作成しました。私はシンプソンの統合と同じプログラムを再作成したいのですが、結果を理解することはできません。 これは台形規則を持つ機能コードです: <事前> <コード...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有