質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

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

Q&A

解決済

1回答

888閲覧

ニュートン法のプログラミング

challenge326

総合スコア20

アルゴリズム

アルゴリズムとは、定められた目的を達成するために、プログラムの理論的な動作を定義するものです。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

関数型プログラミング

関数型プログラミングとは、関数を用いて演算子を構築し、算出し、コンピュータプログラムを構成する枠組みです。

C++

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

0グッド

1クリップ

投稿2020/01/16 05:33

ニュートン法のは一般に、初期値に近い解を高速に計算する計算方法である。
区間[a; b] 内にある解を求める為に、次のような方法を考える。

  1. 区間[a; b] 内の1025 個点xn = a + (b ???? a)  n=1024, (0  n  1024) 、そのな

かでjf(xn)j が最小であるものを返す関数maekeisan を作る。
2. 関数maekeisan で得られた点を初期値として、ニュートン法を計算する。
問い:/* houteisiki05.c / 以下のプログラムを完成させよ。
#include <stdio.h>
#include <math.h>
#define EPS 1e-8 /
打ち切り誤差*/
#define LIMIT 50 /* 打ち切り回数*/
double f(double x){ return sin(x); }
double df(double x){ return cos(x); }
double maekeisan(double (*f)(double), double a, double b){
double x,saisho,xx;
int n;
saisho=fabs(f(a)); 【A 】;
for(n=0;【B 】;n++){
x=a+(b-a)*n/1024;
if (fabs(f(x))<saisho) {xx=x; saisho=【C 】}
}
return xx;
}
double newton2(double (*f)(double), double (*g)(double), double a, double b){
double x0,x1;
int k;
x0=【D 】;
printf("初期値=%lf \n",x0);
for (k=1;k<=LIMIT;k++) {
x1=x0-f(x0)/df(x0);
if (fabs(x1-x0)<EPS) return x1;
x0=x1;
}
if (k>LIMIT) { printf("収束しない\n"); return 9999;}
}
main(){
printf("x=%lf \n",newton2(f,df,3,7));
}
実行結果
初期値=3.140625
x=3.141593

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/01/16 06:04

宿題は先生に聞いてください。
cateye

2020/01/16 06:26 編集

三つも立て続けに質問して、回答があってもプログラム組めるんですか? 誰もソースなんか提供しませんよ・・・ →https://teratail.com/help/avoid-asking
guest

回答1

0

ベストアンサー

回答

C++

1#include<iostream> 2#include<stdio.h> 3#include<math.h> 4using namespace std; 5 6# define EPS 1e-8 // truncation error 7# define LIMIT 50 // truncation number 8 9double f(double x){return sin(x);} 10double df(double x){return cos(x);} 11 12double pre(double(*f)(double), double a, double b){ 13 double x, mim, xx; 14 int n; 15 16 mim = fabs(f(a)); 17 xx = fabs(f(b)); 18 19 for(n = 0; mim < xx; n++){ 20 x = a + (b - a) * n / 1024; 21 if(fabs(f(x)) < mim){ 22 xx = x; 23 mim = fabs(f(x)); 24 } 25 } 26 return xx; 27} 28 29double newton2(double(*f)(double), double(*g)(double), double a, double b){ 30 double x0, x1; 31 int k; 32 33 x0 = pre(f, a, b); 34 cout<<"Initialize value: "<<x0<<endl; 35 36 for(k = 1; k <= LIMIT; k++){ 37 x1 = x0 - f(x0)/ df(x0); 38 39 if(fabs(x1 - x0) < EPS) 40 return x1; 41 42 x0 = x1; 43 } 44 45 if(k > LIMIT){ 46 cout<<"Couldn't converge"<<endl; 47 return 9999; 48 } 49 50} 51 52int main() 53{ 54 cout<<"x: "<<newton2(f, df, 3, 7)<<endl; 55 56 return 0; 57} 58

投稿2020/01/16 07:28

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問