【问题标题】:Creating functions in Matlab在 Matlab 中创建函数
【发布时间】:2016-03-03 09:09:22
【问题描述】:


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

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 文档和堆栈溢出,但问题是我不太确定在解决这个问题方面我应该寻找什么。

如果有人可以帮助我,我将非常感激。

【问题讨论】:

  • 有很多错误的事情......你的函数应该得到一个矩阵,而不是 2 个值。 T(1:end,end-1:1) 没有意义,因为 1)T 还不存在,2)你没有进行分配。有太多问题我们无法提供帮助。

标签: matlab function matrix indexing


【解决方案1】:

你的函数有很多问题:

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 不存在的错误,因为它不存在。函数中存在的唯一变量是您在函数中创建的变量或作为参数传入的变量。您应该将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; 所做的只是让 MATLAB 将 TIn2 相乘(这是唯一正确的位),然后什么也不做。此外,通过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

【讨论】:

  • 非常感谢您的回复,我将听取您的建议并阅读一些教程,并在尝试更多问题之前尝试提高我的知识!我有几本书(Attaway 和 Gilat)以及 Matlab 编程基础指南,是否有更好的地方可以找到这些信息或者这些材料可以吗?
  • 不知道,编程基础指南听起来是个不错的起点。试一试,重新审视这个问题,确保你理解所说的一切。都是基础的,如果你想使用 MATLAB,你需要知道这一切
  • 好的,感谢您的建议,我将阅读基础指南并尝试理解问题需要什么以及如何将其应用于其他功能。
猜你喜欢
  • 2012-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2010-12-26
  • 1970-01-01
  • 2016-09-18
相关资源
最近更新 更多