matlab编程,用双点弦截法求x^3-3x-1=0在x0=2附近的根,要求准确到四位有效数字

matlab编程,用双点弦截法求x^3-3x-1=0在x0=2附近的根,要求准确到四位有效数字,第1张

第一个m文件:

function

y=f(t)

y=t^3-3*t-1

写好第一个m文件并保存成bangf后,再写下面的m文件,其中双点初值分别取为1和2:

i=0

%迭代此处记数

t1=1

%迭代初值t1

t2=2

%迭代初值t2

while

i<=100

y=t2-bangf(t2)/(bangf(t2)-bangf(t1))*(t2-t1)%弦截法迭代格式

if

abs(y-t2)>10^(-6)

%收敛判据

t1=t2

t2=y

else

break

end

i=i+1

end

fprintf('\n%s%.6f\t\t%s%d%','待求根x=',y,'迭代次数i=',i)

%输出结果

点运行后(run)后,结果显示:

待求根x=1.879385

迭代次数i=5>>

准确解是1.87938524

参考资料里面的matlab代码部分就是由我编辑的。

由于y=0是一个没有意义的点,故从0.01开始。

输入:y=secant('0.15/y-y*sin(0.15^y)-1',0.01,5)

结果:y=0.

其中secant.m

内容为:functionroot=Secant(f,a,b,eps)

if(nargin==3)eps=1.0e-6

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*f20)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(toleps)r1=root

fx=subs(sym(f),findsym(sym(f)),r1)

s=fx*fa

if(s==0)root=r1

elseif(s0)root=b-(r1-b)*fb/(fx-fb)

elseroot=a-(r1

扩展资料

MATLAB软件函数及符号运算

倒数关系

tanα·cotα=1,sinα·cscα=1,cosα·secα=1

商数关系

tanα=sinα/cosα,cotα=cosα/sinα

平方关系

sinα²+cosα²=1,1+tanα²=secα²,1+cotα²=cscα²

函数形式

正弦:sin();余弦:cos();正切:tan();余切:cot();正割:sec();余割:csc();本行括号内的输入参数为实数

正弦:sind();余弦:cosd();正切:tand();余切:cotd();正割:secd();余割:cscd();本行括号内的输入参数为角度

Demo

题主给出方程可以使用数值分析的方法来解决。由于该方程是一个比较特殊的方程,应考虑合适的数值方法(如弦截法),分析该方程求和式,可以发现x在100-1000之间有最大值,其值 x=732.79727,y = -5.55e-16。

实现思路:

1、自定义f(x)函数,其内容①利用symsum函数求Σ值;②利用eval函数计算f(x)值

2、自定义secant弦截法函数,根据弦截法的迭代公式编写。

3、运行主代码

x0=100.5x1=1205tol=1e-4%tol误差

x=secant(x0,x1,tol)

y=fun(x) %验证y是否等于0

4、运行结果


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/yw/11948800.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存