简化的程序大致如下。应用的vpasolve函数,里面p和u是内层和外层循环,但是运行后只得到最后一次的结果。每一次循环得到的满足条件的解的个数不同,可能是1个,2个 等,那么如何把循环得到的所有结果放到一个矩阵或者将循环得到的相同个数解分别放在对应矩阵里呢(例如:3个解的跟3个解放在一个矩阵)
%目的是求出满足条件的x1,x2,x3
{syms x1 x2 x3
for p=0:1:50;
for u=0:1:5000;
A=(x2/(x2+1))*(3-x2/1000)*(1-x3/1000);
g=p/2+50*(x2/(x2+100));
D= p*23+40*(x2/(x2+2500));
eq1=A-p;
eq2=p*(u-x2)-x1*g;
eq3=x1*A-p*x3;
[x1,x2,x3]=vpasolve(eq1,eq2,eq3,[x1,x2,x3],[10 50;0 1000;0 1000])
end
end
}
matlab2016a
求大家指点
这样做,最后的T就是你需要的
%目的是求出满足条件的x1,x2,x3
syms x1 x2 x3
parr = 0:1:500;
uarr = 0:1:5000;
solveArr = zeros(numel(parr)*numel(uarr), 3);
ct = 0;
for p=parr
for u=uarr
A=(x2/(x2+1))*(3-x2/1000)*(1-x3/1000);
g=p/2+50*(x2/(x2+100));
D= p*23+40*(x2/(x2+2500));
eq1=A-p;
eq2=p*(u-x2)-x1*g;
eq3=x1*A-p*x3;
[x1s,x2s,x3s]=vpasolve(eq1,eq2,eq3,[x1,x2,x3],[10 50;0 1000;0 1000]);
ct = ct + 1;
solveArr(ct,:) = eval([x1s, x2s, x3s]);
end
end
T = array2table(solveArr, 'variablenames', {'x1','x2','x3'});
% 动态矩阵追加方式之一
A = [];
for ii = 1: 10
A = [A; rand(1,2)]; %每次追加一行
end
内层循环中用变量来储存x1等解的值,如:
X1(ii,jj) = x1; % ii为外层循环次数,jj为内层循环次数