用C语言编程二分法求解方程组 50

求解的方程组为Ax^m+Bx^n=1,其中A,B为自己在程序中输入的常数(整数或者小数、分数)。x的幂m,n为自己在程序中输入的常数(整数或者小数、分数)且m,n均小于2... 求解的方程组为Ax^m+Bx^n=1,其中A,B为自己在程序中输入的常数(整数或者小数、分数)。x的幂m,n为自己在程序中输入的常数(整数或者小数、分数)且m,n均小于2,求解x的值。用二分法编程,多谢高手帮忙啦! 展开
 我来答
fdxuwei
2011-10-27 · TA获得超过271个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:286万
展开全部
#include<stdio.h>
#include<math.h>

#define EQUATION(A, B, m, n, x) (A*pow(x, m) + B*pow(x, n) - 1)/* 定义方程*/

double A, B, m, n;/*方程参数*/

void find_extent(double *x1, double *x2)/*找出根所在的区间*/
{
double i = 0, j = 0;
*x1 = 0;
if(EQUATION(A, B, m, n, 0) > 0)
{
while(EQUATION(A, B, m, n, ++i) > 0 && EQUATION(A, B, m, n, --j) > 0);
*x2 = EQUATION(A, B, m, n, i) <= 0 ? i : j;
}
else
{
while(EQUATION(A, B, m, n, ++i) < 0 && EQUATION(A, B, m, n, --j) < 0);
*x2 = EQUATION(A, B, m, n, i) >= 0 ? i : j;
}
}

/*二分法解方程*/
/*输入参数:根所在区间[x1, x2], 和精度*/
double get_result(double x1, double x2, double accuracy)
{
double x = (x1 + x2) / 2;
while(fabs(EQUATION(A, B, m, n, x)) > accuracy)
{
if(EQUATION(A, B, m, n, x) * EQUATION(A, B, m, n, x1) > 0)
x1 = x;
else
x2= x;
x = (x1 + x2)/2;
}
return x;
}

int main()
{
double x;
double x1,x2;
scanf("%lf%lf%lf%lf", &A, &B, &m, &n);
find_extent(&x1, &x2);
x = get_result(x1, x2, 0.00001);
printf("%lf", x);
return 0;
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鷹弈
2011-10-28 · TA获得超过5194个赞
知道大有可为答主
回答量:1257
采纳率:0%
帮助的人:741万
展开全部
#include <stdio.h>
#include <math.h>

#define FUNCTION(x, A, B, m, n) (A*pow(x, m) + B*pow(x, n) - 1)
#define MAXSIZE 100

double A[MAXSIZE], B[MAXSIZE];
double m[MAXSIZE], n[MAXSIZE];

double esp = 1e-4;//误差控制

void process(double x1, double x2, double A, double B, double m, double n)
{
int flag = 1;
double x0;

do
{
x0 = (x1 + x2)/2;

if ((0 < FUNCTION(x1, A, B, m, n)) && (0 < FUNCTION(x2, A, B, m, n)) && (0 < FUNCTION(x0, A, B, m, n)))
{
flag = 0;
break;
}
if((0 > FUNCTION(x1, A, B, m, n)) && (0 > FUNCTION(x2, A, B, m, n)) && (0 > FUNCTION(x0, A, B, m, n)))
{
flag = 0;
break;
}

if (0 > FUNCTION(x0, A, B, m, n)*FUNCTION(x1, A, B, m, n))
{
x2 = x0;
}
else
{
x1 = x0;
}

} while (esp <= fabs(FUNCTION(x0, A, B, m, n)));

if (1 == flag)
{
printf("The root is %.4lf\n",x0);
}
}

int main(void)
{
int i;
double j;

for (i=0; i<MAXSIZE; i++)
{
printf("input A and B:\n");
scanf("%lf%lf", &A[i], &B[i]);

printf("input m and n:\n");
scanf("%lf%lf", &m[i], &n[i]);

for (j=-10; j<10; j+=esp)
{
process(j, j+esp, A[i], B[i], m[i], n[i]);
}
printf("\n\n");
}

return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yuhlavgno
2011-10-29
知道答主
回答量:26
采纳率:0%
帮助的人:16万
展开全部
#include
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wudizhongguofe
2011-10-27
知道答主
回答量:21
采纳率:0%
帮助的人:27.5万
展开全部
什么样的方程组啊。
更多追问追答
追问
A,Bm,n都是需要在程序中输入的。我知道这个题目很难。。。多谢高手了!
追答
今天要下班了,明天来帮你解吧。。。最好举个方程的例子,我看看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式