clc; clear; syms y1 y2 a b c z a = 1; b = 0.75; c = 0.6; z = 450:0.01:550; y1 = (a-b)/(a-c); y2 = normcdf(z,500,50)-normcdf(0,500,50); %分布函数 plot([450,550],[y1,y1]) hold on; plot(z,y2); grid on; % 输出交点 fsolve(@(z) (a-b)/(a-c) - normcdf(z,500,50)-normcdf(0,500,50),[450 550])
function y=erfen(a,b) %二分法 if fun(a)*fun(b)<0 c=(a+b)/2; while abs(fun(c))>1.0e-4 % 二分分界点 if fun(a)*fun(c)<0 b=c; c=(a+b)/2; elseif fun(c)*fun(b)<0 a=c; c=(a+b)/2; end end y=c; elseif fun(a)==0 y=a; elseif fun(b)==0 y=b; else disp('区间中不存在根'); end return;
main.m
function main() clc; n = erfen(450,550) return;
fun.m
function y=fun(z) %方程 a = 1; b = 0.75; c = 0.6; y = (a-b)/(a-c) - normcdf(z,500,50) - normcdf(0,500,50); % 构造函数差,方便二分查找 return;