在Matlab中创建函数

时间:2016-03-03 09:09:22

标签: matlab function matrix indexing

Question

嗨,我正在尝试根据问题编写一个函数。我试图创建四个彼此相反的子矩阵,然后相乘以得到问题所需的产品。我的尝试:

function T = custom_blocksT(n,m)
    T(1:end,end-1:1);
    T(1:end,end:-1:1)*2;
    T(1:end,end:-1:1)*3;
    T(1:end,end:-1:1)*4;

我不确定的是

(i)个体子矩阵(T(1:end,end-1:1);)需要等于什么?我在想(1:3)

(ii)我试图创建一个通用的子矩阵,可以使用end进行任何大小的矩阵输入是正确的还是你不能这样做?我一直收到这个错误

Undefined function or variable 'T'.

Error in custom_blocksT (line 2) T(1:end,end-1:1);

我搜索过Matlab文档并堆积溢出,但问题是我不太确定我应该在解决这个问题方面寻找什么。

如果有人能帮助我,我会非常感激。

1 个答案:

答案 0 :(得分:3)

您的功能存在许多问题:

function T = custom_blocksT(n,m)
    T(1:end,end-1:1);
    T(1:end,end:-1:1)*2;
    T(1:end,end:-1:1)*3;
    T(1:end,end:-1:1)*4;
end

这是一个非常基本的问题,我强烈建议您在继续之前找到并完成一些非常基本的MATLAB教程,甚至在读到这个答案之前就是诚实的。

这就是说你应该做的,以及你做错了什么:

首先,您收到T dos不存在的错误,因为它没有。函数中存在的唯一变量是您在函数中创建的变量或作为参数传入的变量。您应该已将T作为参数传递,而是传递了您不使用的nm

在问题中,他们使用示例调用函数:

custom_blocks([1:3;3:-1:1])

所以你可以看到他们只传递一个变量,你的函数需要两个,这已经是一个问题了。一个变量是矩阵,而不是它的尺寸。他们传入的矩阵是[1:3;3:-1:1],如果你在命令行输入你会看到给你

[1   2   3
 3   2   1]

所以你的第一行接受一个参数就是那个矩阵,而不应该读

function TOut = custom_blocks(TIn)

现在他们要求你做的是创建一个矩阵TOut,它只是TIn连接的不同倍数。

你所说的TIn(1:end,end-1:1)*2;只是通过TIn向MATLAB询问多个2(这是唯一正确的位),但随后对此无效。此外,通过1:end索引行将完成您想要的操作(即请求所有行),但在MATLAB中,您实际上只需使用:即可。按end-1:1索引列也将调用所有列,但顺序相反。所以实际上你是从左到右翻转你的矩阵,我肯定不是你想要的。所以你可以写TIn(:,:)但是因为那只是要求整个矩阵不变,所以你实际上只能写TIn

所以现在要繁殖并连接(即粘在一起),你这样做

TOut = [TIn, TIn*2; TIn*3, TIn*4]

[]就像是一个连接操作,,用于水平,;用于垂直连接。

全部放在一起:

function TOut = custom_blocks(TIn)
    TOut = [TIn, TIn*2; TIn*3, TIn*4];
end