>> x=0:0.5:14;
u=0.1;
p=u./[1+10.^(1.23-x)+10.^(5.42-2.*x)+10^7.21.*a+2.*10^11.5.*a.*p+3.*10^17.*a.*p.^2+10^2.7.*b+2.*10^4.52.*b.*p+3.*10^5.22.*b.*p.^2+10^9.4.*c+2.*10^16.2.*c.*p+3.*10^20.2.*c.*p.^2]
a=min(sqrt(10^19./(p.^3)),10.^(20.5-3.*x));
b=10.^(11.69-2.*x);
c=10.^(3.45-3.*x);
j=a.*[1+10^7.21.*p+10^11.5.*p.^2+10^17.*p.^3+10.^(x-8.5)];
g=b.*[1+10^2.9.*p+10^4.52.*p.^2+10^5.22.*p.^3+10.^(x-8.44)+10.^(2*x-18.23)+10.^(3*x-32.33)+10.^(4*x-47.72)];
h=c.*[1+10^9.4.*p+10^16.2.*p.^2+10^20.2.*p.^3+10.^(x-2.13)+10.^(2*x-6.83)+10.^(3*x-12.33)];
y=log10(j);
m=log10(g);
n=log10(h);
plot(x,y,x,m,x,n)
请各位大虾帮忙解释一下该怎么改呢?
您好!谢谢您的回答!因为我也是第一次作这样的计算,所以一下方寸大乱了,具体可以怎么改您可以不可以详细建议一下呢?感激涕零啊。。。
追答有个很难处理的地方,就是p=.........和a=..........。这两个函数是相互决定的,形成了一个二维非线性方程组。所以如果求不出a和p,就没办法得到结果。就你提供的程序,我其实一下子也不知道如何解决这个问题,因为这的确不是个简单的问题,至少不是几步简单的程序就能解决的。你应该回到原问题在思考一下,到底有什么办法可以避免这样较复杂的二维非线性方程组的出现。
追问p=u./[1+10.^(x-4.754)+b.*(10^1.4+2*10^2.2.*p+4*10^3.74.*p.^3)+w.*(10^2.11+2*10^3.74.*p+3*10^4.99.*p.^2+4*10^5.55.*p.^3+5*10^5.73.*p.^4+6*10^5.11.*p.^5)];为什么还是不行
追答在你的p没有被赋值之前,这个式子都不会被执行。还有个难点就是a不是个常规函数,是个逻辑函数,所以再和p的式子结合形成的非线性组就更难解。
要不你先试试在一个x值并且a取10.^(20.5-3.*x)时能不能求p:
x=5;
u=0.1;
a=10.^(20.5-3.*x);
b=10.^(11.69-2.*x);
c=10.^(3.45-3.*x);
syms p
Fp=u./[1+10.^(1.23-x)+10.^(5.42-2.*x)+10^7.21.*a+2.*10^11.5.*a.*p+3.*10^17.*a.*p.^2+10^2.7.*b+2.*10^4.52.*b.*p+3.*10^5.22.*b.*p.^2+10^9.4.*c+2.*10^16.2.*c.*p+3.*10^20.2.*c.*p.^2]-p;
S=solve(Fp);
pnew=zeros(1,length(S));
for i=1:length(S)
pnew(i)=isreal(S.i)*S.i;
end
% 这里只限制p是实数。如果要求p是正数,则在for loop之后加个
% pnew=(pnew>0)*pnew;
如果可以,你看看a的值是不是小于所有的sqrt(10^19./(pnew.^3)) (要用非零pnew值),如果是,那么这组a和p就是一组解。如果不是调用下面的
x=5;
u=0.1;
b=10.^(11.69-2.*x);
c=10.^(3.45-3.*x);
syms p
a=sqrt(10^19./(p.^3));
Fp=u./[1+10.^(1.23-x)+10.^(5.42-2.*x)+10^7.21.*a+2.*10^11.5.*a.*p+3.*10^17.*a.*p.^2+10^2.7.*b+2.*10^4.52.*b.*p+3.*10^5.22.*b.*p.^2+10^9.4.*c+2.*10^16.2.*c.*p+3.*10^20.2.*c.*p.^2]-p;
S=solve(Fp);
pnew=zeros(1,length(S));
for i=1:length(S)
pnew(i)=isreal(S.i)*S.i;
end
这组求出来的a和p就是满足条件的一组解。
" Access to an object's fields is only permitted within its methods."弹出一个这样对话框!该怎么办呢?
追答哪一行出现的问题?我估计可能是有些情况下根本没有a和p的解,所以S.i就是个空矩阵,所以在调用pnew(i)=isreal(S.i)*S.i的时候就会出错。我的matlab最近一直运行程序,所以不能帮你试到底怎么回事。
您好!感谢您的回答,但是我的a值是跟P值有关的呀?