急!!!Matlab中报错:Undefined function or variable 'a'.!该怎么办?

>> 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,b,c和p都没有先定义,你是在后面才给的。所以把a=....., b=......., c=.......先放到p=.......的上边。但是这还不够,你的程序还有个问题,就是a=.....和p=.....中都还有p,而这个p是未知的。所以这个程序要大改才行追问

您好!谢谢您的回答!因为我也是第一次作这样的计算,所以一下方寸大乱了,具体可以怎么改您可以不可以详细建议一下呢?感激涕零啊。。。

追答

有个很难处理的地方,就是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最近一直运行程序,所以不能帮你试到底怎么回事。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-05
程序中a这个变量没赋值!
请在”u=0.1;“下面写上a=某值,具体a等于什么这个就只有你自己知道了....
查看下你这个算法,看看a是个什么值,再写上去就可以。追问

您好!感谢您的回答,但是我的a值是跟P值有关的呀?

相似回答