簡體   English   中英

如何在MATLAB中求解方程組?

[英]How can I solve equation systems in MATLAB?

這是我解決方程組的代碼。

我的代碼出了點問題,但我無法解決。

D=1
E=2
F=3
syms a b c;
S= solve('a+b-c=D','2*+b-3*c=E','a-2*b=F')
S = [S.a S.b S.c]

用符號解決方法解決問題

查看solve的文檔,您可以看到一個如何將方程式輸入到solve函數的示例。 它們不應該是字符串(就像您所做的那樣),而應該是使用==代替=方程式。

文檔示例:

 syms x solx = solve(sin(x) == 1,x) 

將此應用於您的系統:

D=1; E=2; F=3;
syms a b c;
S = solve(a+b-c==D, 2*b-3*c==E, a-2*b==F);
S = [S.a S.b S.c];

% Ouput:
% S = [5/7, -8/7, -10/7]

注意,在上面的例子中,我已經取代*+在與第二個公式* 使用*+ ,但不能同時使用! 我假設這是一個錯字,這不是問題的根源。


不使用符號數學的另一種選擇

您也可以不用符號數學工具箱來解決此問題。 您的方程式可以寫成

1a + 1b - 1c = D
0a + 2b - 3c = E
1a - 2b + 0c = F

矩陣形式的與

 1  1 -1     a     D
 0  2 -3  *  b  =  E
 1 -2  0     c     F

使用矩陣運算,可以通過將兩側預先乘以3x3矩陣的逆來解決。 在MATLAB中,獲得此結果很容易:

% Set up 3x3 matrix of coefficients
coeffs =  [1  1 -1; 0  2 -3; 1 -2  0];
% Set up left hand side vector
DEF = [1; 2; 3];
% Solve
S = coeffs\DEF;
% Ouput
% S = [0.7143, -1.1429, -1.4286]

此輸出與以前相同,盡管顯然不是精確的小數形式,因為它是從abc繼承而來a


編輯:根據Dev-iL的評論,需要考慮一些有關在MATLAB中求解矩陣方程的事情...

  • 我上面使用的反斜杠\\運算符是MATLAB的mldivide函數的簡寫
  • 如以上鏈接文檔所述,它們是可互換的:

    x = mldivide(A,B)是執行x = A\\B的另一種方法

  • 在文檔中還記錄了\\工作原理:

    如果A是一個方矩陣,則A\\B大致等於inv(A)*B ,但是MATLAB對A\\B處理方式有所不同,並且功能更強大。

  • 特別是,MATLAB會自動選擇最有效的算法來求解系統。 決策流程示例可以在文檔中看到,我不在這里重復,因為它超出了問題的范圍。

    mldivide在求解線性系統中的多功能性源於其通過分配給適當的求解器來利用問題對稱性的能力。

綜上所述:

在數學上,“用coeffs矩陣的逆預乘”可以為系統提供解決方案,而使用反斜杠運算符(aka mldivide )是MATLAB式的解決方案。

此擴展與您的原始問題有何關系? 希望您能更好地了解可用於此問題的方法。 特別要知道的是(除非您的特殊情況需要),您可以輕松地(以更少的行,更快的速度)完成此任務,而無需依賴MAT​​LAB的符號數學工具箱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM