gpt4 book ai didi

matlab - 使用函数元素创建符号矩阵

转载 作者:行者123 更新时间:2023-12-01 22:57:29 25 4
gpt4 key购买 nike

我正在尝试使用以下代码创建一个 nxm 矩阵,其元素是其他符号变量(在本例中为时间 t)的函数:

syms t x(t) L
N = [ 0, 0, ...
0, 0;
0, 0, ...
0, 0;
1 - 3*(x/L)^2 + 2*(x/L)^3, -x + 2*x^2/L - x^3/(L^2), ...
3*(x/L)^2 - 2*(x/L)^3, x^2/L - x^3/(L^2)];

我遇到的问题是 MATLAB 将矩阵 N 转换为函数,即 N(t)。当我尝试访问特定成员时

N(1, 1)

或子矩阵

N(1, 3:4)

MATLAB 出现以下错误:

Symbolic function expected 1 inputs and received 2.

我理解错误消息,但这不是我对代码的期望。我不想要一个取决于 t 的符号矩阵,并且我不理解这种情况下的 MATLABS 行为(例如,为什么 N 不是 L 的函数或其他)。一个解决方案是用

创建一个零符号矩阵
N = sym(zeros(3, 4));

并手动填充元素

N(3, 1) = 1 - 3*(x/L)^2 + 2*(x/L)^3;
N(3, 2) = -x + 2*x^2/L - x^3/(L^2);
N(3, 3) = 3*(x/L)^2 - 2*(x/L)^3;
N(3, 4) = x^2/L - x^3/(L^2);

但是正如您所见,这种方法会产生大量不必要的代码。那么,我的第一种方法有什么问题?

最佳答案

当您定义 x(t) 时由于依赖于 symfun,它最终成为符号函数 ( t ) 而不是符号对象.然后,此依赖项将转移到您的矩阵 N , 使其成为依赖于 t 的符号函数(这解释了为什么它只依赖于 t 而不是 L )。

>> syms t x(t) L
>> N = ...
>> whos
Name Size Bytes Class Attributes

L 1x1 112 sym
t 1x1 112 sym
x 1x1 112 symfun
N 1x1 112 symfun

您可以避免自动转换为 symfun通过上面的解决方法,或者您可以在创建矩阵时明确定义它 N ,像这样:

>> N = sym(char([    0,                        0, ...
0, 0;
0, 0, ...
0, 0;
1 - 3*(x/L)^2 + 2*(x/L)^3, -x + 2*x^2/L - x^3/(L^2), ...
3*(x/L)^2 - 2*(x/L)^3, x^2/L - x^3/(L^2)]));

这里的技巧是结合使用 sym()char()职能。如果你只使用 sym()如果不将矩阵转换为字符串,它将无法工作。

话虽如此,我个人认为您手动填充元素的第二种方法更加清晰易读。

关于matlab - 使用函数元素创建符号矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24643116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com