こんにちは私は、異なる正弦関数の解を見つけるためのプログラムを作っています。 私は一定の間隔で各関数の解をテストできるように、sin(2x)、sin(4x)、sin(6x)、.... sin(12x)を配列に格納したいと思っていました。多項式をサイン関数に入れる方法は? (re)
ここでのコード...
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <float.h>
int bisect(double *x, double x0, double xf, double tolerance, double (*func)(double));
int main()
{
double x, x0 = 2.0, xf = 4.0, tolerance = FLT_EPSILON;
int status, i, j;
double (*pf[6])(double);
for (i = 1; i < 7; i++)
{
pf[i] = sin(2 * i * x);
// error : cannot assign double value to double(*) (double) entity
// How to make functions like sin(2x), sin(4x), .. etc??
status = bisect(&x, x0, xf, tolerance, pf[i]);
と私は機能与えられたものをポイントで見つけることが二分()関数を作成した0
二分関数は、main関数の下で返します。 x0は始点、xfは終点、iは誤差をチェックするための公差を設定します。二等分関数はforループの中間値定理を使用します。
forループでbisect関数を呼び出し、* pf [i]を使ってサイン関数を渡して解を探したいと思います。
if (status == -1)
printf("Error : bisect() failed, invalid tolerance\n");
else if(status == -2)
printf("Error : bisect() failed, invalid end points\n");
else
printf("x = %f, sin(x) = %g\n", x, pf[i](x));
}
return 0;
}
int bisect(double *x, double x0, double xf, double tolerance, double (*func)(double))
{
double xleft = x0, fleft;
double xright = xf;
double xmid, fmid;
if (tolerance <= 0.0)
return -1;
fleft = func(x0);
if (fleft * func(xf) > 0.0)
return -2;
xmid = (xleft+xright) /2.0;
fmid = func(xmid);
while (fabs(fmid) > tolerance)
{
if (fleft * fmid <= 0)
{
xright = xmid;
}
else
{
xleft = xmid;
fleft = fmid;
}
xmid = (xleft + xright)/2.0;
fmid = func(xmid);
}
*x = xmid;
return 0;
}
それはなど、何の罪について(2倍)、罪(4倍)しかしなど、罪、COSのための解決策を見つけるのは簡単だ??どうすればこれらの関数を* pf []に保存できますか? (関数ポインタの配列)
任意の提案が役立ちます。
あなたは既にこの質問を数時間前に投稿しました。再投稿はここではうまくいきません。オリジナルを編集して再オープンを要求する必要があります(クローズした場合)。これは本当に良くないことに注意してください。あなたはコメントの中に情報を持っています、あなたは考えなかったようです。 [ask]を読んでください。私たちは家庭教師/コーディングサイトではありません。 – Olaf
@Olaf私の謝罪。私は次回よりうまくやるよ。ご指摘ありがとうございます。 –