本文目錄一覽:
C語言編程中,牛頓迭代法是什麼?
牛頓迭代法是一種常用的計算方法,這個大學大三應該學過。
具體為:設r是f(x) = 0的根,選取x0作為r初始近似值,過點(x0,f(x0))做曲線y = f(x)的切線L,L的方程為y = f(x0)+f'(x0)(x-x0),求出L與x軸交點的橫坐標 x1 = x0-f(x0)/f'(x0),稱x1為r的一次近似值。過點(x1,f(x1))做曲線y = f(x)的切線,並求該切線與x軸交點的橫坐標 x2 = x1-f(x1)/f'(x1),稱x2為r的二次近似值。重複以上過程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),稱為r的n+1次近似值,上式稱為牛頓迭代公式。
你把這段文字認真仔細慢慢讀一遍,把給的方程式寫出來,然後照這個在紙上畫出圖形,就會明白牛頓迭代法的概要了。
你講的xopint?root?float?這些都是自己定義的函數。float是c語言中定義浮點型變量的寫法。
#include iostream
#include math.h
void main()
{
float f(float);
float xpoint(float,float);
float root(float,float);
float x,x1,x2,f1,f2;
do
{
printf(“輸入x1,x2\n\n”);
scanf(“%f%f”,x1,x2);
f1=f(x1);
f2=f(x2);
}while(f1*f20);
x=root(x1,x2);
printf(“方程在1.5附近的根為:%f\n\n”,x);
}
float f(float x)//定義一個f函數,返回值y
{
float y;
y=2*x*x*x-4*x*x+3*x-6;
return(y);
}
float xpoint(float x1,float x2)//定義一個帶返回值的函數即y,也就是求y的函數,main()中調用
{
float y;
y=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return(y);
}
float root(float x1,float x2)//這也是定義一個函數,是求根的函數,利用了上面自己定義的函數
{
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y*y10)
{
y1=y;
x1=x;
}
else
x2=x;
}while(fabs(y)1e-4);
return(x);
}
建議你看看c 語言教程,上面講得很詳細噢。
C語言程序 牛頓迭代法
給你一點提示。
牛頓迭代法要計算
(1)
y1=f(x)
在
x
的函數值
(2)
d1=f(x)
的一階導數
在
x
的值
你可以寫兩個函數,分別計算y1,d1
如果一階導數有解析解,則可用賦值語句,否則要寫數值解子程序。
步驟:
設解的精度,例
float
eps=0.000001;
設x初值,x1;
算y1=f(x1);
迭代循環開始
算一階導數
在
x1
的值
d1
用牛頓公式
算出
x2;
[x2
=
x1
–
y1
/
d1]
如果
fabs(x2-x1)
eps
則從新迭代
—
用新的函數值和一階導數值推下一個
新x.
c語言 用牛頓迭代法求f(x);
#include “stdio.h”
#include “math.h”
main()
{float x,f,f1; //f代表 f(x)=2x^3-4x^2+5x-18,f1代表 f‘(x)=2*x^2-4*2x^+5 =6*x*x-8*x+5;
x=8; // x的初值可為任意值
do
{
f=2*x*x*x-4*x*x+5*x-18; //f(x)=2×3-4×2+5x-18
f1=6*x*x-8*x+5; //f(x)的導數: f‘(x)=2*3* x^2 – 4*2 *x+5 =6*x*x-8*x+5;
x=x-f/f1;
}while(fabs(f)0.00001);
printf(“x=%f,f=%f\n”,x,f);
}
c語言牛頓迭代法
#includestdio.h
#include math.h //包含這個頭文件,後面使用fabs
void main()
{
double x=1.5,y,y1;
do
{
y=2*x*x*x-4*x*x+3*x-6;
y1=6*x*x-8*x+3;
x=x-y/y1;
}
while(fabs(y/y1)1e-6);// 是y/y1,不是y
printf(“%f”,x);
}
給你個條理更加 清楚點的程序,你對比看看
#include stdio.h
#include math.h
int main()
{
double x1 = 1.5, x2;
do {
x2 = x1;
x1 = x2 – (2*x1*x1*x1-4*x1*x1+3*x1-6) / (6*x1*x1-8*x1+3);
} while(fabs(x1-x2) 1e-6);
printf(“%f”, x1);
}
求助用c語言描述牛頓迭代法
//c語言牛頓法求cosx-x=0
//牛頓法的迭代序列:x(n+1)=x(n)-f(x(n))/f(x(n))。
//f(x)=cosx-x;
//f'(x)=-sinx-1;
#includestdio.h
#include math.h
void main()
{
float x,x0,f,f1;
x0=0.5;
while(1)
{
f=cos(x0)-x0;
f1=-sin(x0)-1;
x=x0-f/f1;
if(fabs(x-x0)1e-5) break;
x0=x;
}
printf(“x=%f\n”,x); //x=0.7390851
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/182483.html