MATLAB用solve求得多个值后怎么存到数组中去?
完整程序如下:
clear; clc
Y=[63.1512, 63.4351, 63.9764, 64.0121, 64.1543, 64.4999, 64.5109, 64.7486, 64.9821, 65.1837; 157.6925, 158.5190, 158.4825, 159.6686, 157.8442, 160.8552, 157.6667, 160.0823, 160.5095, 157.3414];
X=Y';
x1=71.5376;
y1=153.4308;
z1=-55.8702;
l=0.422;
m=0.907;
n=-0.001;
r=9.5186;
for i=1:1:length(X(:,1))
s(i)=solve('((((X(i,2)-y1) *n-(z-z1)*m)^2+((z-z1)*l-(X(i,1)-x1)*n)^2+((X(i,1)-x1)*m-(X(i,2)-y1)*l)^2)/(l^2+m^2+n^2))-r^2','z');
eval(s(i));
end
出问题的代码是:
s(i)=solve('((((X(i,2)-y1) *n-(z-z1)*m)^2+((z-z1)*l-(X(i,1)-x1)*n)^2+((X(i,1)-x1)*m-(X(i,2)-y1)*l)^2)/(l^2+m^2+n^2))-r^2','z');
eval(s(i));
错误信息:
Error using mupadmex
Error in MuPAD command: Subscripted assignment dimension mismatch
Error in sym/subsasgn (line 1464)
C = mupadmex('symobj::subsasgn',A.s,B.s,inds{:});
Error in aaa (line 12)
s(i)=solve('((((X(i,2)-y1) *n-(z-z1)*m)^2+((z-z1)*l-(X(i,1)-x1)*n)^2+((X(i,1)-x1)*m-(X(i,2)-y1)*l)^2)/(l^2+m^2+n^2))-r^2','z');
我想实现的目标是将X中的所有值X(i,1)和X(i,2)都带入到方程中,因为方程中唯一的未知量就是z,这样就可以得到i个z的值,然后将所有的z值存入到s中,s应该是一个长度为 i 的数组,但每次都只能得到最后一个结果。请问如何修改?谢谢 返回小木虫查看更多
这里面好像吧z默认为符号变量了吧。所以没法存到数组中。我水平有限不会怎么改,抱歉了。
Y=[63.1512, 63.4351, 63.9764, 64.0121, 64.1543, 64.4999, 64.5109, 64.7486, 64.9821, 65.1837; 157.6925, 158.5190, 158.4825, 159.6686, 157.8442, 160.8552, 157.6667, 160.0823, 160.5095, 157.3414];
X=Y';
for i=1:1:length(X(:,1))
a=(solve('((((b-y1) *n-(z-z1)*m)^2+((z-z1)*l-(a-x1)*n)^2+((a-x1)*m-(b-y1)*l)^2)/(l^2+m^2+n^2))-r^2','z'));
x1=71.5376;
y1=153.4308;
z1=-55.8702;
l=0.422;
m=0.907;
n=-0.001;
r=9.5186;
a=X(i,1);
b=X(i,2);
s(i)=vpa(a);
end
可以出结果,可能程序认为你solve里面的是符号变量了。具体的你还得等大神来了。
不好意思上面的错了
Y=[63.1512, 63.4351, 63.9764, 64.0121, 64.1543, 64.4999, 64.5109, 64.7486, 64.9821, 65.1837; 157.6925, 158.5190, 158.4825, 159.6686, 157.8442, 160.8552, 157.6667, 160.0823, 160.5095, 157.3414];
X=Y';
x1=71.5376;
y1=153.4308;
z1=-55.8702;
l=0.422;
m=0.907;
n=-0.001;
r=9.5186;
for i=1:1:length(X(:,1))
a=solve('((((X(i,2)-y1) *n-(z-z1)*m)^2+((z-z1)*l-(X(i,1)-x1)*n)^2+((X(i,1)-x1)*m-(X(i,2)-y1)*l)^2)/(l^2+m^2+n^2))-r^2','z');
a=subs(a,{'X(i,1)','X(i,2)','x1','y1','z1','l','m','n','r'},{X(i,1),X(i,2),x1,y1,z1,l,m,n,r});
s(i,=vpa(a);
end
s
s =
[ -54.381784732826691955920341844733, -57.359267391366268542469747510602]
[ -55.169815524402521063596847332418, -56.572974208723091809225565972766]
[ -52.733759055029462075980108844115, -59.00942103816222235621208617297]
[ -54.770010205410372648968429756578, -56.975350005954690697342644694923]
[ -51.699864389343078585236955099073, -60.042308713372624749309004736073]
[ -55.541863255862267198185186394391, -56.206059272924126304494167165387]
[ -50.966543706497568396288870624019, -60.775608397010554078739975085901]
[ -52.66410479808197656129932778035, -59.082626466101370986657064704353]
[ -52.577971067093186070807473438686, -59.169731499925183409974072378171]
[ -49.897154662327539034009820331426, -61.844975206478619978725760894365]
哥们,上面的不是我想骗分。这个可以有结果了。。。因为开方所以每个数有两个值。还有就是变量的类型是符号变量,需要换成double,