当前位置: 首页 > 计算模拟 >MATLAB用solve求得多个值后怎么存到数组中去?

MATLAB用solve求得多个值后怎么存到数组中去?

作者 qdlifeng
来源: 小木虫 200 4 举报帖子
+关注

完整程序如下:
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 的数组,但每次都只能得到最后一个结果。请问如何修改?谢谢 返回小木虫查看更多

今日热帖
  • 精华评论
  • lv123520

    这里面好像吧z默认为符号变量了吧。所以没法存到数组中。我水平有限不会怎么改,抱歉了。

  • lv123520

    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里面的是符号变量了。具体的你还得等大神来了。

  • lv123520

    不好意思上面的错了

  • lv123520

    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,

猜你喜欢
下载小木虫APP
与700万科研达人随时交流
  • 二维码
  • IOS
  • 安卓