嗨,我正在做一些程序來尋找不同的正弦函數的解決方案。 我想SIN(2×),罪(4次),SIN(6×),...,SIN(12倍),並把它們存儲到陣列,這樣我可以測試每個函數的給定間隔的解決方案。如何把正弦函數中的多項式? (重新)
這裏的代碼...
#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
平分功能是其主要功能如下。 x0是起點,xf是終點,我設置檢查錯誤的容差。平分函數在for循環中使用中間值定理。
我想通過調用函數開張for循環中,並提供使用* 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次)等爲正弦,餘弦等解決方案,但什麼?我如何將這些函數存儲在* pf []? (函數指針陣列)
任何建議將是有益的。
你已經在幾個小時前發佈了這個問題。這裏重新發布的帖子並不好。您應該編輯原稿並要求重新打開(如果已關閉)。請注意,這個不是更好。你在評論中得到了信息,你似乎沒有想過。閱讀[問]。我們不是一個輔導/編碼網站。 – Olaf
@Olaf我的道歉。下次我會做得更好。感謝您的建議。 –