matlab -1,matlab(1)
MATLAB 特色舉例
考慮兩個矩陣 A 和 B 的乘積問題,在 C 語言中要實現兩個矩陣的乘積并不僅僅是一組雙重循環的問題。雙重循環當然是矩陣乘積所必需的,除此之外要考慮的問題很多。例如:A 和 B 有一個是復數矩陣怎么考慮;其中一個是復數矩陣時怎么考慮;全部是實系數矩陣時又怎么管理;這樣就要在一個程序中有 4 個分支,分別考慮這 4 種情況。然后還得判斷這兩個矩陣是否可乘。而考慮兩個矩陣是否可乘也并不僅僅是判斷 A 的列數是否等于 B 的行數這么簡單。其中一個若為標量,則它們可以無條件地相乘。其中有標量時又得考慮實數與復數的問題等。所以說,沒有幾十分鐘的時間,用 C 語言并不可能編寫出考慮各種情況的子程序。有了 MATLAB 這樣的工具,A 和 B 矩陣的乘積用 A*B 這樣簡單的算式就能表示了。
〖例 1-1〗矩陣生成與運算。考慮金庸作品中經常提及的一個“數學問題”, 該問題用半數學語言描述就是:如何生成一個 3x3 矩陣, 并將自然數 1, 2, ..., 9 分別置成這 9 個矩陣元素,才能使得每一行、每一列、且主、反對角線上元素相加都等于一個相同的數。
這樣的矩陣稱為“魔方矩陣”。用 MATLAB 的 magic() 函數,我們可以由下面的命令立即生成這樣的矩陣:
>>? A=magic(3)
A =
8?? 1?? 6
3?? 5?? 7
4?? 9?? 2
還可以由 B=magic(10) 一次生成 10x10 的魔方矩陣。如果想求出矩陣的行列式和特征值,可以分別由 det(B) 與 eig(B) 立即得出結果,而同樣的工作在 C 下并不是很簡單就可以得出的,算法選擇不好,還可能得出錯誤的結果。
〖例 1-2〗考慮一個二元函數
如何用三維圖形的方式表現出這個曲面?
用 C 這類語言,繪制圖形是一個難點,且從一個機器移植程序到另一個機器,大部分調試程序時間都花在這上。但使用 MATLAB 這類高級語言,完成這樣的工作就是幾個直觀語句的事。且得出的圖形美觀準確、可以將語句毫不變化地移植到另外的機器上,得出完全一致的結果,如下所示。
>> [x,y] = meshgrid(-3:1/8:3);
z = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2)- 10*(x/5 - x.^3 - y.^5)...
.*exp(-x.^2-y.^2)- 1/3*exp(-(x+1).^2 - y.^2);
surf(x,y,z), shading interp; colorbar
〖例 1-3〗微分方程的數值解法是在科學與工程計算中經常遇到的問題。假設著名的 Lorenz 模型的狀態方程表示為:
若令
且初值為
,e 為一個小常數,假設
則我們可以由下面的幾個語句就可以描述微分方程:xdot = lorenzeq(t,x)
xdot=[-8/3*x(1)+x(2)*x(3);
-10*x(2)+10*x(3);
-x(1)*x(2)+28*x(2)-x(3)];
這樣下面幾個語句就能求解該微分方程,繪制出時間曲線與相空間曲線,如下所示。>> t_final=100; x0=[0;0;1e-10];
[t,x]=ode45('lorenzeq',[0,t_final],x0);
plot(t,x),
figure; plot3(x(:,1),x(:,2),x(:,3)); axis([10 40 -20 20 -20 20]);
〖例 1-5 〗(注,這里的編號采用作者書中的序號) 設有解析函數
,利用 MATLAB 的符號運算工具箱可以對該函數進行解析推導,得出諸如高階導數、積分、Taylor 冪級數展開等。>> syms x; f='x^2*(sin(x))^2';
diff(f); f1=simple(ans)
f1 =
x-x*cos
總結
以上是生活随笔為你收集整理的matlab -1,matlab(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 过滤中英文以外,PHP-php过
- 下一篇: java ajax实现分页代码,jQue