【小知識酷】《Matlab》考點精簡

在線編譯器 https://matlab.mathworks.com/?elqsid=umic49viv8wu5r6fckew

第1章 matlab基礎知識

第1節 輸出函數

1. 使用disp函數

disp函數可用于輸出變量的值或者字符串。

% 輸出字符串
disp('Hello, MATLAB!'); %顯示Hello, MATLAB!% 輸出變量
x = 10;
disp(x); %顯示10% 輸出數組元素
A = [10, 20, 30, 40, 50];
disp(A); %顯示10    20    30    40    50

2. 使用fprintf函數

fprintf函數能按照指定的格式輸出數據,這和C語言里的printf函數類似。

% 輸出格式化的字符串和變量
x = 3.14159;
fprintf('The value of x is %.2f\n', x); %保留2位小數,并四舍五入,顯示3.14

3. 使用sprintf函數

sprintf函數和fprintf函數類似,不過它是把格式化后的字符串返回,而非直接輸出。

% 將格式化后的字符串賦值給變量
x = 2.71858;
str = sprintf('The value of x is %.3f', x); 
disp(str); %保留3位小數,并四舍五入,顯示2.719

4. 直接在命令窗口輸入變量名

在命令窗口直接輸入變量名,回車后就能顯示變量的值。

y = [1, 2, 3, 4, 5];
y

第2節 input輸入函數

在MATLAB中,input函數用于從用戶處獲取輸入,它有多種使用方式,下面為你詳細介紹其語法和示例。

基本語法

1. x = input(prompt)

這種語法會在命令窗口顯示prompt提示信息,然后等待用戶輸入內容,最后將用戶輸入的內容作為結果返回給變量x。如果用戶輸入的是有效的MATLAB表達式,MATLAB會計算該表達式的值并返回;如果輸入的是字符串,需要用單引號將其括起來。

x = input('請輸入一個數字: ');
disp(['你輸入的數字是: ', num2str(x)]);

在這個示例里,運行代碼后命令窗口會顯示請輸入一個數字: ,等待用戶輸入。若用戶輸入5,程序會把這個數字賦值給變量x,并在后續顯示出你輸入的數字是: 5

2. x = input(prompt,'s')

在這種形式中,'s'參數表明將用戶輸入的內容按字符串形式處理,無論用戶輸入什么,都會直接作為字符串返回給變量x,而不會對其進行表達式計算。

name = input('請輸入你的名字: ','s');
disp(['你輸入的名字是: ', name]);

運行此代碼,命令窗口會顯示請輸入你的名字: ,當用戶輸入張三時,程序會把張三作為字符串賦值給變量name,并顯示你輸入的名字是: 張三

輸入驗證和錯誤處理

在實際使用中,為保證輸入的有效性,可能需要對用戶輸入進行驗證和錯誤處理。以下是一個簡單的示例,確保用戶輸入的是正數:

while truenum = input('請輸入一個正數: ');if num > 0disp(['你輸入的正數是: ', num2str(num)]);break;elsedisp('輸入無效,請輸入一個正數。');end
end

這個代碼會持續提示用戶輸入正數,若用戶輸入的不是正數,會顯示錯誤提示并要求重新輸入,直到輸入有效的正數為止。

綜上所述,input函數是MATLAB中獲取用戶輸入的重要工具,可根據具體需求選擇合適的語法形式。

第3節 算術運算

在MATLAB里,*.*/./是用途不同的運算符,下面為你詳細講解它們的區別以及MATLAB里的其他常見運算符。

*.*的區別

  • *(矩陣乘法運算符):用于執行矩陣乘法,需遵循矩陣乘法規則,即第一個矩陣的列數要和第二個矩陣的行數相等。
  • .*(點乘運算符):用于數組對應元素相乘,要求參與運算的兩個數組大小相同,會把兩個數組對應位置的元素相乘。

以下是示例代碼:

% 定義矩陣 A 和 B
A = [1, 2; 3, 4];
B = [5, 6; 7, 8];% 矩陣乘法
C = A * B;
disp('矩陣乘法 A * B 的結果:');
disp(C);% 數組點乘
D = A .* B;
disp('數組點乘 A .* B 的結果:');
disp(D);

輸出結果:

矩陣乘法 A * B 的結果:19    2243    50
數組點乘 A .* B 的結果:5    1221    32

/./的區別

  • /(矩陣右除運算符):用于求解線性方程組 X * B = A 的解X,相當于 X = A / B = A * inv(B),不過MATLAB會采用更高效的算法避免直接求逆。
  • ./(點除運算符):用于數組對應元素相除,要求參與運算的兩個數組大小相同,會用第一個數組的每個元素除以第二個數組對應位置的元素。

以下是示例代碼:

% 定義矩陣 A 和 B
A = [1, 2; 3, 4];
B = [5, 6; 7, 8];% 矩陣右除
C = A / B;
disp('矩陣右除 A / B 的結果:');
disp(C);% 數組點除
D = A ./ B;
disp('數組點除 A ./ B 的結果:');
disp(D);

