1. 程式人生 > >matlab 數值分析 非線性方程與方程組的數值解法

matlab 數值分析 非線性方程與方程組的數值解法

  • feval

function x=fun(a,b)
x=a+b;
呼叫
1.feval(@fun,a,b);
2.feval(‘fun’,a,b);
作為引數時
function x=main(fun,y,yy)
c=feval(fun,a,b);

  • @(x)
    表示f為函式控制代碼,@(x)為定義控制代碼的運算子,這樣的函式控制代碼指向函式表示式。
    [email protected](x)acos(x)
    相當於建立了一個函式檔案
    %f.m
    function y=f(x)
    y=acos(x)
    %erfen.m
    feval(f,2)

  • 牛頓法中函式控制代碼求導

    [email protected](x)a*x+b;
    作為引數
    function [x,k]=fnewton(fun,x0,e)
    求其導函式,若
    dfun=diff(fun)
    報錯
    錯誤使用 diff
    類 ‘function_handle’ 不支援函式 ‘diff’。

可通過syms將函式控制代碼轉換為符號函式
用diff求導後
再通過matlabFunction轉換為函式控制代碼

syms x; % 通過符號變數將匿名函式轉換為符號函式
y=fun(x);
dfun=matlabFunction(diff(y)) % 通過matlabFunction將符號函式轉換為匿名函式
  • fzerotx
    fzero實現zeroin演算法(二分法,割線法和IQI演算法)
    fzerotx為fzero簡化而來
    fzerotx有兩個輸入引數,第一個輸入引數指定要計算零解的函式F(x);第二個引數指定初始的搜尋空間[a,b]
bessj0=inline('besselj(0,x)') % 第一類零階貝塞爾函式J0(x)
for n=1:10
z(n)=fzerotx(bessj0,[(n-1) n]*pi);
end
  • 一個函式作為引數傳遞給另一個函式
    三種方法:
    1.函式控制代碼
    2.內嵌物件
    3.匿名函式

函式控制代碼:在一個內部函式,或定義於M檔案的函式名字前加‘@’符號
@cos
@humps
@bessj0
其中bessj0.m為一個含兩行程式碼的m檔案

function y=bessj0(x)
y=besslj(0,x);

這樣,控制代碼就可以用作函式的函式的輸入引數

z=fzerotx(@bessj0,[0 pi]);

其中@besslj也是合法的函式控制代碼,對應一個帶兩個輸入引數的函式

內嵌物件:是一種定義簡單函式的方法,不用生成新的檔案
F=inline(‘cos(pi*t)’);
F=inline(‘besselj(0,x)’);
內嵌物件可以作為函式的函式的引數,如
z=fzerotx(F,[0 pi]);
內嵌物件可以用來直接計算函式的值
re=F(z);

匿名函式
從MATLAB第七版開始,內嵌物件可以被匿名函式代替

[email protected](t)cos(pi*t);
[email protected](z)z^3-2*z-5;
[email protected](x)besseij(0,x);
這些物件稱為匿名函式是因為類似
@(arguments)expression
的結構定義了函式控制代碼,但並沒有給它一個名字

M檔案,內嵌物件和匿名函式,可以定義超過一個輸入引數的函式。如將這些附加引數的值可以通過fzerotx傳遞給目標函式。
如J0(x)=0.5
定義一個帶兩個或者三個引數的內嵌物件
F=inline(‘besselj(0,x)-y’,’x’,’y’)
或者
B=inline(‘besselj(n,x)-y’,’x’,’n’,’y’)
定義一個帶兩個或者三個引數的匿名函式
[email protected](x,y)besselj(0,x)-y
或者
[email protected](x,n,y)besselj(n,x)-y
執行
xi=fzerotx(F,[0 2], .5)
或者
xi=fzerotx(F,[0 2],0, .5)
可得結果
也可以使用feval對函式引數求值。表示式
feval(F,x, )等價於F(x, )
區別在於,使用feval時,允許F作為一個被傳遞過來的引數。

相關推薦

matlab 數值分析 非線性方程方程組數值解法

