我对 Matlab 有疑问。我正在尝试显示/绘制这个由向量组成的线性方程,但它不起作用 - 我尝试了很多不同的方法。
对于“向量线性方程”,我的意思是这样的(图片):
我已经编写了以下代码来执行此操作,但它没有绘制任何内容:
function VectorEq(v1, v2)
t = linspace(-10*pi, 10*pi);
x = v1(:,1) + t(:,1)*v2(:,1);
y = v1(:,2) + t(:,2)*v2(:,2);
z = v1(:,3) + t(:,3)*v2(:,3);
plot3(x,y,z);
end
我在这里错过了什么? :/
最佳答案
在直线方程的向量形式中,t
不是向量,它是与方向向量相乘的标量。对于您的问题,您想找到 t
为此,您可以使用 Matlab 的自动广播数组形状。例如:
v2 = [1; 2; 3];
t = linspace(0, 1, 5);
v2 * t
这给出:
ans =
0 0.2500 0.5000 0.7500 1.0000
0 0.5000 1.0000 1.5000 2.0000
0 0.7500 1.5000 2.2500 3.0000
请注意,答案中的第 j
列对应于 t
的第 j
元素。
这样的矩阵可以添加到列向量中,也可以使用广播。例如:
v1 = [11; 12; 13];
v1 + v2 * t
给予
ans =
11.000 11.250 11.500 11.750 12.000
12.000 12.500 13.000 13.500 14.000
13.000 13.750 14.500 15.250 16.000
这些行为您提供了 x、y 和 z 坐标的值。
因此,将您的问题向量化并快速获得解决方案:
function VectorEq(v1, v2)
t = linspace(-10*pi, 10*pi);
f = v1(:) + v2(:) * t;
% v1(:) ensures it's a column vector
plot3(f(1, :), f(2, :), f(3, :));
end
v1 = [1; 2; 3]
和 v2 = [0.1; 0.2; 0.3]
,我们得到蓝线:
黑点和向量是点v1
和v2
的单位向量:
v1 = [1; 2; 3]; v2 = v1 / 10;
uv2 = v2 / norm(v2);
VectorEq(v1, v2);
hold on;
plot3(v1(1), v1(2), v1(3), '.k');
quiver3(v1(1), v1(2), v1(3), uv2(1), uv2(2), uv2(3), 'k');
https://stackoverflow.com/questions/67375567/