
用迭代法求
x*sin(x)=1的解
及其
x^41+x^3+1=0 在 -1 附近的根
我用了 xn+1 = xn - f(xn)/f'(xn)的公式
這段是x*sin(x)=1的代碼
# include <stdio.h>
# include <math.h>
# define eps 1e-6
int main(void)
{
float x0, x1;
x0 = 2.0;
x1 = (1 + x0*x0*cos(x0)) / (sin(x0) + x0*cos(x0));
do
{
x0 = x1;
x1 = (1 + x0*x0*cos(x0)) / (sin(x0) + x0*cos(x0));
}while(fabs(x0 - x1) > eps);
printf("%f", x1);
return 0;
}
結果是 1.114157 帶回方程不成立
而且當初值是2的時候 結果是 -9.317243, 帶回方程也不成立
每次初值改變結果都改變了?
這段是x^41+x^3+1=0的代碼
# include <stdio.h>
# include <math.h>
# define eps 1e-6
int main(void)
{
float x0, x1;
x0 = 2.0;
x1= x0 - ((pow(x0, 41) + pow(x0, 3) + 1) / (pow(x0, 40) + 3*pow(x0, 2)));
do
{
x0 = x1;
x1= x0 - ((pow(x0, 41) + pow(x0, 3) + 1) / (pow(x0, 40) + 3*pow(x0, 2)));
}while (fabs(x1 - (-1)) > eps);
printf("%f\n", x1);
return 0;
}
結果是 -1.#IND00 據說是 0 作為除數了??
請教大家了!!!!萬分感謝!!!
uj5u.com熱心網友回復:
僅供參考://用C語言編程,求出2^x=x^10這個方程的解。
#include <math.h>
#include <stdio.h>
double x,e;
void main () {
x=-1.0;
e=0.001;
while (1) {
while (1) {
if (pow(2.0,x)<pow(x,10.0)) {
x+=e;
} else {
break;
}
}
e/=10.0;
if (e<1e-15) break;
while (1) {
if (pow(2.0,x)>pow(x,10.0)) {
x-=e;
} else {
break;
}
}
e/=10.0;
if (e<1e-15) break;
}
printf("%+.14g\n",x);
x=1.0;
e=0.001;
while (1) {
while (1) {
if (pow(2.0,x)>pow(x,10.0)) {
x+=e;
} else {
break;
}
}
e/=10.0;
if (e<1e-15) break;
while (1) {
if (pow(2.0,x)<pow(x,10.0)) {
x-=e;
} else {
break;
}
}
e/=10.0;
if (e<1e-15) break;
}
printf("%+.14g\n",x);
}
uj5u.com熱心網友回復:
這個方程有無數個解,你可以畫出影像看一下,牛頓迭代法依賴于初值,初值不同,收斂區間不同也就導致收斂得到的結果不同,上面1.114157和-9.317243是對的,應該是你帶回去的時候弧度和角度沒進行轉換。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/108765.html
標籤:C語言
上一篇:Dev-C++無法除錯出來
下一篇:堆疊 關于十進制轉換八進制整數
