我試圖創建與其他符號變量的函數(時間t在這種情況下)的元素與下面的代碼的n×m矩陣:創建功能元素符號矩陣
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 trows以下錯誤:
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)旁創建第二個符號變量,它不依賴於使用sym x_的其他變量。然後我用x_而不是x(t)重寫N,之後用subs命令將x(t)替換回矩陣中。 – rocketsound
我剛剛注意到,當我嘗試集成或區分時,這種方法變得更奇怪,因爲MATLAB不允許關於因變量(或函數或w/e MATLAB解釋它們)或其派生物的集成/區分。所以我必須創建像x__和x___這樣的其他變量來處理所有派生。這是MATLAB的預期工作流程嗎? – rocketsound