質問編集履歴

1 他の方からいろいろとご指摘いただいたため、問題の改定、プログラムの方は削除しました。

bell_bell

bell_bell score 10

2018/12/15 22:36  投稿

クッタ法(3次)・ルンゲクッタ法(4次)の分割数の求め方がわかりません。
数値計算・分割数のもとめかた
### クッタ法(3次)・ルンゲクッタ法(4次)
### クッタ・ルンゲクッタ法
初めまして。学校の数値計算法の課題でわからないところがあり、質問しました。
1階の情微分方程式dy/dx=3y/x+1が与えられたとき、y(0)=1である未知関数の値を数値的に求めることを考える。(特殊解はy=(x+1)^3)
初めまして。数値計算法でわからないところがあり、質問しました。
区間[0.1]をn等分し、クッタ法(3次)、ルンゲクッタ法(4次)により、それぞれ数値解を求めるプログラムを作成し、x=1.0の時の解析解fと数値解fkの誤差がε=10^-3以下となるような分割数nを求めよ。
区間[0.1]をn等分し、クッタ法、ルンゲクッタ法により、それぞれ数値解を求めるプログラムを作成し、x=0.4の時の解析解と数値解の誤差がε=10^-2以下となるような分割数nを求めよ。
という問題です。
それぞれの数値解を求める10等分して行うプログラムなら授業で習っているため下記のようにできたのですが、分割数を求めるやり方は直接習っていなく、調べてみてもわかりませんでした。
それぞれの数値解を求める10等分して行うプログラムならわかるのですが、分割数を求めるやり方は直接習っていなく、調べてみてもわかりませんでした。
分かる方、ご回答よろしくお願い致します。
 
### クッタ法  
 
```  
#include<stdio.h>  
#include<math.h>  
 
double k_func(double ,double ,double);  
double func(double ,double);  
double func_y(double);  
 
int main(void)  
{  
   double a=0.0, b=1.0;  
   double x,y,h,k;  
   int n=10,i;  
     
   h=(b-a)/n;  
   x=0.0;y=1.0;i=0;  
   printf(" i x        y\n");  
   while(i<n){  
       k=k_func(x,y,h);  
       x+=h;y+=h*k;i++;  
       printf("%2.d, %f, %f\n",i,x,y);  
   }  
   return 0;  
}  
double k_func(double x,double y,double h)  
{  
   double k1,k2,k3,k;  
   k1=func(x,y);  
   k2=func(x + h/2.0,y + k1*h/2.0);  
   k3=func(x + h,y + (2.0*k2-k1)*h);  
   k=(k1 + 4.0*k2 + k3)/6.0;  
   return k;  
     
}  
double func(double x ,double y)  
{  
   return (3*y)/(x+1);  
     
}  
double func_y(double x)  
{  
   return pow(x+1, 3.0);  
}  
 
```  
 
###ルンゲクッタ法  
```  
 
#include<stdio.h>  
#include<math.h>  
 
double k_func(double ,double ,double);  
double func(double ,double);  
double func_y(double);  
 
int main(void)  
{  
   double a=0.0, b=1.0;  
   double x,y,h,k;  
   int n=10,i;  
     
   h=(b-a)/n;  
   x=0.0;y=1.0;i=0;  
   printf(" i x        y\n");  
   while(i<n){  
       k=k_func(x,y,h);  
       x+=h;y+=h*k;i++;  
       printf("%2.d, %f, %f\n",i,x,y);  
   }  
   return 0;  
}  
double k_func(double x,double y,double h)  
{  
   double k1,k2,k3,k4,k;  
   k1=func(x,y);  
   k2=func(x + h/2.0,y + k1*h/2.0);  
   k3=func(x + h,y + (2.0*k2-k1)*h);  
   k4=func(x + h, y + h*k3);  
   k=(k1 + 4.0*k2 + k3)/6.0;  
   return k;  
     
}  
double func(double x ,double y)  
{  
   return (3*y)/(x+1);  
     
}  
double func_y(double x)  
{  
   return pow(x+1, 3.0);  
}  
 
```  
 
### 補足情報(FW/ツールのバージョンなど)
使用ソフト:EasyIDEC
  • C++

    7120 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る