数理方程及MATLAB解算学习笔记
文章目录
第一章 MATLAB基础知识
1、class查询数值类型
class(a)
2、永久性数值变量
变量名 | 意义 |
---|---|
pi | 圆周率π |
INF或Inf | 正无穷大 |
ans | 临时变量名 |
eps | 机器浮点运算误差限(2.2204*10 -18 ) |
i或j | 虚数单位,代表 − 1 \sqrt{-1} −1 |
NaN | 不定值。如: 0 0 \frac{0}{0} 00, ∞ ∞ \frac{\infty}{\infty} ∞∞,0, ∞ \infty ∞ |
3、创建特殊矩阵的专用指令
指令格式 | 功能 | |
---|---|---|
flipud(a) | 输出矩阵a上下翻转后的矩阵 | |
fliplr(a) | 输出矩阵a左右翻转后的矩阵 | |
diag(a,k) | 输出矩阵a的主对角线右移k列后构成的列向量。省略k时,视k=0 | |
tril(a)(triu(a)) | 输出矩阵a主对角线下(上)方元素构成的下(上)三角矩阵 |
4、基本初等函数及统计函数指令
指令 | 意义 | 指令 | 意义 |
---|---|---|---|
log(x) | ln(x) | angle(x) | 复数x的相角 |
log2(x) | log 2 ( x ) _2(x) 2(x) | cumsum(x) | x列元素累加和 |
exp(x) | e x ^x x | cumprod(x) | x列元素累进积 |
sqrt(x) | x \sqrt{x} x(平方根) | mean(x) | x列元素平均值 |
sinh(x) | 双曲正弦 shx | prod(x) | x列元素之积 |
sign(x) | 数x的正负号 | round(x) | 输出x的四舍五入取整 |
real(x) | x的实部 | fix(x) | 输出x靠近零的整数 |
imag(x) | x的虚部 | floor(x) | 输出靠近- ∞ \infty ∞的整数 |
abs(x) | x绝对值或模 | ceil(x) | 输出靠近 ∞ \infty ∞的整数 |
nchoosek(m,n) | m中选n的组合数 C n m C^m_n Cnm | pord(m:n) | m(m+1)···(n-1)n |
sort(x) | x列元素按升序重排 | factorial(x) | 输出x! |
median(x) | 输出x列元素的中间值 | pow2(x) | 输出 2 x 2^x 2x |
rem(x1,x2) | 输出x1./x2的余数 | mod(x1,x2) | 输出x2.\x1的余数 |
inv(x) | x的绝对值 | conj(x) |
5、用syms指令定义符号变量
简单来说就是把一个式子定义成符号变量
用法1:sysm a1 a2 a3 … flag1
(1)输入参量a1,a2,a3,……只能是标识符,不得是数字、函数表达式或方程式。
(2)输入参量a1,a2,a3,…,flag1之间,只能用空格分隔,不得添加任何符号。
(3)输入参数flag1是规定被定义符号量属性的,称为属性符,它可跟据需要选用下述字符串之一:
代码 | 字符串类型 |
---|---|
unreal | 定义成复数型符号量 |
real | 定义成实数型符号量 |
negative | 定义成负实数型符号量 |
positive | 定义成正实数型符号量 |
nonzero | 定义成非零型符号量 |
真是一刻也不能松懈呀
也可用sym创建符号矩阵
用法2:sym(A)
输入参量A可以是数值矩阵、字符量矩阵、符号量表达式,也可以是方程。矩阵中两个元素之间最好用逗号分隔,以防对空格的误识别
6、符号矩阵
符号矩阵中的元素可以是任何的符号或者表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。
符号矩阵的替换和修改可用替换指令subs实现
用法:B1=subs(B,old,new)
(1)输入参量B代表符号矩阵中的单个元素或部分元素,叫符号矩阵的标识
(2)输出的符号矩阵B1为B中old部分被new代替后的矩阵
(3)old为元素位置
符号矩阵的简化可用simplify指令实现
用法:simplify(s)
s为符号矩阵
7、求算与微积分有关的指令
1、级数求和指令symsum
用法:symsum(s,n,n0,nk)
(1)输入参量s为级数通项的符号表达式,或由它们构成的符号矩阵。
(2)输入参量n是通项中被认定的项数变量,缺省n时默认为“x”。如果难以确认s表达式中的项数变量,可输入指令findsym(s)查询。
(3)n0和nk分别为首项和末项的序号。n0可以是小数,但步长总是1。缺省n0和nk时,默认n0=1,nk=n-1。
(4)回车后输出通项为s的级数从第n0项到第nk项之和。
例:求级数S ∑ n = 0 ∞ ( − 1 ) n x n + 1 n + 1 \sum_{n=0}^\infty(-1)^n\frac{x^{n+1}}{n+1} ∑n=0∞(−1)nn+1xn+1
clear,syms x n
S=symsum((-1)^n*x^(n+1)/(n+1),n,0,inf)
2、一元函数的泰勒级数展开指令是taylor
用法:taylor(f,‘order’,n,‘ExpansionPoint’,a)
(1)输入参量f为待展开函数的符号表达式,或由它们构成的矩阵,f不得省略。
(2)输入参量n取正整数,代表级数的项数,输出是将f表达式展开成最高幂次为(n-1)的幂级数。
(3)输入参量x为指定的变量名称,如果没写的话就默认为x或t。如果f中只有一个变量时,可以省略指定变量名。
(4)输入参数a表示函数f(x)在x=a处展开,即展开成(x-a)的幂级数。
(5)缺a时默认a=0,函数在x=0处展开,即展开为麦克劳林级数。缺n时,默认级数的项数n=6,函数f(x)展开成x最高幂次为5的幂级数。
例:把函数f(x)= e − x e^{-x} e−x在x=10处展开,x的最高次项取为9。
clear,syms x
s = taylor(exp(-x),'order',9,'ExpansionPoint',10)
3、求函数极限的指令为limit
用法:limit(f,x,a,‘right’或’left’)
(1)f为函数f(x)或函数矩阵的符号表达式。
(2)输出为 l i m x → a f ( x ) lim_{x\rightarrow a}f(x) limx→af(x),省略a时,默认a=0。
(3)right为右极限,left为左极限,省略时表示左右极限相等。
(4)limit可以嵌套使用。
例:求极限 l i m x → a x m − a m x − a lim_{x\rightarrow a}\frac{\sqrt[m]{x}-\sqrt[m]{a}}{x-a} limx→ax−amx−ma
syms x m a
limit((x^(1/m)-a^(1/m))/(x-a),x,a)
4、求导数的指令为diff
用法:F=diff(f,'x’n)
(1)f为函数或函数矩阵的符号或字符表达式
(2)x为指定的函数求导自变量,缺省时默认为x或t。
(3)n为求导的阶数,缺省时默认n=1,此时输出f的一阶导函数。
(4)输出量F为函数f对变量x的n阶导函数。
若明确指出不同的求导自变量,则该指令可用于求多元函数的偏导数。
例:已知函数矩阵 A ( x ) = ( l n a − x a + x a r c s i n x − 1 x + 1 x 2 x 1 − x ) A(x)=\begin{pmatrix} ln\sqrt{\frac{a-x}{a+x}} & arcsin\frac{x-1}{x+1} \\ x^{2x} & \sqrt{1-x} &\end{pmatrix} A(x)=(lna+xa−xx2xarcsinx+1x−11−x),求出每个元素对x的二阶导数。
syms a x
A = [log(sqrt((a-x)/(a+x))),asin((x-1)/(x+1));x^(2*x),sqrt(1-x)];
A2=diff(A,2);
disp('A"(x)='),pretty(simplify(A2))
若要求出x=a时上述二阶导数的值,可用subs(A2,x,a)指令得出
例:设 z = x 2 y − x y 2 z=x^2y-xy^2 z=x2y−xy2,其中 x = u c o s v x=ucosv x=ucosv, y = u s i n v y=usinv y=usinv,求 ∂ z ∂ v \frac{\partial{z}}{\partial{v}} ∂v∂z和 ∂ z ∂ u \frac{\partial{z}}{\partial{u}} ∂u∂z。
下面代码有问题
syms x y z=x^2*y-x*y^2;
z1=subs(z,'x','u*cos(v)');
z2=subs(z1,'y','u*sin(v)');
o=diff(z2,'u')
5、求积分的指令为int
用法:s=int(f,x,a,b)
(1)f为被积函数的符号表达式,或其矩阵。
(2)x为积分变量,若被积函数中只有一个变量。则可以省略。
(3)a,b为定积分分别为定积分上下限,缺少时输出被积函数的原函数
(4)int指令可以嵌套多次使用,从而可用于计算多重积分。
例:计算定积分 f ( x ) = ∫ 0 π 3 3 x y d y f(x)=\int_{0}^{\frac{\pi}{3}}3x^ydy f(x)=∫03π3xydy
syms x y
s=int(3*x^y,y,0,pi/3)
例:求二重不定积分 y ( x , t ) = ∬ t 2 e − 2 t x d t d x y(x,t)=\iint{t^2e^{-2tx}dtdx} y(x,t)=∬t2e−2txdtdx.
syms t x c1 c2
y=int(int(t^2*exp(-3*t*x),t)+c1,x)+c2
例:计算广义积分 S = ∫ − ∞ ∞ 1 1 + t 2 d t S=\int_{-\infty}^{\infty}\frac{1}{1+t^2}dt S=∫−∞∞1+t21dt。
syms t
S=int(1/(1+t^2),-inf,inf)
8、求解一阶偏微分方程
利用MATLAB中pdepe函数求解一般的偏微分方程组-百度经验 (baidu.com)
9、定义全局变量
global函数
用法
clc;clear
global a
a=5