Matlab 方程求解中的变量
我想在matlab中解方程,例如Matlab 方程求解中的变量,matlab,Matlab,我想在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 会有错误,怎么做 d
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函数
927处==>sym.sym>sym.double中的错误
Xstr=mupadmex('mllib::double',S.S,0)
38处的错误==>f2
我会试试看
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
然后求解方程如果您有权访问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);
你有符号工具箱吗?从循环中取出解算,并使用
subs
命令替换循环中的值。这是一件在Matlab中让我非常恼火的事情,我无法编写solve(eqs,vars)
但必须编写solve(eqs(1),vars(1),eqs(2),vars(2),…)
非常感谢!!!但是我还有一点没有完成,我已经完成了你告诉我的事情,请再次查看问题,谢谢。请参阅上面的解决方案,但仅查看两个解决方案中的一个。要获得第二个参数,请将行更改为res=double(subs(pt_2,…