matlab求解数学题,Matlab求解数学问题

Matlab 求解数学问题

如果看完之后还是对相关函数的运用不甚了解,请务必使用 help 查看更详细的帮助文档!

求解一元 n 次方程

例:求解一元二次方程 x^2+2*x+1 = 0

clc, clear;

% 定义函数

syms f(x);

f = x^2 + 2*x +1;

% 利用 solve 函数求解方程

x = solve(f);

% 显示结果

disp(x);

求解方程组

例:求二元一次方程组

**

9x + 8y = 10 ①

13x + 14y = 12 ②

**

%% 求解多元方程组

clc, clear;

% 定义函数

syms f1(x,y) f2(x,y);

f1 = 9*x + 8*y - 10;

f2 = 13*x + 14*y - 12;

% 求解方程组

[x, y] = solve(f1, f2)

例:求非线性方程组

**

x^2 + y^2 = 10 ①

2x + 3y = 0 ②

**

%% 求解多元方程

clc, clear;

% 定义函数

syms f1(x,y) f2(x,y);

f1 = x^2 + y^2 - 10;

f2 = 2*x + 3*y;

% 求解方程组

[x, y] = solve(f1, f2)

求出来的结果是两个点的坐标,x 为横坐标, y为纵坐标。

求解符号解

求解符号解只需要我们利用 syms 函数在方程函数中声明符号变量就好了。

例:

%% 求解符号方程

clc, clear;

% 定义函数及变量 a, b, c

syms f1(x,y) f2(x,y) a b c;

f1 = a*x^2 + b*y^2 + c;

f2 = a*x + b*y + c;

% 求解方程组

[x, y] = solve(f1, f2)

解得的结果就是带 a, b, c 三个符号变量的符号解:

x =

-(c - (b*(c - (-(a*c*(a + b + c))/b)^(1/2)))/(a + b))/a

-(c - (b*(c + (-(a*c*(a + b + c))/b)^(1/2)))/(a + b))/a

y =

-(c - (-(a*c*(a + b + c))/b)^(1/2))/(a + b)

-(c + (-(a*c*(a + b + c))/b)^(1/2))/(a + b)

函数求导

%% 函数求导

clc, clear;

% 定义函数

syms y(x);

y = 2 * x^2;

% 求函数的导

Dy = diff(y); % 求函数的一阶导

D2y = diff(y, 2); % 求函数的二阶导

求解微分方程

下面的例子为输入 help dsolve 命令后,帮助文档中所给出的例子。

%% 求解常微分方程

clc, clear;

% 定义函数及变量

syms y(x) a;

% 函数微分方程

Dy = diff(y); % 求 y 的一阶导

D2y = diff(y, 2); % 求 y 的二阶导

%求解微分方程

dsolve(D2y == -a^2*y, y(0) == 1, Dy(pi/a) == 0)

注意: dsolve 求解微分方程的时候,如果里面求的为 n 阶导,那么后面对应给 n 个等式。(另外:是 ‘==’ 而不是 ‘=’ ,写的时候需要注意!)

求解不定积分

使用 int 函数求解不定积分:

%% 求解不定积分

clc, clear;

% 定义函数及常数 C

syms f(x) C;

f = sin(x)/x;

% 求解不定积分

int(f) + C

运行脚本后得到如下的结果:

ans =

C + sinint(x)

其中,sinint() 为正弦积分函数,返回 sin(x)/x 在区间 [0, x]之间的定积分,不是初等函数。

求解定积分

例:求函数 x^2*e^x 在 (0,1) 上的积分。

%% 求解定积分

clc, clear;

% 定义函数

syms f(x);

f = x^2*exp(x);

% 求解函数在 0 到 1 上的定积分

int(f, 0, 1)

结果化简及结果的美化

使用 simplify() 函数可以对结果进行化简。而使用 pretty() 函数可以把得到的结果以相对美观的方式输出。

%% 方程式的化简

clc, clear;

% 定义变量

syms a b;

f = 2*a + 4*b

% 化简

simplify(f)

%% 方程的美化

clc, clear;

% 定义变量

syms a b;

f = sqrt(a^2+b^2)/b

% 美化结果

pretty(f)

符号替换

当我们要给一个方程中的变量赋值的时候,我们可以采用 subs() 函数进行符号替换。当然我们也可以把其中的一个或一串字符替换成另一串字符。

%% 符号替换

clc, clear;

% 定义变量

syms a b;

f = a + b;

% 给 a, b 赋值

a = 2; b = 4;

% 变量替换

f2 = subs(f, {'a', 'b'}, {a, b})

求矩阵的行最简及求矩阵的秩

求矩阵的行最简可以使用 rref 函数;求矩阵的秩可以使用 rank 函数。

%% 求矩阵 A 的行最简

clc, clear;

% 定义矩阵

A = [1 1 -3 -1; 3 -1 -3 4; 1 5 -9 -8];

% 指定有理式格式

format rat

% 求矩阵 A 的行最简

S = rref(A)

% 求矩阵 A 的秩

rank = rank(A)

齐次线性方程组的通解

在 MATLAB 中, 函数 null 用来求解零空间,即满足 A·X = 0 的解空间,实际上是求出解空间的一组基。

格式:

z = null; % z 的列向量为方程组的正交规范基, 满足 Z' x Z = I

z = null(A, 'r'); % z 的列向量是方程 A·X = 0 的有理基

例:求解下列方程组的通解

matlab 求解程序代码如下:

A = [1 2 2 1; 2 1 -2 -2; 1 -1 -4 -3]; % 原始系数矩阵

format rat; % 指定有理式格式

B = null(A, 'r'); % 求解空间有理基

disp(B);

结果如下:

2 5/3

-2 -4/3

1 0

0 1

即:

2k1 + (5/3) k2 % 通解1

-2k1 + (-4/3) k2 % 通解2

k1

k2

我们也可以通过最简行得到基:

B = rref(A) % 求 A 的最简行

则相应的写出线性方程组的通解:

% 利用求解空间的有理基继续运算

syms k1 k2; % 定义字符变量

X = k1*B(:, 1) + k2*B(:, 2) % 得到方程组的通解

非齐次线性方程组的通解

需要先判断非齐次线性方程组是否有解,若有解,然后求通解,步骤如下。

Step1:判断 A·X = b 是否有解,若有解,则进行第二步,否则求解终止;

Step2:求 A·X = b 的一个特解;

Step3:求 A·X = 0 的通解

Step4:求 A·X = b 的通解等于 A·X = 0 的通解加上 A·X = b 的一个特解。

例:求解方程组

在 MATLAB 中建立脚本 M 文件:

clc, clear;

A = [1 -2 3 -1; 3 -1 5 -3; 2 1 2 -2]; % 原始系数矩阵

b = [1 2 3]'; % 解析矩阵

B = [A b]; % 增广矩阵

n = 4;

RA = rank(A) % 求 A 的秩

RB = rank(B) % 求 B 的秩

format rat % 指定有理式格式

if RA==RB && A==n % 判断是否有唯一解

X = A \ b

elseif RA==RB && RA

运行后的结果为:

RA =

2

RB =

3

X =

equition no solve

你可能感兴趣的:(matlab求解数学题)