我对 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
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?:/
在直线方程的矢量形式中,t不是矢量,而是与方向矢量相乘的标量。对于您的问题,您想为每个值找到线方程的值 t
为此,您可以使用 Matlab 的数组形状自动广播。例如:
v2 = [1; 2; 3];
t = linspace(0, 1, 5);
v2 * t
Run Code Online (Sandbox Code Playgroud)
这给出:
v2 = [1; 2; 3];
t = linspace(0, 1, 5);
v2 * t
Run Code Online (Sandbox Code Playgroud)
请注意,j答案中的第 th 列对应于 的j第 th 个元素t。
这样的矩阵可以添加到列向量中,也可以使用广播。例如:
v1 = [11; 12; 13];
v1 + v2 * t
Run Code Online (Sandbox Code Playgroud)
给
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
Run Code Online (Sandbox Code Playgroud)
这些行为您提供 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
Run Code Online (Sandbox Code Playgroud)
使用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');
Run Code Online (Sandbox Code Playgroud)