輸出結果:

矩陣右除 A / B 的結果:-3.0000   -2.00004.0000    3.0000
數組點除 A ./ B 的結果:0.2000    0.33330.4286    0.5000

MATLAB中的其他常見運算符

算術運算符
  • +:用于標量、數組和矩陣的加法運算。
  • -:用于標量、數組和矩陣的減法運算。
  • ^:矩陣冪運算,用于計算矩陣的冪。
  • .^:點冪運算符,用于計算數組每個元素的冪。
關系運算符
  • ==:判斷是否相等,返回邏輯數組。
  • ~=:判斷是否不相等,返回邏輯數組。
  • >:判斷是否大于,返回邏輯數組。
  • <:判斷是否小于,返回邏輯數組。
  • >=:判斷是否大于等于,返回邏輯數組。
  • <=:判斷是否小于等于,返回邏輯數組。
邏輯運算符
  • &:邏輯與運算,對兩個邏輯數組或標量逐元素進行邏輯與操作。
  • |:邏輯或運算,對兩個邏輯數組或標量逐元素進行邏輯或操作。
  • ~:邏輯非運算,對邏輯數組或標量逐元素進行邏輯非操作。
  • &&:短路邏輯與,用于標量邏輯與運算,若第一個操作數為false,則不計算第二個操作數。
  • ||:短路邏輯或,用于標量邏輯或運算,若第一個操作數為true,則不計算第二個操作數。
其他運算符
  • ::冒號運算符,用于創建向量、指定索引范圍等。
  • ':矩陣轉置運算符,用于求矩陣的轉置。
  • .:結構體成員訪問運算符,用于訪問結構體的成員。

第5節 常用函數

fix、power、abs

第2章 matlab程序設計

第1節 if判斷語句

在MATLAB里,if語句用于依據條件判斷來決定是否執行特定的代碼塊。它有多種形式,下面為你詳細介紹。

1. 基本的if語句

這種形式只有一個條件判斷,當條件為真時,執行對應的代碼塊。

x = 10;
if x > 5disp('x 大于 5');
end

在這個例子里,由于x的值是10,大于5,所以條件為真,會執行disp('x 大于 5');語句。

2. if - else語句

當條件為真時,執行if后面的代碼塊;當條件為假時,執行else后面的代碼塊。

x = 3;
if x > 5disp('x 大于 5');
elsedisp('x 小于或等于 5');
end

這里x的值是3,不大于5,條件為假,因此會執行disp('x 小于或等于 5');語句。

3. if - elseif - else語句

可以使用elseif來添加更多的條件判斷,當if的條件為假時,會依次判斷elseif的條件,若都不滿足,則執行else后面的代碼塊。

x = 0;
if x > 0disp('x 是正數');
elseif x < 0disp('x 是負數');
elsedisp('x 是零');
end

此例中x的值為0,不滿足x > 0x < 0的條件,所以會執行disp('x 是零');語句。

4. 嵌套if語句

if語句的代碼塊中還可以再嵌套if語句,以實現更復雜的條件判斷。

x = 10;
y = 5;
if x > 5if y > 3disp('x 大于 5 且 y 大于 3');end
end

在這個嵌套if語句里,首先判斷x > 5,條件為真,接著進入內層if語句,判斷y > 3,條件也為真,所以會執行disp('x 大于 5 且 y 大于 3');語句。

總結來說,if語句在MATLAB里是非常實用的條件控制結構,能依據不同的條件來執行不同的代碼邏輯。

【例題】計算分段函數P46

x=input('請輸入一個數:');
if x<0 y=abs(x);
elseif x<10y=sin(x)./(x+1);
elseif x<20y=pow(x,3);
else y=(3+2*x).*log(x);
end
disp(y);

第3節 不同類型的比較操作

在MATLAB中,==~=><>=<= 分別用于不同類型的比較操作,下面為你詳細介紹它們的語法和使用示例:

1. ==(相等比較)

== 用于比較兩個值或數組的對應元素是否相等,返回一個邏輯數組(若輸入為數組)或一個邏輯標量(若輸入為標量),相等的位置為 true(即 1),不相等的位置為 false(即 0)。

% 標量比較
a = 5;
b = 5;
result1 = a == b;
disp(result1);% 數組比較
A = [1, 2, 3];
B = [1, 4, 3];
result2 = A == B;
disp(result2);

2. ~=(不等于比較)

~= 用于比較兩個值或數組的對應元素是否不相等,同樣返回一個邏輯數組或邏輯標量,不相等的位置為 true,相等的位置為 false

% 標量比較
a = 5;
b = 6;
result3 = a ~= b;
disp(result3);% 數組比較
A = [1, 2, 3];
B = [1, 4, 3];
result4 = A ~= B;
disp(result4);

3. >=(大于等于比較)

