一.方程求解(符號(hào)求解嘉汰、數(shù)值求解)
- solve
通常在不確定方程是否有符號(hào)解的時(shí)候购撼,推薦先使用solve進(jìn)行嘗試蔬将,因?yàn)閟olve相比于數(shù)值求解來(lái)說(shuō),它不需要提供初值渡八,并且一般情況下能夠得到方程的所有解啃洋。對(duì)于一些簡(jiǎn)單的超越方程,solve還能夠自動(dòng)調(diào)用數(shù)值計(jì)算系統(tǒng)給出一個(gè)數(shù)值解屎鳍。
對(duì)于solve的參數(shù)采用字符型輸入不好宏娄,最好采用采用符號(hào)變量輸入:
solve('10^(-4.74)*0.965*y/60000x/(10^(-4.74)+x)+0.1/36500+10^(-14)/x-x=0','10^(-3.2)*x+0.333/3000+8*10^((-3.2)*0.1+0.1/333*y','x','y')
syms x y
eq1=10^(-4.74)*0.965*y/60000x/(10^(-4.74)+x)+0.1/36500+10^(-14)/x-x
eq2=10^(-3.2)*x+0.333/3000+8*10^((-3.2)*0.1+0.1/333*y
sol=solve(eq1,eq2,x,y)
- fzero
很多情況下solve并不能求得方程的解析解,這時(shí)就可以采用數(shù)值法求解逮壁。
fzero只適用求解一元函數(shù)零點(diǎn)孵坚,而fsolve適用于求解多元函數(shù)零點(diǎn)(包括一元函數(shù))。當(dāng)求解一元函數(shù)零點(diǎn)時(shí)窥淆,推薦優(yōu)先使用fzero
x = fzero(fun,x0)
[x,fval] = fzero(fun,x0)
如果方程有多個(gè)零點(diǎn)時(shí)卖宠,fzero只能根據(jù)你提供的初值求得最靠近初值的一個(gè)零點(diǎn),如果希望求得多個(gè)零點(diǎn)的話(huà)忧饭,那么只能夠通過(guò)改變初值來(lái)得到不同的零點(diǎn)扛伍。
fzero能夠提供區(qū)間搜索,注意區(qū)間兩端的端點(diǎn)函數(shù)值符號(hào)需要反向:
y=@(x)sin(x)+cos(x).^2
[x,fval]=fzero(y,[-1 1]) %fzero在[-1,1]這個(gè)區(qū)間搜索初值
- fsolve
x = fsolve(fun,x0)
[x,fval] = fsolve(fun,x0)
其中fun為函數(shù)句柄词裤,x0為搜索初值刺洒,fval為求解誤差
eq = @(x)[x(1)+x(2)=1;x(1)-11x(2)=5]
[sol,fval] = fsolve(eq,[1,1])
- vpasolve
S = vpasolve(eqn)
S = vpasolve(eqn,var)
S = vpasolve(eqn,var,init_guess)
___ = vpasolve(___,Name,Value)
其中eqn是符號(hào)方程,var為需要求解的變量吼砂,也可以不提供(第一種形式作媚,這是默認(rèn)求解變量由symvar(eqn)求得),init_guess為搜索初值帅刊,Name,Value為一些選項(xiàng)控制。- 對(duì)于多項(xiàng)式方程漂问,vpasolve能夠給出所有解赖瞒。
- 對(duì)于非多項(xiàng)式方程女揭,vpasolve只給出一個(gè)解,這時(shí)可以提供搜索初值栏饮,來(lái)改變它找到的解:
vpasolve(sin(x^2) == 1/2,x,100)
吧兔。 - 可以指定搜索范圍,直接在輸入?yún)?shù)中指定:
vpasolve(x^8 - x^2 == 3,x,[-Inf Inf]) %實(shí)數(shù)范圍內(nèi)求解
袍嬉。 - 將‘random’選項(xiàng)設(shè)置為true可以直接搜索指定范圍內(nèi)不同解:
syms x f = x-tan(x); for n = 1:3 vpasolve(f,x,'random',true) end
二.浮點(diǎn)數(shù)誤差處理
在進(jìn)行數(shù)值計(jì)算判斷兩數(shù)相等時(shí)境蔼,最好不要直接判斷,而是設(shè)立一個(gè)容差值伺通,當(dāng)兩個(gè)浮點(diǎn)數(shù)
的差的絕對(duì)值小于給定的容差值時(shí)箍土,我們就認(rèn)為這兩個(gè)浮點(diǎn)數(shù)相等。
a=0.1:0.1:0.5 %結(jié)果:a = 0.1000 0.2000 0.3000 0.4000 0.5000
tol=eps(0.3)*10 %設(shè)立容差值罐监,一般比這個(gè)點(diǎn)的浮點(diǎn)數(shù)誤差高一到兩個(gè)數(shù)量級(jí)即可吴藻。eps函數(shù)能夠求得該點(diǎn)的浮點(diǎn)數(shù)誤差值。結(jié)果:tol = 5.5511e-15
find(abs(a-0.3)<tol) %結(jié)果:ans = 3
三.生成一系列有規(guī)律名變量(eval()(不推薦)/元胞數(shù)組(推薦))
生成一個(gè)多項(xiàng)式:y=x1+2*x2+3*x3+…+100*x100
x=sym('x',[1,100])
w=(1:100).*x
y=sum(w)
四.統(tǒng)計(jì)向量中連續(xù)出現(xiàn)的數(shù)字并計(jì)數(shù)(diff)
五.讀取文本文件
- csvread
用于讀取形式比較簡(jiǎn)單的文本文件弓柱,文件內(nèi)容只包括數(shù)值沟堡,并且以逗號(hào)或空格為分隔符。
M = csvread(filename)
- dlmread
它能夠指定分隔符(csvread只能讀取逗號(hào)分隔符和空格分隔符)矢空。如果行列數(shù)不一致的數(shù)據(jù)航罗,dlmread會(huì)自動(dòng)在空白數(shù)據(jù)處補(bǔ)0。
M = dlmread(filename)
M = dlmread(filename, delimiter)
- fscanf
按指定格式從文本文件中讀取數(shù)據(jù)屁药。
A = fscanf(fileID,formatSpec);
通過(guò)指定讀取格式formatSpec從文本文件中讀取數(shù)據(jù)至列向量A粥血。fscanf會(huì)重復(fù)應(yīng)用格式字符串formatSpec直到文件指針到達(dá)文件末尾,如果讀取到不能匹配formatSpec的數(shù)據(jù)則讀取將自動(dòng)結(jié)束者祖。
A = fscanf(fileID,formatSpec,sizeA);
sizeA能夠指定讀取數(shù)據(jù)的大小立莉,當(dāng)讀取到sizeA大小的數(shù)據(jù)時(shí),文件指針會(huì)停止七问,讀取結(jié)束蜓耻。fscanf讀取的是列主序,通常讀取完還需要進(jìn)行轉(zhuǎn)置操作械巡。所要讀取的文本文件被文件標(biāo)識(shí)符fileID標(biāo)識(shí)刹淌,通過(guò)fopen函數(shù)可以獲取文件的fileID。當(dāng)結(jié)束讀取時(shí)讥耗,記得使用fclose函數(shù)關(guān)閉文件有勾。 - textscan
C = textscan(fileID,formatSpec)
C = textscan(fileID,formatSpec,N)
同fscanf一樣,fileID為文件標(biāo)識(shí)符古程,formatSpec為格式字符串蔼卡。N則是重復(fù)匹配formatSpec的次數(shù)。
1. 內(nèi)部數(shù)學(xué)常數(shù)
2. 基本數(shù)學(xué)運(yùn)算符
3. 關(guān)系運(yùn)算符
4. 常用內(nèi)部數(shù)學(xué)函數(shù)
5. 自定義函數(shù)-調(diào)用時(shí):
“[返回值列]=M文件名(參數(shù)列)”
function 返回變量=函數(shù)名(輸入變量)
注釋說(shuō)明語(yǔ)句段(此部分可有可無(wú))
函數(shù)體語(yǔ)句
6. 函數(shù)的復(fù)合運(yùn)算
compose(f,g)
返回值為f(g(y))
compose(f,g,z)
返回值為f(g(z))
compose(f,g,x,.z)
返回值為f(g(z))
compose(f,g,x,y,z)
返回值為f(g(z))
7. 因式分解
syms 表達(dá)式中包含的變量
factor(表達(dá)式)
8. 代數(shù)式展開(kāi)
syms 表達(dá)式中包含的變量
expand(表達(dá)式)
9. 合并同類(lèi)項(xiàng)
syms 表達(dá)式中包含的變量
collect(表達(dá)式挣磨,指定的變量)
10. 數(shù)學(xué)式化簡(jiǎn)
syms 表達(dá)式中包含的變量
simplify(表達(dá)式)
11. 變量替換
syms 表達(dá)式和代換式中包含的所有變量
subs(表達(dá)式雇逞,要替換的變量或式子荤懂,代換式)
12. 解方程
solve(’方程’,’變?cè)?
13. 解不等式
maple('maple中解不等式的命令')*
具體來(lái)說(shuō)有五種:
maple(' solve(不等式)')
maple(' solve(不等式塘砸,變?cè)? )
maple(' solve({不等式}节仿,變?cè)? )
maple(' solve(不等式,{變?cè)獇)' )
maple(' solve({不等式}掉蔬,{變?cè)獇)' )
14. 畫(huà)圖
(1)x=1:100;y=x.^2;plot(x.^2);
(2)ezplot('x.^2+y.^2-1');
(3)function fplottest
fplot(@test,[-5,5])
function y=test(x)
y1=x(:).^2;
y2=x(:);
y=[y1,y2]
15. 求極限
極限
syms x
limit(f(x), x, a)單側(cè)極限(左/右)
syms x
limit(f(x), x, a,'left'/'right')
16. 求導(dǎo)數(shù)
diff('f(x)')
diff('f(x)','x')
或者
Syms x
diff(f(x))
diff(f(x),x)
17. 求高階導(dǎo)數(shù)
diff('f(x)',n)
diff('f(x)','x',n)
或者
syms x
diff(f(x),n)
diff(f(x),x,n)
18. 求隱函數(shù)
maple('implicitdiff(f(x,y)=0,y,x)')*
20. 定積分廊宪、不定積分、廣義積分(int)
#定積分
syms x
int(f(x))
int(f(x),x)
#不定積分
syms x
int(f(x),a,b)
int(f(x),x,a,b)
-
數(shù)值積分函數(shù):integral
q = integral(fun,xmin,xmax)
q = integral(fun,xmin,xmax,Name,Value)
其中fun為函數(shù)句柄女轿,xmin為積分下限箭启,xmax為積分上限,Name和Value是一些選項(xiàng)控制谈喳,包括誤差册烈、向量化積分等等。
q=@(k,w)w.^2/10.*coth(30*k)-k
v=@(w)fzero(@(k)q(k,w),1e3) %利用fzero求解k,相當(dāng)于顯式表達(dá)k
integral(v,0,10,'ArrayValued',1)
-
離散點(diǎn)積分函數(shù):trapz
I=trapz(x,y)
其中 x和y分別是自變量和對(duì)應(yīng)函數(shù)值
#以 sin(x)在[0,pi]積分為例:
x=linspace(0,pi,1e3); %生成[0,pi]內(nèi)的一系列離散點(diǎn)
y=sin(x);
I=trapz(x,y)
21. 換元積分
22. 分部積分
23. 對(duì)數(shù)列和級(jí)數(shù)進(jìn)行求和
syms n
symsum(f(n), n ,a ,b )
24. 連乘
maple('product(f(n),n=a..b)')
25. 展開(kāi)級(jí)數(shù)
syms x
Taylor(f(x), x, n, a)
26. 積分變換
27. 解微分方程
dsolve('微分方程'婿禽,'自變量')
dsolve('微分方程'赏僧,'初始條件或邊界條件','自變量')
28. 解微分方程組
dsolve('微分方程組'扭倾,'自變量')
dsolve('微分方程組'淀零,'初始條件或邊界條件','自變量')