1. 程式人生 > >使用matlab進行非線性方程組求解

使用matlab進行非線性方程組求解

今天,恰好遇到使用matlab進行了非線性方程組的求解。

情況是,一些無法手動表示,推導的方程組,比如像超越方程這種,可以用matlab進行直接求值,這在一些需要模擬資料的場景比較有用。

環境:matlab2015a

函式:Symbolic Math Toolbox裡面的sym和solve函式。其中sym在第一個紅框中,solve在第二個紅框中。



1.solve

格式:(1)Y = solve(eqns,vars)

(2)[y1,...,yN] = solve(eqns,vars)

先解釋兩個引數吧,

①eqns就是你的方程組,方程組裡面的各個方程是組織為一個數組的。

所以你可以直接使用 [方程1,方程2,。。。。,方程n] 對應於eqns輸入引數。

也可以後面會將到,將eqns宣告為一個數組,然後帶入eqns輸入即可,這樣方便編輯。

②vars就是你想要返回的求得的未知變數,如果你不明確指定,那他就會按照sym的對應。

③返回值,有兩種。Y代表一個結構體,將返回的變數通通放入結構體Y裡面,然後訪問和C語言的結構體一樣,假設Y下面有兩個成員,y1,y2,

你直接Y不會顯示裡面的值,要Y.y1 Y.y2才能顯示。

[y1,y2,...,yN]就是直接對應於vars裡面你直接想要求得的值,如果沒有明確指定vars就按預設對應。

注:(1)vars如果你不明確指定的話,在引數少的時候也容易分清返回自己想要的,但是如果引數過多還是最好明確指定自己想要的引數。

(2)Y和[y1,y2,...,yN]兩種返回賦值方式各有優缺點,Y你訪問裡面的元素的話比較麻煩,

[y1,y2,...,yN]這種情況如果N有幾十個,你這樣輸入很煩,而這個時候全部存入Y中,再用一個for迴圈遍歷就能存入一個向量中了。

(3)然而突然發現,在結構體中的元素並不能使用下標來遍歷,目前還在糾結中。。。

2.sym

先講下這個函式用來幹什麼的,在matlab中,你可以直接用變數,但是你必須要賦值。

比如你想要輸入a=b+c;

你的a和b首先要初始化,即b和c是要有值的。

那麼問題就來了,我求解方程的時候就是不知道未知數才求解,如何賦值呢?

這個時候就需要使用sym宣告符號變量了。它宣告的未知量不用賦值。

格式:A = sym('a',[m,n])

這個的意思就是說,生成一個m,n維的矩陣A,然後它的每一個元素用a來標識。

注意:用a的標識是它標識矩陣內部的元素,你要使用該未知量還是需要按照正常的矩陣元素訪問方法,比如A(1,2)這樣。

3.舉個栗子

求解方程組:3x1+2x2=5

                      5x1+3x2=8

(1)求解


(2)直接使用 [方程1,方程2] 作為solve的引數


(3)用結構體返回值的形式


相關推薦

使用matlab進行非線性方程組求解

今天,恰好遇到使用matlab進行了非線性方程組的求解。 情況是,一些無法手動表示,推導的方程組,比如像超越方程這種,可以用matlab進行直接求值,這在一些需要模擬資料的場景比較有用。 環境:matlab2015a 函式:Symbolic Math Toolbox裡面的s

Matlab學習手記——非線性方程組求解:牛頓下山法

