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

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

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

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

関数

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

1653閲覧

c言語における二分法のプログラム (変数の置き換え)

Erushion

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

プログラミング言語

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

関数

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/10/26 15:45

c言語における二分法のプログラムで行き詰っています。

Vcmの置き換えが上手く再現できません。

以下がソースコードです。

お力をお貸しください。宜しくお願い致します。

//関数の呼び出す//
#include<stdio.h>
#include<math.h>

int main(void){
double vcm;
double p=762.3;//気圧[mmHg]//
double r11=0.1;//内電極直径0.2[cm] //
double r12=0.2;//内電極直径0.4[cm] //
double r2=1.8;//外電極直径3.6[cm]//
double a1=plog(r2/r11);//pln(r2/r11)の数値計算//
double a2=plog(r2/r12);//pln(r2/r12)の数値計算//
double b=0.001;//δの値//
//内電極直径が0.2[cm]の時//
double vc1=15000;//初期値1//
double vc2=19000;//初期値2//
double y=0.00016p(((vc1/a1)(vc1/a1))((1/r11)-((31.6a1)/vc1))+((63.2vc1)/a1)(log((r1131.6a1)/vc1))+((31.631.6)((vc1/31.6a1)-r11)))-(3.213.21);//f(vc1)の作成//
while(fabs(vc1-vc2)>b)//fabs関数を用いて絶対値表現にし、δの範囲に入るまで繰り返す。//
{
vcm=(vc1+vc2)/2;//中点の算出//
double fvcm=0.00016
p*(((vcm/a1)(vcm/a1))((1/r11)-((31.6a1)/vcm))+((63.2vcm)/a1)(log((r1131.6a1)/vcm))+((31.631.6)((vcm/31.6a1)-r11)))-(3.213.21);//関数f(vcm)の作成//
if(y
fvcm>0){
vc1=vcm;//vc1をvcmとする//
}else{
vc2=vcm;//vc2をvcmとする//
}
}
double vc11;
vc11=vcm;
//二分法後、vcmの値の書き出し。//
printf("vcの値は%lfです。",vc11);

return 0;
}

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

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

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

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

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

guest

回答1

0

関数 f(x) における二分法とは、
f(a) と f(b) の符号が異なる場合に、
f(x) = 0 となる x の値を挟み撃ちで求めるものです。

質問のコードは、f(vc1) と f(vc2) がどちらも正であり、
vcm = (vc1 + vc2) / 2 で、fvcm = f(vcm) も正です。
y * fvcm > 0 なので、vc1 のみが更新され続け vc2 に近づいています。
また、while のなかで y が更新されていません。

f(x) がある値 k になる x の値を求めたかったら、
g(x) = f(x) - k として、g(x) について二分法を実行しましょう。

投稿2020/10/26 22:35

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問