如何使用 matlab 正确绘制矢量线性方程?

rob*_*ind 2 matlab

我对 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)

我在这里缺少什么?:/

Pra*_*adi 5

在直线方程的矢量形式中,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)