>= 用于比較兩個值或數組的對應元素,判斷左邊的元素是否大于或等于右邊的元素,返回的邏輯數組或邏輯標量中,滿足條件的位置為 true,不滿足條件的位置為 false

% 標量比較
a = 5;
b = 3;
result5 = a >= b;
disp(result5);% 數組比較
A = [1, 2, 3];
B = [1, 4, 3];
result6 = A >= B;
disp(result6);

這些比較運算符在MATLAB的條件判斷、數組篩選等操作中非常常用。例如,可以使用它們結合 if 語句來實現條件控制,或者結合邏輯索引來篩選數組中的元素。

第4節 switch語句

在MATLAB中,switch語句是一種條件控制結構,用于根據表達式的值來選擇執行不同的代碼塊,它可以替代多個嵌套的if-elseif-else語句,使代碼更加簡潔易讀。以下是switch語句的詳細語法和使用示例。

基本語法

switch expressioncase value1% 當 expression 的值等于 value1 時執行的代碼statements1case value2% 當 expression 的值等于 value2 時執行的代碼statements2...case valueN% 當 expression 的值等于 valueN 時執行的代碼statementsNotherwise% 當 expression 的值不等于任何一個 case 值時執行的代碼statements_otherwise
end
  • expression:是一個表達式,其值將與各個case后面的值進行比較。
  • case valuevalue可以是標量、向量或字符串,當expression的值與某個case后面的值相等時,就會執行該case下的代碼塊。
  • otherwise:是可選的,當expression的值不等于任何一個case后面的值時,會執行otherwise下的代碼塊。

使用示例

示例1:根據數字選擇執行不同的操作
x = 2;
switch xcase 1disp('x 的值是 1');case 2disp('x 的值是 2');case 3disp('x 的值是 3');otherwisedisp('x 的值不是 1、2 或 3');
end

在這個例子中,x的值為2,所以會執行case 2下的代碼塊,輸出x 的值是 2

示例2:使用向量作為case
x = [1, 2];
y = [1, 2];
switch isequal(x, y)case truedisp('x 和 y 相等');case falsedisp('x 和 y 不相等');
end

這里使用isequal函數比較xy是否相等,返回一個布爾值。根據這個布爾值,選擇執行相應的代碼塊。

示例3:處理多個值匹配的情況
x = 3;
switch xcase {1, 2}disp('x 的值是 1 或 2');case {3, 4}disp('x 的值是 3 或 4');otherwisedisp('x 的值不是 1、2、3 或 4');
end

在這個例子中,x的值為3,所以會執行case {3, 4}下的代碼塊,輸出x 的值是 3 或 4

注意事項

  • switch語句中的比較是嚴格相等的比較,即值和類型都要相同。
  • 一旦某個case條件滿足,執行完該case下的代碼塊后,會跳出switch語句,不會繼續檢查后面的case條件。
  • otherwise分支可以省略,如果省略且沒有匹配的case條件,則不會執行任何代碼。

for函數的使用

在MATLAB里,for循環是用來重復執行特定代碼塊的控制結構,可按照指定的次數或者遍歷數組元素來執行操作。下面詳細介紹for循環的常見使用方式。

1. 基于數值范圍的for循環

借助冒號運算符來指定循環變量的取值范圍,格式為for 循環變量 = 起始值:步長:終止值,若不指定步長,默認步長為1。

% 步長為1的情況
for i = 1:5fprintf('%d ',i);
end
fprintf("\n") %換行
% 指定步長為2的情況
for j = 1:2:10fprintf("%d ",j);
end%輸出如下:
1 2 3 4 5 
1 3 5 7 9

在第一個例子中,循環變量i從1開始,每次增加1,直到達到5,循環體中使用disp函數輸出i的值。

第二個例子里,循環變量j從1開始,步長為2,直到達到10。

2. 使用end關鍵字結束循環

在MATLAB里,for循環必須以end關鍵字結尾,以此來標識循環體的結束。若缺少end,會導致語法錯誤。

總結而言,for循環在MATLAB中是一種很有用的控制結構,能夠根據需求實現不同的循環邏輯。

3. 遍歷數組元素的for循環

for循環能直接遍歷數組的每個元素。

A = [10, 20, 30, 40, 50];
for element = Adisp(element);
end

這里的A是一個數組,循環變量element會依次取數組A中的每個元素,并將其輸出。

4. 嵌套for循環

可以在一個for循環內部嵌套另一個for循環,用于處理二維數組或者實現更復雜的邏輯。

for i = 1:3for j = 1:2result = i * j;fprintf('i = %d, j = %d, i * j = %d\n', i, j, result);end
end

在這個嵌套for循環中,外層循環控制i的值從1到3,內層循環控制j的值從1到2,每次循環都會計算ij的乘積并輸出。

【例題1】對于三位數而言,若一個三位數的百位、十位、個位數字的立方和等于該數本身,那它就是水仙花數。輸出100~999之間的水仙花數

