function [c,err,yc]=bisectmethod(fun,a,b,delta) % 二分法function [c,err,yc]= bisectmethod (fun,a,b,delta) %a为左区间,b为右区间,delta为区间误差限 %c求解的值,err误差,yc:c在f(x)处的值 ya=feval('fun',a); yb=feval('fun',b); if yb==0 c=b; return; end if(ya*yb)>0 disp('(a,b)不是有根区间'); return; end max1=1+round((log(b-a)-log(delta))/log(2)); for k=1:max1 c=(a+b)/2; yc=feval('fun',c); if yc==0 a=c; b=c; return; elseif(yb*yc)>0 b=c; yb=yc; else a=c; ya=yc; end if(b-a)<delta break; end end c=(a+b)/2; err=abs(b-a); yc=feval('fun',c); end
% 二分法function [c,err,yc]=bisectmethod(fun,a,b,delta) %a为左区间,b为右区间,delta为区间误差限 %c求解的值,err误差,yc:c在f(x)处的值 eps = 1e-4; [x0,err,y_x0]=bisectmethod(@fun,-2,-1,eps); disp(['方程组的解:x0= ']); disp(x0)
function [xc,k_cnt] = bisect(f,a,b,tol) % 二分法function [xc,k_cnt] = bisect(f,a,b,tol) %a为左区间,b为右区间,tol为区间误差限 %xc求解的值 if sign(f(a))*sign(f(b))>=0 error('f(a)f(b)eps x0=r; Fx = subs(F,transpose(symvar(F)),x0); dFx = subs(dF,transpose(symvar(F)),x0); r=vpa(x0-inv(dFx)*Fx'); tol=norm(r-x0) if(n>N) disp('迭代步数太多,可能不收敛!');break; end allx(:,n)=x0; ally(:,n)=Fx; n=n+1; end
function f = Multifun(x) % 只需要将fun.m文件中的 k更改为所需维数,文件中的方程替换为你自己所需的方程 % x(1)->x x(2)->y x(3)->z %{ f(1)=3*x(1)-cos(x(1)*x(2))-1/2; f(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06; f(3)= exp(-1*x(1)*x(2))+20*x(3)+(10*pi-3)/3; %} k=3; for i=1:k x(i)=sym (['x',num2str(i)]); end f(1)=3*x(1)-cos(x(1)*x(2))-1/2; f(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06; f(3)= exp(-1*x(1)*x(2))+20*x(3)+(10*pi-3)/3; end allx0 = [1,1,1]; [allx,ally,r,k_cnt]=MultiNewton(Multifun,allx0); disp(['迭代次数:k_cnt= ']); disp(k_cnt) disp(['方程组的解:allx= ']); disp(allx)
Copyright © 2023 leiyu.cn. All Rights Reserved. 磊宇云计算 版权所有 许可证编号:B1-20233142/B2-20230630 山东磊宇云计算有限公司 鲁ICP备2020045424号
磊宇云计算致力于以最 “绿色节能” 的方式,让每一位上云的客户成为全球绿色节能和降低碳排放的贡献者