if(nargin==3)
eps=1.0e-4
end
f1=subs(sym(f),findsym(sym(f)),a)
f2=subs(sym(f),findsym(sym(f)),b)
if(f1==0)
root=a
end
if(f2==0)
root=b
end
if(f1*f2>0)
disp('两端点函数值乘积大于0!')
return
else
root=FindRoots(f,a,b,eps)
end
function r=FindRoots(f,a,b,eps)
f_1=subs(sym(f),findsym(sym(f)),a)
f_2=subs(sym(f),findsym(sym(f)),b)
mf=subs(sym(f),findsym(sym(f)),(a+b)/2)
if(f_1*mf>0)
t=(a+b)/首升粗2
r=FindRoots(f,t,b,eps)
else
if(f_1*mf==0)
r=(a+b)/2
else
if(abs(b-a)<=eps)
r=(b+3*a)/4
else
s=(a+b)/2
r=FindRoots(f,a,s,eps)
end
end
end
这个程序是笑颤二分法者镇的,
matlab只支持离散数字,但是明神不支持连续的,可以直接表示为矩阵,参陵猛考如下:尺槐桥x=[0.5 3.5 4.510.5 6.5 7.5]
low=x(1,:)
up=x(2,:)
matlab的区间是不能写在迅羡一起的,要用&或|将两个区间合为一个,所以把你的代码改为下亩如拍面的即可:if 0.52<t&t<0.555
n=3,T_0=t/橡丛(2.16*n)
elseif 0.555<t&t<0.60
n=4,T_0=t/(2.16*n)
elseif 0.60<t&t<0.635
n=5,T_0=t/(2.16*n)
else disp('系统阶次大于5')
end
你可以试试,应该没啥问题了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)