1樓:匿名使用者
弦截法這個方法一般用作學習,實際用的很少。這裡我提供乙個較完整的弦截法求根的函式。function root=secant(f,a,b,eps)
if(nargin==3)
eps=;endf1=subs(sym(f),findsym(sym(f)),a);
f2=subs(sym(f),findsym(sym(f)),b);
if(f1==0)
root=a;
endif(f2==0)
root=b;
endif(f1*f2>0)
disp('兩端點函式值乘積大於0!')
return;
elsetol=1;
fa=subs(sym(f),findsym(sym(f)),a);
fb=subs(sym(f),findsym(sym(f)),b);
root=a-(b-a)*fa/(fb-fa);
while(tol>eps)
r1=root;
fx=subs(sym(f),findsym(sym(f)),r1);
s=fx*fa;
if(s==0)
root=r1;
elseif(s>0)
root=b-(r1-b)*fb/(fx-fb);
elseroot=a-(r1-a)*fa/(fx-fa);
endend
tol=abs(root-r1);
endend
對於本題,輸入:>>y=secant(''5)結果:y =
2樓:匿名使用者
我用你的函式去寫**,一直出錯,然後我換了乙個函式就能執行出來了》 syms x y
>> f=sym('x^2-y=0');
>> x=linspace(0,5);>solve(f,x)
用弦截法求方程f(x)=x^3-5x^2+16x-80=0的根.具體問題是要用變數要素圖,畫出引數的傳遞過程和結果。
3樓:大汽張國樑
//弦截法求x*x*x-5*x*x+16*x-80=0的根。
求x^3-5x^2+16x-80的值:
#include
#include
float f(float x)
float point(float x1,float x2)
void main()
while (f(x1)*f(x2) >0); 當輸入兩個數大於0為真時,繼續重新輸入。
//關鍵迴圈步驟:
dowhile (fabs(f(x)) 為取值精度。
printf("乙個解為%f",x);
}本段matlab**。
定義函式。function y=f(t)
y=f(t); 函式f(t)的表示式。
主程式i=0; %迭代此處記數。
t1=t1; %迭代初值t1
t2=t2; %迭代初值t2
while i<=100;
y=t2-f(t2)/(f(t2)-f(t1))*t2-t1); 弦截法迭代格式。
if abs(y-t2)>10^(-6); 收斂判據。
t1=t2;
t2=yelse break
endi=i+1;
endfprintf('%s%.6f\t%s%d%',泡點溫度t=',y,'迭代次數i=',i)%輸出結果。
開放分類:演算法程式設計。
matlab程式設計求方程根 5
4樓:甫皖然
網路上面就有**,自己動手搜尋一下拿來就可以直接用……
再說自己編也挺簡單的……
求用matlab編制方程求根的二分法和newton法的 matlab 程式!!!謝謝~
c語言弦截法求方程的根,實在是不知道錯哪了,求看看
5樓:匿名使用者
fabs(f(xp))>
精度太高算不出來,把改為就可以了,或者把程式中所有的float改為double也行。
弦截法的數學原理是什麼!!看了C語言裡的例子,我實在不能理解?謝謝
你知道乙個方程的根的大致範圍 a,b 要求得更加確切的根。1 你在 a,b 之間找乙個數 c。2 如果你認為 數 c 已經足夠作為方程的根了 一般是精度夠了 那就找到了方程的根,退出。3 否則,用找到的數字 c 分割區間 a,b 於是有兩個新的範圍 a,c c,b 你進一步判斷方程的根是在 a,c ...
用matlab做牛頓迭代法,用matlab如何編寫牛頓迭代法問題,謝謝
sky不用太多 function a cal a,b,v a,b表示區間,v是精度 i 1 x a b 2 a i x t x x 3 x 1 3 x 2 1 迭代函式 while abs t x v i i 1 x t a a i x t x x 3 x 1 3 x 2 1 迭代函式 enda a...
迭代法,二分法,牛頓迭代法,弦截法的演算法設計思想
炫心吾動之夜愛 1 迭代法設計思想最簡單 x f x 但這種方法初值很主要,不然容易發散。2 二分法設計思想是先給定區間 a,b 要求f a 與f b 是異號,保證區間內與x軸有交點,求x a b 2,求f x 檢查f x 與f a 是否同號,如果是同號,把x當成新的a,否則把x當成新的b,得到新的...