for k=1:length(y)
f=@(x)y(k)x-sin(x);
z(k)=fzero(f,x0(k));%调用fzero函数找零点
endsxf2012(站内联系TA)%%以y为一个数据为例,假设y值为y0,则令
%f=@(x)y0-sin(x)/x;%%用命令:%ezplot(f);
%%画图,观察函数,随便找零点附近的一个坐标x0
%% 则,要求的零点为
%z=fzero(f,x0);%调用fzero函数找零点
%比如y0=06,通过令
f=@(x)06-sin(x)/x;%画图ezplot(f)hold onplot(,,'r')
%观察知,零点在-2和2附近,用
z1=fzero(f,-2)
%计算得零点为x=-166
z2=fzero(f,2)
%计算得零点为x=166
这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函数来求得。但是问题是,y=1时x是一个值,但y=08是两个值,y=01就是许多值。
这是y=sinx/x的曲线图。我的情况是y的值是已知的,我需要把x的全部值求出来,即想通过反函数来求得。但是 在你画的区间上,函数不是单调的,所以其反函数不存在的,或者说是个多值函数。
数值的精度低,会有误差的。用字母的就好了。
例如下面解同样的精度数值是不一样的。对于字母的函数finverse用两次
会一样;数值的会有累计误差。
p=[1 0 -2 -5]
r=roots(p)
p =
1 0 -2 -5
r =
20946
-10473 + 11359i
-10473 - 11359i
syms x;
A=solve('x^3-2x-5')
vpa(A)
ans =
20945514815423265914823865405793
11359398890889281862454926290294i - 10472757407711632957411932702897
- 11359398890889281862454926290294i- 10472757407711632957411932702897
帮你编写了一个求正态分布的分布函数的反函数的程序,请保存成inversNormCDFm。基本思路是二分法求方程的解。
function x=inversNormCDF(y)
xup=-100;
xlow=100;
for i=1:100
xmiddle=(xup+xlow)/2;
if normcdf(xmiddle)>y
xlow=xmiddle;
elseif normcdf(xmiddle)<y
xup=xmiddle;
else
x=xmiddle;
return
end
end
x=(xup+xlow)/2;
保存好了以后,在matlab命令行里输入如下命令,可以得到你想要的结果。
x=inversNormCDF(06)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)