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、运行结果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)