求助 51单片机 C语言 就非线性方程出现的问题
时间:10-02
整理:3721RD
点击:
float F(float s,float X)
{
return (s/(1-exp(-(X*0.39*0.6*2.1/1000000)/0.133))-X);//所要求的方程
}
void main(void)
{
int i;
float Cp;
float y;
float C=43821; //这个变量是根据需要调整的
LCD_Initial();
while(1)
{
Cp=0;
for(i=1;i<=9;i++) //十万位
{
y=F(C,Cp+i*100000)*F(C,Cp+(i+1)*100000);
if(y<=0)
{
Cp+=i*100000;
break;
}
}
for(i=0;i<=9;i++) //万位出问题?
{
y=F(C,Cp+i*10000)*F(C,Cp+(i+1)*10000);
if(y<=0)
{
Cp+=i*10000;
break;
}
}
for(i=0;i<=9;i++) //千位
{
y=F(C,Cp+i*1000)*F(C,Cp+(i+1)*1000);
if(y<=0)
{
Cp+=i*1000;
break;
}
}
for(i=0;i<=9;i++) //百位
{
y=F(C,Cp+i*100)*F(C,Cp+(i+1)*100);
if(y<=0)
{
Cp+=i*100;
break;
}
}
for(i=0;i<=9;i++) //十位
{
y=F(C,Cp+i*10)*F(C,Cp+(i+1)*10);
if(y<=0)
{
Cp+=i*10;
break;
}
}
for(i=0;i<=9;i++) //个位
{
y=F(C,Cp+i)*F(C,Cp+i+1);
if(y<=0)
{
Cp+=i;
break;
}
}
zhuanhuan(Cp);//液晶显示*F(8000000)
GotoXY(0,0);
str[15]='\0';
Print(str);
delay_n10us(80000);
}
}
{
return (s/(1-exp(-(X*0.39*0.6*2.1/1000000)/0.133))-X);//所要求的方程
}
void main(void)
{
int i;
float Cp;
float y;
float C=43821; //这个变量是根据需要调整的
LCD_Initial();
while(1)
{
Cp=0;
for(i=1;i<=9;i++) //十万位
{
y=F(C,Cp+i*100000)*F(C,Cp+(i+1)*100000);
if(y<=0)
{
Cp+=i*100000;
break;
}
}
for(i=0;i<=9;i++) //万位出问题?
{
y=F(C,Cp+i*10000)*F(C,Cp+(i+1)*10000);
if(y<=0)
{
Cp+=i*10000;
break;
}
}
for(i=0;i<=9;i++) //千位
{
y=F(C,Cp+i*1000)*F(C,Cp+(i+1)*1000);
if(y<=0)
{
Cp+=i*1000;
break;
}
}
for(i=0;i<=9;i++) //百位
{
y=F(C,Cp+i*100)*F(C,Cp+(i+1)*100);
if(y<=0)
{
Cp+=i*100;
break;
}
}
for(i=0;i<=9;i++) //十位
{
y=F(C,Cp+i*10)*F(C,Cp+(i+1)*10);
if(y<=0)
{
Cp+=i*10;
break;
}
}
for(i=0;i<=9;i++) //个位
{
y=F(C,Cp+i)*F(C,Cp+i+1);
if(y<=0)
{
Cp+=i;
break;
}
}
zhuanhuan(Cp);//液晶显示*F(8000000)
GotoXY(0,0);
str[15]='\0';
Print(str);
delay_n10us(80000);
}
}
程序在万为寻根的时候 出现问题 得到的答案为100000,
改变变量C 会有不懂的根Cp, 当Cp<13000时就能得到正确答案,当Cp>13000时, 结果出错;不论C是多少 结果都是100000,
求大神帮忙啊!