Matlab求解数学问题

您所在的位置:网站首页 matlab解决数学问题 Matlab求解数学问题

Matlab求解数学问题

2023-11-06 09:57| 来源: 网络整理| 查看: 265

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3