num=[];
for i=100:999g=mod(i,10);s=mod(fix(i/10),10);b=fix(i/100);sum = power(g,3)+power(s,3)+power(b,3);if sum==inum = [num,sum]; %存入結果end
end
disp(num); %輸出153   370   371   407

【例題2】若一個數等于它的各個真因子之和,則稱該數為完數,如6=1+2+3,所以6是完數。求[1,100]之間的全部完數。

for num=1:100 %1~100之間s=0;for i=1:num if num%i==0s = s + i; %將因子數相加if num==sfprintf('%d ',s);endendend
end

breakcontinue

在MATLAB中,breakcontinue都是用于控制循環流程的關鍵字,它們在循環結構(如for循環和while循環)中發揮著不同的作用,下面為你詳細介紹二者的區別。

1. break語句

break語句的主要作用是立即終止當前所在的循環,無論循環條件是否滿足,程序都會跳出該循環,繼續執行循環之后的代碼。

示例代碼
for i = 1:10if i == 5break;enddisp(i);
end
disp('循環已終止');
代碼解釋

在這個for循環中,當變量i的值等于5時,break語句會被執行,循環會立即終止,不再執行后續的循環迭代。所以,代碼只會輸出1到4的數字,然后輸出循環已終止

2. continue語句

continue語句用于跳過當前循環迭代中continue語句之后的代碼,直接進入下一次循環迭代。也就是說,它會忽略本次循環剩余的代碼,但是循環會繼續執行,直到循環條件不再滿足。

示例代碼
for i = 1:10if i == 5continue;enddisp(i);
end
disp('循環已結束');
代碼解釋

在這個for循環中,當變量i的值等于5時,continue語句會被執行,disp(i);語句會被跳過,直接進入下一次循環迭代。所以,代碼會輸出除5之外的1到10的數字,最后輸出循環已結束

總結

  • break:終止整個循環,跳出循環體,不再執行后續的循環迭代。
  • continue:跳過當前循環迭代中continue語句之后的代碼,直接進入下一次循環迭代,循環會繼續執行。

在實際編程中,你可以根據具體的需求選擇使用breakcontinue來控制循環的執行流程。

章節練習

第8章 符號計算

factor因式分解

在MATLAB中,factor 函數主要用于對整數進行分解質因數操作,下面為你詳細介紹其語法及使用示例。

基本語法

F = factor(X)
  • 輸入參數
    • X:可以是一個標量整數、整數向量或者整數矩陣。當 X 是向量或矩陣時,factor 函數會對其中的每個元素分別進行質因數分解。
  • 輸出參數
    • F:如果 X 是標量整數,F 是一個包含 X 的質因數的向量,這些質因數按升序排列。如果 X 是向量或矩陣,F 是一個元胞數組,其中每個元胞對應 X 中相應位置元素的質因數分解結果。

使用示例

對標量整數進行質因數分解
X = 24;
F = factor(X);
disp(F);

在這個例子中,factor 函數會將整數 24 分解為質因數,結果存儲在向量 F 中。運行代碼后,你會看到輸出為 2 2 2 3,這表明 24 = 2 × 2 × 2 × 3

對整數向量進行質因數分解
X = [12, 15];
F = factor(X);
disp(F);

當輸入是一個向量時,factor 函數會對向量中的每個元素分別進行質因數分解,并將結果存儲在元胞數組 F 中。對于這個例子,F{1}12 的質因數分解結果 2 2 3F{2}15 的質因數分解結果 3 5

對整數矩陣進行質因數分解
X = [16, 18; 20, 22];
F = factor(X);
disp(F);

這里輸入是一個矩陣,factor 函數會對矩陣中的每個元素進行質因數分解,結果存儲在元胞數組 F 中。F 中的每個元胞對應矩陣 X 中相應位置元素的質因數分解結果。

需要注意的是,factor 函數的輸入必須是整數。如果輸入為非整數,MATLAB 會給出錯誤提示。

% 1、定義xyz
syms x y z
% 2、factor(公式)
f1 = factor(x^9 - 1);
disp('1) 分解結果為:');
disp(f1);

limit求極限

在MATLAB里,limit函數主要用于計算符號表達式的極限。下面為你詳細介紹它的語法和使用示例。

基本語法

1. limit(f, x, a)

此語法用于計算符號表達式f在變量x趨近于a時的極限。

syms x;
f = (x^2 - 1)/(x - 1);
a = 1;
L = limit(f, x, a);
disp(L);

在這個例子中,我們先定義了符號變量x,接著定義了符號表達式f,最后計算當x趨近于1時f的極限。運行代碼后,會輸出極限值2。

2. limit(f, a)

若符號表達式f中只有一個符號變量,那么可以省略變量名,直接使用此語法計算該符號表達式在該變量趨近于a時的極限。

syms t;
f = sin(t)/t;
a = 0;
L = limit(f, a);
disp(L);

這里定義了符號變量t和符號表達式f,然后計算當t趨近于0時f的極限,輸出結果為1。

