1.解x有虚数问题
解答:把x的初值取一点,取0.01,就不会出现虚数了:
function zyxzy
clear all;clc
format long
x0=0.01;
options=optimset('Display','iter'); %创建options结构变量,其中display的值为iter,
[x,fval]=fsolve(@myfun,x0,options)
function f=myfun(x)
r1=0.001;
rn=0.02;
Ec=4653000;
E0=8.85e-12;
U=25000;
k1=sqrt(r1*Ec*x/E0);
k2=sqrt(r1*Ec*E0/x);
k3=sqrt(k2^2-r1^2);
f1=sqrt(rn^2+k2^2-r1^2);
f=U-k1*(f1-k2+k3*(log(rn/r1)+log(k2+k3)-log(k3+f1)));
结果:
Norm of First-order Trust-region
Iteration Func-count f(x) step optimality radius
0 2 4.59128e+008 4.26e+010 1
1 3 4.59128e+008 0.0107764 4.26e+010 1
2 5 2.462e+008 0.0026941 3.6e+010 0.00269
3 7 4.3381e+007 0.00673525 4.09e+010 0.00674
4 9 1.46051e+006 0.00106182 5.2e+009 0.00674
5 11 1394.16 0.000280992 1.51e+008 0.00674
6 13 0.00124421 9.23407e-006 1.42e+005 0.00674
7 15 4.93763e-016 8.73987e-009 0.0897 0.00674
8 17 0 5.50577e-015 0 0.00674
Equation solved.
fsolve completed because the vector of function values is near zero
as measured by the default value of the function tolerance, and
the problem appears regular as measured by the gradient.
<stopping criteria details>
x =
0.001922707332546
fval =
0
2.把p0=0.0019,代回原方程,phi=91.8586的问题
解答:请注意你构建的myfun函数中出现了1e-12级别的极小数E0,如果p0取0.0019,仅有0.0001的精度,这样的精度与E0想乘除以后,误差会被剧烈放大,所以phi=91.8586
如果你代入x =
0.001922707332546
就会发现结果为:1.469743438065052e-009,已经非常接近于0了,