こんにちは。初めまして。
課題をだされた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
教えてください(グラフの作り方)
Re: 教えてください(グラフの作り方)
コードそのものはビルド・実行できました。ただ結果がx=の時にinf、x=1の時にnanになりました。
実行結果はともかくとして、C言語のコードとしてはうまくいっています。
数学に疎いのでfuncの数式の意味するところがわからないのですが、この数式自体が間違っているかも知れず、正しい数式を知りたいという意味でしょうか?そうであればその数式で解決したい目的を書かれた方がよいかと思います。
実行結果はともかくとして、C言語のコードとしてはうまくいっています。
数学に疎いのでfuncの数式の意味するところがわからないのですが、この数式自体が間違っているかも知れず、正しい数式を知りたいという意味でしょうか?そうであればその数式で解決したい目的を書かれた方がよいかと思います。
Re: 教えてください(グラフの作り方)
ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
([]で囲まれていないcodeや/codeは、BBCodeのcodeタグではありません)
式をWolfram Alphaにかけてみましたが、0になるのは複素解しか出てきませんでした。
(funcが0になる実数xは無いと推測できます)
また、 は、C言語では整数同士の除算は切り捨てられるので と同じになります。
これは意図したものですか?
qを1.0/25とした場合の式もWolfram Alphaにかけてみましたが、やはり複素解しか出てきませんでした。
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
([]で囲まれていないcodeや/codeは、BBCodeのcodeタグではありません)
式をWolfram Alphaにかけてみましたが、0になるのは複素解しか出てきませんでした。
(funcが0になる実数xは無いと推測できます)
また、 は、C言語では整数同士の除算は切り捨てられるので と同じになります。
これは意図したものですか?
qを1.0/25とした場合の式もWolfram Alphaにかけてみましたが、やはり複素解しか出てきませんでした。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 教えてください(グラフの作り方)
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は存在しません。
-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で殴ればいい!(死亡フラグ)
Re: 教えてください(グラフの作り方)
参照魚さん、みけcatさんご丁寧な返信ありがとうございました。
私のfunc=0になる点が3つあるというのは間違いでした。
このfuncを微分したf'=0の場合、つまり極値が3つ存在するとのことでした。
お手数をおかけして申し訳ございません。
私のfunc=0になる点が3つあるというのは間違いでした。
このfuncを微分したf'=0の場合、つまり極値が3つ存在するとのことでした。
お手数をおかけして申し訳ございません。