3. limit(f, x, a, 'right')

此語法用于計算符號表達式f在變量x從右側趨近于a時的極限(右極限)。

syms x;
f = 1/x;
a = 0;
L = limit(f, x, a, 'right');
disp(L);

運行該代碼后,會得到fx從右側趨近于0時的極限,結果為Inf(正無窮)。

4. limit(f, x, a, 'left')

此語法用于計算符號表達式f在變量x從左側趨近于a時的極限(左極限)。

syms x;
f = 1/x;
a = 0;
L = limit(f, x, a, 'left');
disp(L);

運行代碼后,會得到fx從左側趨近于0時的極限,結果為-Inf(負無窮)。

注意事項

  • 要使用limit函數,需要先使用syms函數定義符號變量。
  • 當極限不存在時,limit函數可能返回NaN(非數字)或者給出一個未定義的結果。
syms x
% (1)lim (x→4) (x^2 -6x +8)/(x^2 -5x +4)
limit1 = limit((x^2 - 6*x + 8)/(x^2 -5*x + 4), x, 4);
disp('(1)極限為:');
disp(limit1);
% (2)lim (x→0?) |x|/x
limit2 = limit(abs(x)/x, x, 0, 'left');
disp('(2)極限為:');
disp(limit2);

diff求導

在MATLAB中,diff函數主要用于計算數值差分,而對于符號表達式求導,需要使用diff函數結合符號工具箱。下面分別介紹數值差分和符號求導的語法及使用示例。

1. 數值差分

diff函數用于計算向量或矩陣的差分。

語法
Y = diff(X)
Y = diff(X,n)
Y = diff(X,n,dim)
  • 參數說明
    • X:輸入的向量或矩陣。
    • n:可選參數,指定差分的階數,默認為1。
    • dim:可選參數,指定沿哪個維度進行差分,對于向量,該參數可忽略;對于矩陣,dim = 1 表示沿列方向差分,dim = 2 表示沿行方向差分。
  • 示例
% 向量差分
x = [1, 3, 6, 10];
dy = diff(x);
disp(dy);% 二階差分
d2y = diff(x, 2);
disp(d2y);% 矩陣差分
A = [1, 2, 3; 4, 5, 6];
dy_col = diff(A, 1, 1); % 沿列方向一階差分
dy_row = diff(A, 1, 2); % 沿行方向一階差分
disp(dy_col);
disp(dy_row);

2. 符號求導

使用diff函數結合符號工具箱可以對符號表達式進行求導。

語法
Y = diff(f)
Y = diff(f, var)
Y = diff(f, var, n)
  • 參數說明
    • f:輸入的符號表達式。
    • var:可選參數,指定對哪個符號變量求導,若省略,則對默認的符號變量求導。
    • n:可選參數,指定求導的階數,默認為1。
  • 示例
% 定義符號變量
syms x;% 定義符號表達式
f = x^3 + 2*x^2 + 3*x + 4;% 對默認變量 x 求一階導數
df = diff(f);
disp(df);% 對指定變量 x 求二階導數
d2f = diff(f, x, 2);
disp(d2f);

總結

  • diff函數用于數值差分,計算向量或矩陣元素之間的差值。
  • 結合符號工具箱,diff函數可以對符號表達式進行求導。在使用符號求導時,需要先使用syms函數定義符號變量。
