㈠ 請問c語言中弦截法怎麼理解
先說方程的根,x^3-5x^2+16^x-80=0,左側看消森粗成一個關於x的函數f(x),因此求方程的根就是在求函數f(x)圖像與x軸交點(即f(x)=0時x的取值)
然後是斜截法,其思想就是 f(x)是一段弧線,用一段線段春敬代替它求得近似根,再以這個根作為線段的起點求一個更近似的根拿鎮。圖中第二步的那個公式是用解析的方法表示線段的根,如果這個你也看不懂建議跳過這段或者先學習數學解析幾何
再說最後那段代碼,((x-5)*x+16)*x-80在數學上與x^3-5x^2+16^x-80完全相等,這難道不是顯然的嗎?至於為什麼不寫成x^3的形式,是因為前者運算量更小,運算更快(不信自己拿紙筆算一算試試),順便一提,這個叫做秦九韶演算法,是多項式求值的最快演算法
㈡ c語言 弦截法求根
演算法沒有問題
問飢隱遲題出在精度上
float精度不足 導致計算到一定精度時進入浮點陷阱
把所有的float定義改為爛李double 輸入輸出對應用%lf 就攜喚可以得到正確結果了
㈢ c語言設計程序用弦截法求根
#include<math.h>
#include<stdio.h>
float f(float x)
{ //計算f(x)的值
return 2*x*x*x-4*x*x+3*x-6;
}
float point(float x1,float x2)
{
//計算與x軸交點的x值
return (x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
}
int main()
{
//輸入兩個數x1,x2
float x1,x2,x;
do
{
printf("輸入指首答兩個數x1,x2:");
scanf("%f%f",&x1,&x2);
}while (f(x1)*f(x2)>= 0); // 當輸入兩個數大於0為真時,繼續重新輸入
//關鍵循環步驟:
do
{
x=point(x1,x2);//得到交點的值
if(f(x)*f(x1)>0)
x1=x;//唯慧新的x1
else
x2=x;
}while (fabs(f(x)) > 0.0001); //0.0001為取值精度芹褲
printf("一個解為%f\n",x);
}
㈣ 用弦截法求解一元三次方程的根(利用c語言實現)
我只看了你的第二個
你定義的升塵f函數只有一個形參x,所以在main函數中輸入的你所認為的實參abcd 的值無法轉給f函數 所以運行時會敗擾出錯 只要賦給abcd確定的值或增加f函數的形參
scanf("%f,%f,%f,%f",&d,&d,&d,&d);這句也吵枯禪錯了應該是scanf("%f,%f,%f,%f",&a,&b,&c,&d);
㈤ C語言:用弦截法求方程的根,求兩點過x軸的解用y=(x1*f(x2)-x2*f(x1)) / (f(x2) - f(x1))怎麼算出來的啊
弦截法求方程的根是一種解方程得基本方法,在計算機編程中常用。他的思路是這樣的:任取兩個數,判斷這兩野行個數的函數值,如果函數值是同號猜腔,換兩個數再試,直到兩個數x1,x2對應的函數值為異號時為止,這時方程的解肯定在這兩個數x1,x2之間。連接這兩點所對應的函數值,連線與x軸的交點為新的x,若f(x)與f(x1)同號,則把x當作新的x1,將新的x1與x2連穗脊衫接,如此循環……如果f(x)與f(x1)異號,則把把x當作新的x2,將x1與新的x2連接,循環……
具體程序如下:
#include <math.h>
main()
{
float x1,x2,f1,f2,x;
do
{
printf("input x1,x2:\n");
scanf("%f,%f",&x1,&x2);
f1=f(x1);f2=f(x2);
}while(f1*f2>=0);
x=root(x1,x2);
printf("A root of equation is %8.4f\n",x);
}
float root(float x1, float x2)
{
int i;
float x,y,y1;
y1=f(x1);
do
{
x=xpoint(x1,x2);
y=f(x);
if(y*y1>0)
{
y1=y;
x1=x;
}else
x2=x;
}while(fabs(y)>=0.0001);
return (x);
}
float f(float x)
{
float y;
y=((x-5.0)*x+16)*x-80;
return (y);
}
float xpoint(float x1,float x2)
{
float y;
y=(x1*f(x2)-x2*f(x1)) / (f(x2) - f(x1));
return (y) ;
}
㈥ C語言 弦截法
scanf("%d,%d",&x1,&x2);
輸入語句中宴慧不要有分隔符號「,」,這樣可能會造成輸入數據時錯誤。
do
{
x=jiaodian(x1,x2,f1,f2);
y=f(x);
if(y*f1>=0)
{
f1=y;
x1=x;
}
else
{
f2=y;
x2=x;
}
while(fabs(y)>0.0001);
少了一個右大晌瞎答神尺括弧。循環體沒有封閉。