功能:牛頓下山法求解非線性方程組。 牛頓下山法 function [x, n] = NonLinearEquations_NewtonDown(x0, err) %{ 函式功能:牛頓下山法求解非線性方

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

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

計算方法之非線性方程組求解

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

python用fsolve、leastsq對非線性方程組進行求解

背景: 實現用python的optimize庫的fsolve對非線性方程組進行求解。可以看到這一個問題實際上還是一個優化問題,也可以用之前擬合函式的leastsq求解。下面用這兩個方法進行對比: 程

python Scipy求解非線性方程組和數值積分

#求解非線性方程組2x1-x2^2=1,x1^2-x2=2 from scipy.optimize import fsolve #匯入求解方程組的函式 from scipy import integrate def func(x:list): x1=x[0] x2=x[1]

利用牛頓法接非線性方程組Matlab程式例項

首先將線性方程組寫成f(x)=0的形式,編寫第一個Matlab函式 function f = fun() % 求解: % 3*x1-cos(x2*x3)-1/2 = 0 % x1^2-81*(x2

牛頓迭代法解非線性方程組MATLAB版)

牛頓迭代法,又名切線法,這裡不詳細介紹,簡單說明每一次牛頓迭代的運算:首先將各個方程式在一個根的估計值處線性化(泰勒展開式忽略高階餘項),然後求解線性化後的方程組,最後再更新根的估計值。下面以求解最簡單的非線性二元方程組為例(平面二維定位最基本原理),貼出原始碼: 1、

Newton-Raphson 法求解非線性方程組

      牛頓迭代法(Newton's method)又稱為牛頓-拉夫遜方法(Newton-Raphson method),它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得

利用牛頓迭代法求解非線性方程組

       最近一個哥們,是用牛頓迭代法求解一個四變數方程組的最優解問題,從網上找了程式碼去改進,但是總會有點不如意的地方,迭代的次數過多,但是卻沒有提高精度,真是令人揪心!        經分析,

Matlab 數值計算----牛頓法解非線性方程組

 Newtons.m函式 function[x_star,index,it]=Newtons(fun,x,ep,it_max) %求解非線性方程組的牛頓法,其中,fun(x)為需要求根的函式 %第一個

MATLAB 牛頓迭代法解非線性方程組

牛頓迭代法流程圖: Newton迭代法計算步驟 : (1) 取初始點x0,最大迭代次數N和精 度 ε。 (2) 如果 f' (x0)=0, 則停止計算;否則計算  x1 = x0 -f(x0)/

二分法,newton迭代法求解非線性方程組

解:package shuzhifenxi; publicclass Exam411 { publicstatic Boolean th = true; publicstaticintcount 

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

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

Matlab下核函式方法進行非線性分類

採用核函式方法對下列資料進行非線性分類。給出matlab具體程式碼,及採用訓練樣本進行測試得到的準確率結果。 x=[0 1 0 1 2 -1];y=[0 0 1 1 2 -1];z=[-1 1 1 -1 1 1];其中,(x,y)代表二維的資料點,z 表示相應點的型別屬性。

Matlab 方程組求解

(程式碼: 2\FangChengZhuQiuJie.m) x=[3 7 7;1 7 0;2 3 5]; b=[1 2 3]'; % x和b構成了方程組的係數矩陣 [L U]=lu(x); % 三角化係數矩陣 Y1=L\b;

matlab讀取大量檔案及MATLAB處理變引數多元非線性方程組

關於MATLAB讀取大量檔案及MATLAB處理變引數多元非線性方程組 迴圈讀取大量檔案 前段時間用MATLAB處理txt檔案時遇到了一個問題,由於txt檔案太多因此需要做成迴圈來依次處理500(實際上有5000多個)多個txt檔案。最主要的問題是fopen的引數是不能含有

數值計算-線性方程組求解(1)-LU分解-MATLAB實現

LU分解1 矩陣三角分解基本定理:設A∈Rn×n,若A的順序主子式detAk≠0(k=1,2,⋯,n),則存在唯一的Doolittle分解 A=LU,其中L為單位下三角矩陣,U為非奇異的上三角矩陣. A=L×U=⎡⎣⎢⎢⎢⎢⎢⎢⎢1l21l3

迭代法求解非線性方程組

#include<iostream> #include<math.h> using namespace std; int M;//允許迭代最大次數 double E;//允許的誤差 /*針對式子:x^2-10x+y^2+23=0xy^2+x-10y^

利用MATLAB進行曲線擬合

http face alt gen show cat sca 輸入 image 軟件環境:MATLAB2013a 一、多項式擬合 多項式擬合是利用多項式最佳地擬合觀測數據,使得在觀測數據點處的誤差平方和最小。 在MATLAB中,利用函數ployfit和ployv