syms x
% 定義函數 y
y = sin(x) - x^2 / 2;
% 求一階導數 y'
y_prime = diff(y, x);
disp('一階導數 y'' 為:');
disp(y_prime);
% 求二階導數 y''
y_double_prime = diff(y, x, 2);
disp('二階導數 y'''' 為:');
disp(y_double_prime);
% 求三階導數 y'''
y_double_prime = diff(y, x, 3);
disp('三階導數 y'''''' 為:');
disp(y_double_prime);

求非線性方程組的符號解

在MATLAB里,有多種方法可以求解非線性方程組,下面為你介紹兩種常用的函數及其語法和使用示例。

1. fsolve函數

fsolve函數是MATLAB中用于求解非線性方程組的常用函數,它采用數值方法尋找方程組的根。

基本語法
x = fsolve(fun,x0)
x = fsolve(fun,x0,options)
  • 參數說明
    • fun:表示一個函數句柄,該函數用于定義非線性方程組。此函數接收一個向量輸入,返回一個包含方程組中每個方程計算結果的向量。
    • x0:是初始猜測值向量,也就是求解方程組時的起始點。合適的初始猜測值對求解結果和收斂速度有重要影響。
    • options:是可選參數,為優化選項結構體,可用于設置求解過程中的各種參數,例如最大迭代次數、誤差容限等。
使用示例

假設要求解如下非線性方程組:
[
\begin{cases}
x_1^2 + x_2^2 - 1 = 0 \
x_1 - x_2^2 = 0
\end{cases}
]

% 定義非線性方程組的函數
function F = myfun(x)F(1) = x(1)^2 + x(2)^2 - 1;F(2) = x(1) - x(2)^2;
end% 初始猜測值
x0 = [0.5; 0.5];% 調用 fsolve 函數求解方程組
x = fsolve(@myfun, x0);% 顯示求解結果
disp('方程組的解為:');
disp(x);

2. vpasolve函數

vpasolve函數是符號工具箱中的函數,可用于求解符號形式的非線性方程組,它能給出符號解或數值近似解。

基本語法
sol = vpasolve(eqns,vars)
sol = vpasolve(eqns,vars,init_guess)
  • 參數說明
    • eqns:是一個符號表達式或符號表達式向量,用于定義非線性方程組。
    • vars:是一個符號變量或符號變量向量,代表方程組中的未知變量。
    • init_guess:是可選參數,為初始猜測值,可幫助求解器更快地收斂到解。
使用示例

同樣求解上述非線性方程組:

% 定義符號變量
syms x1 x2;% 定義非線性方程組
eqns = [x1^2 + x2^2 - 1 == 0, x1 - x2^2 == 0];% 定義未知變量
vars = [x1, x2];% 調用 vpasolve 函數求解方程組
sol = vpasolve(eqns, vars);% 顯示求解結果
disp('方程組的解為:');
disp(sol.x1);
disp(sol.x2);

總結

  • fsolve函數是數值求解器,需要將方程組定義為函數句柄,并且要提供初始猜測值。
  • vpasolve函數是符號求解器,使用符號表達式定義方程組,可給出符號解或數值近似解,也可提供初始猜測值來加速求解過程。

img

syms x y z
% 方程組 (1)
eq1_1 = log(x/y) == 9;
eq1_2 = exp(x + y) == 3;
solution1 = solve([eq1_1, eq1_2], [x, y]);
x1 = solution1.x;
y1 = solution1.y;
disp('方程組 (1) 的解為:');
disp(['x = ', char(x1)]);
disp(['y = ', char(y1)]);
% 方程組 (2)
eq2_1 = (4*x^2)/(4*x^2 + 1) == y;
eq2_2 = (4*y^2)/(4*y^2 + 1) == z;
eq2_3 = (4*z^2)/(4*z^2 + 1) == x;
solution2 = solve([eq2_1, eq2_2, eq2_3], [x, y, z]);
x2 = solution2.x;
y2 = solution2.y;
z2 = solution2.z;
disp('方程組 (2) 的解為:');
for i = 1:length(x2)disp(['解 ', num2str(i), ':']);disp(['x = ', char(x2(i))]);disp(['y = ', char(y2(i))]);disp(['z = ', char(z2(i))]);
end

利用符號表達式求z

syms x y
% 定義符號常數 x 和 y
x = sym('6');
y = sym('5');
% 定義表達式 z
z = (x + 1) / (sqrt(3 + x) - sqrt(y));
% 計算 z 的值
result = vpa(z);
disp(result);syms a b
a=6;
b=5;
z = (a + 1) / (sqrt(3 + a) - sqrt(b));
disp(z);

化簡表達式

在MATLAB里,能借助符號工具箱對表達式進行化簡,下面為你介紹幾個常用的化簡函數及其語法與示例。

1. simplify函數

simplify函數是一個通用的化簡函數,它能嘗試運用多種規則對符號表達式進行化簡。

語法
R = simplify(S)
  • 參數說明
    • S:輸入的符號表達式。
    • R:化簡后的符號表達式。
示例
% 定義符號變量
syms x;% 定義符號表達式
S = (x^2 - 1)/(x - 1);% 化簡表達式
R = simplify(S);% 顯示化簡結果
disp(R);

此例中,simplify函數把表達式 (x^2 - 1)/(x - 1) 化簡為 x + 1

2. expand函數

expand函數主要用于展開表達式,像多項式展開、三角函數展開等。

語法
R = expand(S)
  • 參數說明
    • S:輸入的符號表達式。
    • R:展開后的符號表達式。
示例
% 定義符號變量
syms x;% 定義符號表達式
S = (x + 1)^2;% 展開表達式
R = expand(S);% 顯示展開結果
disp(R);

在這個例子中,expand函數把表達式 (x + 1)^2 展開為 x^2 + 2*x + 1

3. factor函數

factor函數用于對多項式進行因式分解。

語法
R = factor(S)
  • 參數說明
    • S:輸入的符號表達式,通常是多項式。
    • R:因式分解后的符號表達式。
示例
% 定義符號變量
syms x;% 定義符號表達式
S = x^2 - 1;% 因式分解表達式
R = factor(S);% 顯示因式分解結果
disp(R);

這里,factor函數把表達式 x^2 - 1 因式分解為 (x - 1)*(x + 1)

4. collect函數

collect函數可將表達式按照指定變量的冪次進行合并同類項。

語法
R = collect(S,v)
  • 參數說明
    • S:輸入的符號表達式。
    • v:指定的變量。
    • R:合并同類項后的符號表達式。
示例
% 定義符號變量
syms x;% 定義符號表達式
S = x^2 + 3*x + 2*x^2;% 按 x 的冪次合并同類項
R = collect(S,x);% 顯示合并結果
disp(R);

此例中,collect函數把表達式 x^2 + 3*x + 2*x^2 合并為 3*x^2 + 3*x

在使用這些函數之前,要先運用syms函數定義符號變量。并且,不同的化簡函數適用于不同的場景,你可以依據表達式的特點選擇合適的函數。

syms beta1 beta2 x
% (1)化簡 sin(beta1)*cos(beta2) - cos(beta1)*sin(beta2)
expr1 = sin(beta1)*cos(beta2) - cos(beta1)*sin(beta2);
simplified_expr1 = simplify(expr1);
disp('(1)化簡結果為:');
disp(simplified_expr1);
% (2)化簡 (4x^2 + 8x + 3)/(2x + 1)
expr2 = (4*x^2 + 8*x + 3)/(2*x + 1);
simplified_expr2 = simplify(expr2);
disp('(2)化簡結果為:');
disp(simplified_expr2);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/82618.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/82618.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/82618.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

碼蹄集——中庸之道(三個數比較)

MT1112 中庸之道 請編寫一個簡單程序&#xff0c;輸入3個整數&#xff0c;比較他們的大小&#xff0c;輸出中間的那個數 格式 輸入格式&#xff1a; 輸入整型&#xff0c;空格分隔 輸出格式&#xff1a;輸出整型 樣例 1 輸入&#xff1a;1 5 3 輸出&#xff1a;3 比較…

快速搭建一個vue前端工程

一、環境準備 1、安裝node.js 下載地址&#xff1a;Node.js 推薦版本如下&#xff1a; 2、檢查node.js版本 node -v npm -v 二、安裝Vue腳手架 Vue腳手架是Vue官方提供的標準化開發工具。vue官網&#xff1a;https://cn.vuejs.org/ 全局安裝vue/cli &#xff08;僅第一次…

React Native基礎環境配置

React Native基礎環境配置 1.引言2.React-Native簡介3.項目基礎環境搭建1.引言 感覺自己掌握的知識面還是有點太窄了,于是決定看看移動端的框架,搞個react搭一個后端管理項目,然后拿react-native寫個小的軟件,試著找個三方上架一下應用市場玩玩。畢竟不可能一直在簡歷上掛一…

PHP和Composer 安裝

Composer 是 PHP 的 依賴管理工具&#xff0c;就像&#xff1a; Node.js 用 npm Python 用 pip Java 用 maven 用來安裝和管理 PHP 項目中需要用到的第三方庫 安裝PHP可以理解成 Java解釋器 安裝PHP PHP For Windows: Binaries and sources Releaseshttps://windows.php.n…

API請求參數有哪些?

通用參數 app_key&#xff1a;應用的唯一標識&#xff0c;用于驗證應用身份&#xff0c;調用API時必須提供。 timestamp&#xff1a;請求時間戳&#xff0c;通常為當前時間的毫秒級時間戳&#xff0c;用于防止請求被重放攻擊。 format&#xff1a;返回數據的格式&#xff0c;…

并發筆記-條件變量(三)

文章目錄 背景與動機30.1 條件變量的定義與基本操作 (Definition and Routines)30.2 生產者/消費者問題 (Bounded Buffer Problem)30.3 覆蓋條件 (Covering Conditions) 與 pthread_cond_broadcast30.4 總結 背景與動機 到目前為止&#xff0c;我們已經學習了鎖 (Locks) 作為并…

stm32實戰項目:無刷驅動

目錄 系統時鐘配置 PWM模塊初始化 ADC模塊配置 霍爾接口配置 速度環定時器 換相邏輯實現 主控制循環 系統時鐘配置 啟用72MHz主頻&#xff1a;RCC_Configuration()設置PLL外設時鐘使能&#xff1a;TIM1/ADC/GPIO時鐘 #include "stm32f10x.h"void RCC_Configu…

LC-3 中常見指令

當然可以&#xff01;以下是 LC-3 中常見指令&#xff08;匯編格式&#xff09;與對應的二進制編碼格式 的總結表&#xff0c;通俗易懂地介紹每條指令的用途、操作碼&#xff08;opcode&#xff09;以及格式結構。 ? 常見 LC-3 指令與對應的二進制格式 指令名稱操作碼&#x…

深入解析Docker:核心架構與最佳實踐

文章目錄 前言一、Docker 解決了什么問題&#xff1f;二、Docker 底層核心架構2.1 Docker 引擎的分層架構2.2 鏡像的奧秘&#xff1a;聯合文件系統&#xff08;UnionFS&#xff09;2.3 容器隔離的核心技術2.3.1 命名空間2.3.2 控制組&#xff08;Cgroups&#xff09;2.3.3 內核…

從零打造企業級Android木馬:數據竊取與遠程控制實戰

簡介 木馬病毒已從簡單的惡意軟件演變為復雜的攻擊工具,尤其在2025年企業級攻擊中,木馬病毒正成為黑客組織的主要武器之一。 本文將深入探討如何制作具備數據竊取和遠程控制功能的Android木馬,從基礎原理到企業級防御繞過技術,同時提供詳細的代碼實現,幫助開發者理解木馬…

ES常識5:主分詞器、子字段分詞器

文章目錄 一、主分詞器&#xff1a;最基礎的文本處理單元主分詞器的作用典型主分詞器示例 二、其他類型的分詞器&#xff1a;解決主分詞器的局限性1. 子字段分詞器&#xff08;Multi-fields&#xff09;2. 搜索分詞器&#xff08;Search Analyzer&#xff09;3. 自定義分詞器&a…

【第三十五周】Janus-pro 技術報告閱讀筆記

Janus-Pro 摘要Abstract文章信息引言方法Janus 架構Janus 訓練Janus-Pro 的改進 實驗結果總結 摘要 本篇博客介紹了Janus-Pro&#xff0c;這是一個突破性的多模態理解與生成統一模型&#xff0c;其核心思想是通過解耦雙路徑視覺編碼架構解決傳統方法中語義理解與像素生成的任務…

MySQL 數據操縱與數據庫優化

MySQL數據庫的DML 一、創建&#xff08;Create&#xff09; 1. 基本語法 INSERT INTO 表名 [(列名1, 列名2, ...)] VALUES (值1, 值2, ...); 省略列名條件&#xff1a;當值的順序與表結構完全一致時&#xff0c;可省略列名&#xff08;需包含所有字段值&#xff09;批量插…

(9)被宏 QT_DEPRECATED_VERSION_X_6_0(“提示內容“) 修飾的函數,在 Qt6 中使用時,會被編譯器提示該函數已過時

&#xff08;1&#xff09;起因是看到 Qt 的官方源代碼里有這樣的寫法&#xff1a; #if QT_DEPRECATED_SINCE(6, 0) //里面的都是廢棄的成員函數QT_WARNING_PUSHQT_WARNING_DISABLE_DEPRECATEDQT_DEPRECATED_VERSION_X_6_0("Use the constructor taking a QMetaType inst…

【bibtex4word】在Word中高效轉換bib參考文獻,Texlive環境安裝bibtex4word插件

前言 現已退出科研界&#xff0c;本人水貨一個。希望幫到有緣人 本篇關于如何將latex環境中的參考文獻bib文件轉化為word&#xff0c;和一些踩坑記錄。 可以看下面的資料進行配置&#xff0c;后面的文字是這些資料的補充說明。 參考文章&#xff1a;https://blog.csdn.net/g…

Python 自動化腳本開發秘籍:從入門到實戰進階(6/10)

摘要&#xff1a;本文詳細介紹了 Python 自動化腳本開發的全流程&#xff0c;從基礎的環境搭建到復雜的實戰場景應用&#xff0c;再到進階的代碼優化與性能提升。涵蓋數據處理、文件操作、網絡交互、Web 測試等核心內容&#xff0c;結合實戰案例&#xff0c;助力讀者從入門到進…

理解反向Shell:隱藏在合法流量中的威脅

引言 在網絡安全領域&#xff0c;??反向Shell&#xff08;Reverse Shell&#xff09;?? 是一種隱蔽且危險的攻擊技術&#xff0c;常被滲透測試人員和攻擊者用于繞過防火墻限制&#xff0c;獲取對目標設備的遠程控制權限。與傳統的“正向Shell”&#xff08;攻擊者主動連接…

無人機電池儲存與操作指南

一、正確儲存方式 1. 儲存電量 保持電池在 40%-60% 電量&#xff08;單片電壓約3.8V-3.85V&#xff09;存放&#xff0c;避免滿電或空電長期儲存。 滿電存放會加速電解液分解&#xff0c;導致鼓包&#xff1b;**空電**存放可能引發過放&#xff08;電壓低于3.0V/片會永久…

怎樣選擇成長股 讀書筆記(一)

文章目錄 第一章 成長型投資的困惑一、市場不可預測性的本質困惑二、成長股的篩選悖論三、管理層評估的認知盲區四、長期持有與估值波動的博弈五、實踐中的認知升級路徑總結&#xff1a;破解困惑的行動框架 第二章 如何閱讀應計制利潤表一、應計制利潤表的本質與核心原則1. 權責…

深入淺出之STL源碼分析6_模版編譯問題

1.模版編譯原理 當我們在代碼中使用了一個模板&#xff0c;觸發了一個實例化過程時&#xff0c;編譯器就會用模板的實參&#xff08;Arguments&#xff09;去替換&#xff08;Substitute&#xff09;模板的形參&#xff08;Parameters&#xff09;&#xff0c;生成對應的代碼。…