用C++来解答一个复杂的方程
方程在最下面其中t=15.4,R=99.2,q=270,C=8434000。求r,要求用C++编写代码,我用循环递增求差的方法和二分法均算不出正确答案,求高手给出正确的代...
方程在最下面
其中t=15.4,R=99.2,q=270,C=8434000。求r,要求用C++编写代码,我用循环递增求差的方法和二分法均算不出正确答案,求高手给出正确的代码,最好能把我的代码给我纠正一下,不胜感激,正确答案是272
我自己写的代码如下
#include<iostream>
#include<cmath>
int main(void)
{
using namespace std;
float a , b , c , d , l1 , l2 , l3 , l4 , l5 , l6 , l7 , k;
b=0;
c=32547342;
while(fabs(c-b) >= 0.00001)
{
a = ( c + b ) / 2;
l1 = log10(a);
l2 = log10(2.718);
l3 = l1 / l2;
l4 = 99.2 * 99.2 + a * a ;
l5 = pow( l4 , 1.5 );
l6 = 270 * ( 1 - 0.058 * l3 ) * 99.2 * 99.2 * a / l5;
l7 = pow( l6 , 1.3333 );
d = l7 * 15.4;
k = 8434000 - d;
if( fabs( k ) <= 0.001 )
break;
if ( k >= 0 )
c = a;
else
b = a;
}
cout << a << endl
<< k << endl;
system("pause");
return 0;
} 展开
其中t=15.4,R=99.2,q=270,C=8434000。求r,要求用C++编写代码,我用循环递增求差的方法和二分法均算不出正确答案,求高手给出正确的代码,最好能把我的代码给我纠正一下,不胜感激,正确答案是272
我自己写的代码如下
#include<iostream>
#include<cmath>
int main(void)
{
using namespace std;
float a , b , c , d , l1 , l2 , l3 , l4 , l5 , l6 , l7 , k;
b=0;
c=32547342;
while(fabs(c-b) >= 0.00001)
{
a = ( c + b ) / 2;
l1 = log10(a);
l2 = log10(2.718);
l3 = l1 / l2;
l4 = 99.2 * 99.2 + a * a ;
l5 = pow( l4 , 1.5 );
l6 = 270 * ( 1 - 0.058 * l3 ) * 99.2 * 99.2 * a / l5;
l7 = pow( l6 , 1.3333 );
d = l7 * 15.4;
k = 8434000 - d;
if( fabs( k ) <= 0.001 )
break;
if ( k >= 0 )
c = a;
else
b = a;
}
cout << a << endl
<< k << endl;
system("pause");
return 0;
} 展开
3个回答
展开全部
#include<iostream>
#include<cmath>
int main(void)
{
using namespace std;
float a , b , c , d , l1 , l2 , l3 , l4 , l5 , l6 , l7 , k;
b=0;
c=32547342;
while(fabs(c-b) >= 0.00001)
{
a = ( c + d ) / 2; //d 没赋初始值
l1 = log10(a);
l2 = log10(2.718); //这一句最好拿到while 语句上面 ,这样代码速度会快一点
l3 = l1 / l2;
l4 = 99.2 * 99.2 + a * a ; //最好先将99.2算出来,这样代码执行速度会快一点
l5 = pow( l4 , 1.5 );
l6 = 270 * ( 1 - l3 ) * 99.2 * 99.2 * a / l5; //l3这里少*0.058
l7 = pow( l6 , 1.3333 );
d = l7 * 15.4;
k = 8434000 - d;
if( fabs( k ) <= 0.001 )
break;
if ( k >= 0 )
c = a;
else
b = a;
}
cout << a << endl
<< k << endl;
system("pause");
return 0;
}
a = ( c + d ) / 2; 从整个程序来看 a 在这里是公式里面的 r 但是这语句貌似 d 是公式里面C的接近值。这个对a的数值就有问题了。建议你改一下。回头找你聊。我现在有事
#include<cmath>
int main(void)
{
using namespace std;
float a , b , c , d , l1 , l2 , l3 , l4 , l5 , l6 , l7 , k;
b=0;
c=32547342;
while(fabs(c-b) >= 0.00001)
{
a = ( c + d ) / 2; //d 没赋初始值
l1 = log10(a);
l2 = log10(2.718); //这一句最好拿到while 语句上面 ,这样代码速度会快一点
l3 = l1 / l2;
l4 = 99.2 * 99.2 + a * a ; //最好先将99.2算出来,这样代码执行速度会快一点
l5 = pow( l4 , 1.5 );
l6 = 270 * ( 1 - l3 ) * 99.2 * 99.2 * a / l5; //l3这里少*0.058
l7 = pow( l6 , 1.3333 );
d = l7 * 15.4;
k = 8434000 - d;
if( fabs( k ) <= 0.001 )
break;
if ( k >= 0 )
c = a;
else
b = a;
}
cout << a << endl
<< k << endl;
system("pause");
return 0;
}
a = ( c + d ) / 2; 从整个程序来看 a 在这里是公式里面的 r 但是这语句貌似 d 是公式里面C的接近值。这个对a的数值就有问题了。建议你改一下。回头找你聊。我现在有事
更多追问追答
追问
不好意思啊,那个是b,我打错了
追答
你把我说的改动一下看看能不能得到答案
展开全部
题目很抽象。。。答案很浮云。。。
追问
稍等啊,我忘贴代码了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
程序是二分法求根,
我看每次区间是从b到c,那么最开始应该是
a = ( c + b ) / 2;
来二分吧?
d似乎没什么用。
另外建议所有的float都改为double,这样不丢失精度。
我看每次区间是从b到c,那么最开始应该是
a = ( c + b ) / 2;
来二分吧?
d似乎没什么用。
另外建议所有的float都改为double,这样不丢失精度。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询