教えてください(グラフの作り方)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nanoka

教えてください(グラフの作り方)

#1

投稿記事 by nanoka » 3年前

こんにちは。初めまして。
課題をだされたc言語初心者です。
自力で頑張ってとりあえずプログラムを作ってみましたが全然うまく行きません。汗

下のプログラム内にあるfuncという関数のグラフを作りたいのですが、
どうしてもうまくいかないので何が間違っているのか、どうすれば良いのか教えていただけると幸いです。
先生曰く、func=0という値を3つとるはずなのに、私のグラフではただの放物線になってしまいます。
実行する際にデータファイルを作り、gnuplotで描写するのでプログラム中にグラフ描写を組み込んでいません。

code

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

const double q = 1/25;

int main ()
{
double x;
double func;
const double a = 1+q;

for (x=0.0; x<=1000; x++)
{
func = -2/(a*sqrt(x*x))-2*q/(a*sqrt((x-1)*(x-1)))-pow(x-q/a, 2.0);
printf ("%f, %f\n", x,func);
}
}

/code

参照魚
記事: 109
登録日時: 6年前

Re: 教えてください(グラフの作り方)

#2

投稿記事 by 参照魚 » 3年前

コードそのものはビルド・実行できました。ただ結果がx=の時にinf、x=1の時にnanになりました。
実行結果はともかくとして、C言語のコードとしてはうまくいっています。

数学に疎いのでfuncの数式の意味するところがわからないのですが、この数式自体が間違っているかも知れず、正しい数式を知りたいという意味でしょうか?そうであればその数式で解決したい目的を書かれた方がよいかと思います。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 教えてください(グラフの作り方)

#3

投稿記事 by みけCAT » 3年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
([]で囲まれていないcodeや/codeは、BBCodeのcodeタグではありません)

式をWolfram Alphaにかけてみましたが、0になるのは複素解しか出てきませんでした。
(funcが0になる実数xは無いと推測できます)

また、

コード:

const double q = 1/25;
は、C言語では整数同士の除算は切り捨てられるので

コード:

const double q = 0;
と同じになります。
これは意図したものですか?

qを1.0/25とした場合の式もWolfram Alphaにかけてみましたが、やはり複素解しか出てきませんでした。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 教えてください(グラフの作り方)

#4

投稿記事 by みけCAT » 3年前

aが正の実数、qが0以上の実数で、xが実数のとき、

-2/(a*sqrt(x*x))
-2*q/(a*sqrt((x-1)*(x-1)))
-pow(x-q/a, 2.0)

は全て0以下 (ただしxが0, 1の時は分母が0になるので無効) ですね。

aが正、qが0のとき、
-2/(a*sqrt(x*x)) はx≠0のとき負、
-2*q/(a*sqrt((x-1)*(x-1))) はx≠1のとき0、
-pow(x-q/a, 2.0) はx≠0のとき負、x=0のとき0
なので、0, 1以外の任意の実数xについてfuncは負になります。

q=1.0/25, a=q+1のとき、q/a≒0.038であり、
-2/(a*sqrt(x*x)) はx≠0のとき負、
-2*q/(a*sqrt((x-1)*(x-1))) はx≠1のとき負、
-pow(x-q/a, 2.0) はx≠q/aのとき負、x=q/aのとき0
なので、やはり0, 1以外の任意の実数xについてfuncは負になります。

よって、func=0になる実数xは存在しません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

nanoka

Re: 教えてください(グラフの作り方)

#5

投稿記事 by nanoka » 3年前

参照魚さん、みけcatさんご丁寧な返信ありがとうございました。

私のfunc=0になる点が3つあるというのは間違いでした。
このfuncを微分したf'=0の場合、つまり極値が3つ存在するとのことでした。
お手数をおかけして申し訳ございません。

nanoka

Re: 教えてください(グラフの作り方)

#6

投稿記事 by nanoka » 3年前

doubleで宣言しているのに、小数点をつけていないことが原因だとわかりました。
皆様ありがとうございました!!

返信

“C言語何でも質問掲示板” へ戻る