首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

委实做不出来,题目很简洁,大神求围观

2013-09-23 
实在做不出来,题目很简洁,大神求围观!x+x^2+x^3+x^4+x^5+x^6+x^7+x^8+x^9+x^10+x^11+x^1297.8求x的值。给

实在做不出来,题目很简洁,大神求围观!
x+x^2+x^3+x^4+x^5+x^6+x^7+x^8+x^9+x^10+x^11+x^12=97.8
求x的值。
给出我考虑的两种做法:
1.等比数列,Sn=[a1*(1-q^n)]/(1-q) 带入得 r*(1-r^12)/1-r=97.8
2.确定x值得范围,依次缩小,二分法,速率也算比较快,就不知道可行不? 比ACM简单的多? A不出来 算法
[解决办法]
等比求和公式
(1-x^(n+1))/(1-x)

(1-x^(12+1))/(1-x) - 1 = 97.8
(1-x^13)/(1-x) = 98.8
x不等于1的时候
1-x^13 = 98.8-98.8x
97.8-98.8x+x^13=0;

这个二分法吧


#include<iostream>
#include<stdlib.h>
#include<math.h>

using namespace std;

// 98.8x-x^13=97.8


int main(){
double min=-100;
double max=100;
double center = (min+max)/2;
double result=0;

while(fabs(result - 97.8)>1e-6){

if( (result = (98.8*center - pow(center,13.0))) < 97.8){
max = center;
center = (min+max)/2;
}
else
{
min = center;
center = (min+max)/2;
}

}

cout<<center<<endl;

//验算结果
double x = -1.52862;

double  sum =0;

for(int i=1;i<13;i++){
sum+= pow(x,i);
}
cout<<sum;


}

[解决办法]
引用:
引用
w233052085

感谢二楼给出实现的二分法,得出的结果与理论结果相差甚微,基本上可以了,就是不知道会不会是有多个根,我觉得应该不止一个解吧?

一个正根一个负根其他都是复根
[解决办法]
引用:
Quote: 引用:

引用
w233052085

感谢二楼给出实现的二分法,得出的结果与理论结果相差甚微,基本上可以了,就是不知道会不会是有多个根,我觉得应该不止一个解吧?

一个正根一个负根其他都是复根


悲剧了  作为数学毕业的  干了程序猿后 连这个我都忘记了委实做不出来,题目很简洁,大神求围观
[解决办法]
这种问题应该用牛顿迭代法求解的

热点排行