0

私はmatlabで方程式を解きたいです。

100+a/2=173*cos(b) 

sqrt(3)*a/2=173*sin(b)

コードは次のようになります。

[a,b]=solve('100+a/2=173*cos(b)','sqrt(3)*a/2=173*sin(b)','a','b')

ただし、100 を変数として取りたい場合は、次のようにします。

for k=1:100

  [a,b]=solve('k+a/2=173*cos(b)','sqrt(3)*a/2=173*sin(b)','a','b')

end

エラーになるのですが、どうすればいいですか?

degree=140/1000000;
p=42164000;
a=6378136.5;
b=6356751.8;
x_1=0;
y_1=p;
z_1=0;

for i=451:550
    for j=451:550
    alpha=(1145-i)*degree;
    beta=(1145-j)*degree;

    x_2=p/cos(alpha)*tan(beta);
    y_2=0;
    z_2=p*tan(alpha);

    syms x y z x_1 x_2 y_1 y_2 z_1 z_2 a b
    eq = [(x-x_1)*(y2-y_1)-(x_2-x_1)*(y-y_1),(x-x_1)*(z_2-z_1)-(x_2-x_1)*(z-z_1), b^2*(x^2+y^2)+a^2*(y^2)-a^2*b^2 ]; 
    sol = solve(eq(1),x,eq(2),y, eq(3),z); 
    sol.x
    sol.y
    sol.z        
   end
end

式の値を取得しましたが、x、y、z の数値を取得するにはどうすればよいですか?

[['x(1)=';'x(2)='],num2str(double(sol.x))]

動作しない、ショー??? ==> mupadmex の使用エラー MuPAD コマンドのエラー: DOUBLE は入力式を double 配列に変換できません。

入力式にシンボリック変数が含まれている場合は、代わりに VPA 関数を使用してください。

エラー ==> sym.sym>sym.double at 927 Xstr = mupadmex('mllib::double', Ss, 0);

エラー ==> f2 at 38 [['x(1)=';'x(2)='],num2str(double(sol.x))]

4

2 に答える 2

1

Symbolic Toolkit にアクセスできる場合は、次の操作を行います。

syms a b k
eq = [k+a/2-173*cos(b), sqrt(3)*a/2-173*sin(b)];
sol = solve(eq(1),a,eq(2),b);

sol.a = simplify(sol.a);
sol.b = simplify(sol.b);

% There are two solutions for 'a' and 'b'
% check residuals for example k=20

subs(subs(eq,{a,b},{sol.a(1),sol.b(1)}),k,20)
% ans = 0.2e-13

subs(subs(eq,{a,b},{sol.a(2),sol.b(2)}),k,20)
% ans = 0.2e-13

編集 1

OPによる新しいコードに基づいて、これを解決するためのmatlabスクリプトは次のとおりです。

clear all
clc
syms alpha beta
degree=140/1000000;
p=42164000;
a=6378136.5;
b=6356751.8;
x_1=0;
y_1=p;
z_1=0;
x_2 = p/cos(alpha)*tan(beta);
y_2 = 0;
z_2 = p*tan(alpha);
syms x y z

eq = [(x-x_1)*(y_2-y_1)-(x_2-x_1)*(y-y_1);...
    (x-x_1)*(z_2-z_1)-(x_2-x_1)*(z-z_1); ...
    b^2*(x^2+y^2)+a^2*(y^2)-a^2*b^2 ];

sol = solve(eq(1),x,eq(2),y,eq(3),z);
sol.x  = simplify(sol.x);
sol.y  = simplify(sol.y);
sol.z  = simplify(sol.z);
pt_1 = [sol.x(1);sol.y(1);sol.z(1)]    % First Solution Point
pt_2 = [sol.x(2);sol.y(2);sol.z(2)]    % Second Solution Point
x = zeros(100,100);
y = zeros(100,100);
z = zeros(100,100);
for i=451:550
    disp(['i=',num2str(i)])
    for j=451:550        
        res = double(subs(pt_1,{alpha,beta},{(1145-i)*degree,(1145-j)*degree}));
        x(i-450, j-450) = res(1);
        y(i-450, j-450) = res(2);
        z(i-450, j-450) = res(3);
    end
end
disp('x=');
disp(x);
disp('y=');
disp(x);
disp('z=');
disp(x);
于 2012-09-21T13:25:04.017 に答える
0

私は試してみます

for i=1:100
    k=num2str(i)
    [a,b]=solve('100+a/2=173*cos(b)','sqrt(3)*a/2=173*sin(b)','a','b')
end

そして、方程式を解きます

于 2012-09-21T13:12:54.417 に答える