feval function x=fun(a,b) x=a+b; 呼叫 1.feval(@fun,a,b); 2.feval(‘fun’,a,b); 作為引數時 function x=main(fun,y,yy) c=feval(fun,a,

數值分析實驗一(線性方程組的求解 基於matlab實現)

Jacobi Method The Jacobi Method is a form of fixed-point iteration. Let D denote the main diagonal of A, L denote the lower triangle of A (

Matlab方程方程組求解之二分法求解

控制代碼      圖形控制代碼和圖形之間是一種一一對應關係,簡單的說圖形控制代碼就是指向了這個圖形的一個變數,通過它可以設定該圖形的各種屬性。     控制代碼是matlab語言獨有的引數,相當於C語言的指標。控制代碼分為多種,如函式柄,物件柄,圖形柄等。圖形控制代碼就指一

【計算方法】實驗一 非線性方程求根數值解法

實驗目的 (1)通過對二分法與牛頓迭代法做程式設計練習和上機運算,進一步體會二分法和牛頓法的不同。 (2)編寫割線迭代法的程式,求非線性方程的解,並於牛頓迭代法作比較。 實驗內容 1、用牛頓迭代法求下列方程的根 (1) x^2-e^x=0 (2)

Matlab學習手記——非線性方程求解:二分法

功能:二分法求解非線性方程的一個解,採用遞迴的方式。 原始碼 function root = HalfInterval_Search(fun, a, b, eps) % 二分法求函式fun在區間[a

非線性方程-概念應用及解法

一:什麼是線性方程 線性方程也稱一次方程式,指變數均是一次冪的方程,其一般的形式是ax+by+…+cz+d=0,線性方程的本質是等式兩邊乘以任何相同的非零數,方程的本質都不受影響。因為在笛卡爾座標系上任何一個一次方程的表示都是一條直線,組成一次方程的每個項必須

數值分析第七章非線性方程MATLAB程式

二分法,最簡單的,貌似沒要求.... function [x, count] = bisection(fx,a,b,error,count) if(nargin == 4)%呼叫時不需要輸入count,計數用,使用者不需要知道 count = 1; end x

matlab方程最優化問題求解(1.1)-非線性方程數值求解

單變數非線性方程求解 matlab當中提供了fzero和fsolve函式可以求解該問題: 呼叫格式:z=fzero(@func,x0,tol,trace) func:待求根的函式檔名; x0:搜尋起點; tol:結果精確度,預設取eps; trace

[數值分析]二分法求解非線性方程

Problem1 描述 用二分法求方程x2−x−1=0x2−x−1=0的正根,要求誤差小於0.050.05. 題解 通過影象我們確定了一個大致的有根區間[−1,0][−1,0] 和[1,2]

[數值分析]不動點迭代法求解非線性方程

Promble1 求出f(x)=3x2−ex=0f(x)=3x2−ex=0的根,精確到小數點後的第4位。 解 首先我們利用matlab繪圖確定出根的大致區域。 由圖可知存在三個有根區間[−1

matlab非線性方程(組)的數值方法

matlab中解非線性方程(組)涉及兩個函式: fzero和fsolve。 這兩個函式的區別在於:fzero僅用於求解一元標量函式的零點;而fsolve可以求解多元向量函式的零點,也即可以用於求解方程組。 這兩個函式共同點在於:都使用迭代演算法求解,因此必須給定初始值。 兩

數值分析 Gauss-Seidel迭代法求解線性方程組 MATLAB程式實現

Gauss-Seidel迭代法 參考數值分析第四版 顏慶津著 P39 執行輸入為: 執行結果為: 以下是函式內容(儲存為gauss.m檔案,在MATLAB中執行): %function [G,d,x,N]=gauss(A,b) %Gauss-Seidel迭代

數值分析(三):C++實現線性方程組的高斯-賽德爾迭代法

線性方程組的直接解法之後,就輪到迭代解法了,直接解法針對的是低階稠密矩陣,資料量較少,而工程上有更多的是高階係數矩陣,使用迭代法效率更高,佔用的空間較小。 迭代法的最基本思想就是由初始條件,比如說初始解向量隨便列舉一個,就0向量也行,然後進行迭代,k到k+1,一步一步從k=1開始去逼近真實解

數值分析(二):C++實現三對角線方程組的追趕法

這次來實現三對角線方程組的追趕法,追趕法的本質還是高斯消元法,而且是沒選主元的高斯消元法,只是因為Ax=b中係數矩陣A非常特殊,所以就可以採用相對特殊的方法來解方程組。同樣,按照常規的步驟,先分析什麼是追趕法,再給出追趕法的數學步驟,最後用C++實現這種演算法。 (一)追趕法的功能和步驟 明

數值分析 最小二乘 matlab

      1. 已知函式在下列各點的值為   -1 -0.75 -0.5 0 0.25 0.5 0.75  

利用MATLAB解決數值分析的問題

下載連結為https://download.csdn.net/download/weixin_43429936/10776875 **數值分析有種各種的演算法,用於解決各種各樣的方程問題。整理了幾乎涵蓋所有解決方法的參考程式,**如圖: 下載連結為https://download.csdn

完美解決:出現root變數z,matlab求解方程方程組

用solve解一個方程時。發現結果出現root和變數z,什麼?? 原始碼: syms b m y eqn = (-b-2)* y^3+ 3* b *m*y^2-3*b*m^2*y+b*m^3== 0; y = solve(eqn, y) 結果: 好吧,上面這個結果完全看不懂?

數值分析-方程組解法

高斯消元 有線性方程組An×n * X n*1= Bn*1 當A滿秩是方程組有唯一解 高斯消元就是一個簡單的解方程組的辦法   高斯消元就是簡單的通過初等行變換,將A變成一個上三角矩陣 這樣就能從下到上一個一個的解出每個x的值,從而獲得方程組的解   簡單解釋:

Matlab中布林值/邏輯值數值型型別的相互轉換

在涉及到一些下標運算時,經常會遇到布林值與數值型的相互轉換。 數值型轉化為邏輯值 在MATLAB中常採用函式logical()將數值型資料轉換成邏輯型資料。數值型資料轉換成邏輯型的資料一般遵循這樣的規則:非0的數值型資料轉換成邏輯真,即1;等於0的數值轉換成邏輯假,即0。那麼按照

數值分析_Gauss的全消元列消元

說明 對於初學者來說,或者說對於我來說…一直覺得直接看矩陣的角標很難一下子就在腦海裡出現這個矩陣的元素應該出現的位置,所以在看一些數值分析的演算法的時候,就需要用文字將演算法慢慢的領悟。 主元法用比較通俗易懂的表達即是利用矩陣初等變換不改變矩陣的性質這個依據,選