⑴ 如何求含n個參數的非線性方程組的通解
1、對增廣矩陣B施行初等行變換化州蠢為行階梯形。若R(A)<R(B),則方程組無解。
2、若R(A)=R(B),則進一步將B化為行最簡形。
3、設R(A)=R(B)=r;把行最簡形中r個非零行的非0首元所對應森此的未知數用其餘n-r個未知數(自由未知數)表示,並令自由未知數分別等於
即可寫出含n-r個參數的通解。
(1)非線性方程組求解演算法擴展閱讀:
非齊次線性方程組的通解=齊次線性方程組的通解+非齊次線性方程組的一個特解(η=ζ+η*)
非齊次冊春陪線性方程組Ax=b有解的充分必要條件是:系數矩陣的秩等於增廣矩陣的秩,即rank(A)=rank(A, b)(否則為無解)。
非齊次線性方程組有唯一解的充要條件是rank(A)=n。
非齊次線性方程組有無窮多解的充要條件是rank(A)<n。(rank(A)表示A的秩)
⑵ 非線性方程組解法
非線性方程組可以表示為:
在位移為基本未知量的有限元分析中, 是結點位移向量, 是結點載荷向量。對於線性方程組 ,由於 是常數矩陣,可以沒有困難直接求解。對於非線性方程組需要迭代求解。
只適用於與變形歷史無關的非線性問題,例如非線性彈性問題,利用形變理論分析的彈塑性問題,穩態蠕變問題等。對於依賴於變形歷史的非線性問題,應力需要由應變所經歷的路徑決定,直接迭代法不適用。例如載入路徑不斷變化或涉及卸載和反復載入等彈塑性問題。此時要利用增量理論。
可以指出,當 是凸曲線(如圖所示),其中 是標量,即系統為單自由度情形,通常解收斂。
(1)方程可以改寫為
選擇一個初始的試探解 代入上式可以得到初始的 ,接著可以得到第一步迭代的位移解 ,由此類推得到第 次迭代後的近似解 ,一直到誤差的某種范數小於某個規定的容許小量 ,即 ,上述迭代終止。
為避免每次迭代對剛度矩陣 進行求逆計算,一般可以將剛度矩陣設定為常數進行迭代過程,單自由度系統下的常剛度直接迭代法如圖所示
一般情況下,(1)不能被精確地滿足,即 ,為了得到進一步的近似解 (假設 為某單自由度方向上的位移) ,將 表示成在 附近的僅保留線性項的Taylor展開式
且有
式中 是切線矩陣(tangent matrix),即
其迭代過程如圖所示
核心思想是將載荷分解成若干增量步,即 ,相應的位移也分為同樣的步數,即 ,每兩步之間的增長量稱之為增量。增量解法的一般做法是假設第 步的載荷 和相應的位移 為已知,然後將載荷增加為 ,如果每一步的載荷增量 足夠小,則解的收斂性可以保證。
使用增量法的(1)式改寫為如下形式(位移均以單自由度為例)
,其中 是用來表示載荷變化的參數,將上式對 求導,可以得到
其中 為定義的切線剛度矩陣。
(4)式是一典型的常微分方程組問題,下面介紹的是有限元中對這類方程組的求解方法
1.歐拉方法(單自由度為例)
顯然為了滿足精度要求, 必須是足夠小的量。使用Runge-Kutte方法可以改善精度
此方法會導致解的漂移(與真實曲線上的解產生較大的誤差)
為了克服每一增量步解的誤差可能導致的解的漂移,可以將(5)式改寫為
這里解釋一下
此方法稱為考慮平衡矯正的歐拉增量方法,即將前增量步的載荷和內力的不平衡量合並到當前增量步求解,一定程度上避免了解的漂移。
2.N-R方法
為了改進歐拉法的精度,現在更多採用N-R方法,如果採用N-R方法,是在每一增量步內進行迭代
則對於 的 次增量步的第 次迭代可以表示為
表示成前述的N-R形式為
採用mN-R迭代
利用mN-R方法求解非線性方程組時,可以避免每次迭代重新形成和求逆切線矩陣,但是降低了收斂速度,特別是 曲線突然趨於平坦的情況
有Aitken加速的迭代和無Aitken加速的迭代如圖所示
在研究載荷增量步長自動選擇的方法時,首先是假設載荷的分布模式是給定的,變化的只是他的幅值,在此情況下,外載荷可以表示為:
等效結點載荷向量可以表示為:
是載荷幅值,載荷分布實際是 的分布
求解上述載荷分布方程依然是一個N-R迭代過程,設
是經過n+1次迭代修正後得到的 數值
下面是幾種常用的自動選擇載荷步長的方法
此方法對於計算結構的極限載荷很有效,利用本步剛度參數可以使步長調整的比較合理,並可以減少總的增量步數,適合於計算由理想彈塑性材料組成結構的極限載荷情況。
第i增量步結構的總體剛度可用下式度量
初始結構總體剛度的度量是
其中 和 是載荷向量和按彈性分析得到的位移向量。
(1) 利用」本步剛度參數「的規定變化量自動選擇增量步長。
稱為第i步的」本步剛度參數「,它代表結構本身的剛度性質,與載荷增量大小無關,當結構處於完全彈性時, ,隨著塑性區擴大,結構變軟, 逐漸減小,到達極限載荷時,
對於比例載入的情況:
是極限載荷參數, 是 時的結點載荷向量
利用本步剛度參數可以使步長調整得比較合理,並可以減少總的增量步
(2) 增量步長的自動選擇
利用(1)得到的」本步剛度參數「的規定變化量自動選擇增量步長,具體的演算法步驟如下
1、求彈性極限載荷參數
先施加任意載荷 ,假定結構為完全彈性求解,求出結構的最大等效應力 ,則有
是材料的初始屈服應力
2、給定第一步載荷參數增量 的值可以事先給定,用 求解第一增量步
3、給定第二及以後各增量步的剛度參數變化的預測值 ,其大小決定步長的大小,例如可在0.05~0.2之間選擇,並給定剛度的最小允許值 ,則每步載荷參數增量為
然後用 求解第 增量步
然後可以通過(1)中的公式計算出」本步剛度參數「
以 迭代為例,它可以表示為
在載荷增量步長自動控制的求解方法中, 可以表示成
其中
以上兩式中:
因此(7)可以改寫為
其中
是在第 次迭代中由某個規定的約束條件來確定的載荷因子增量 的第 次修正量。在現在的方法中,這個條件就是某個結點的位移增量的大小,例如規定 中的最大分量 是給定的,此條件可以表示為
其中 是 的規定值, 是除第g個元素為1,其餘元素為零的向量,具體迭代演算法步驟如下:
(1)計算對於節點載荷模式 的位移模式 ,即
(2)計算對於不平衡結點力向量 的位移增量修正值 和 次迭代後位移增量修正值的全量 ,即
其中 是待定載荷因子增量的修正值
(3)利用條件(8)確定 ,由於
從上式可以得到
這樣就確定了第 次迭代後的載荷因子增量
載荷因子增量求出之後,可以知道每一步的外載荷,從而使用 法迭代得到位移,進而求出應變,應力和當前增量步的內力等物理量。並檢驗收斂准則是否滿足,如未滿足,回到步驟二進行新的一次迭代,直至收斂准則滿足為止。 關於每一個增量步某個指定結點位移增量 本身的選擇,通常的方法是第1個增量步可以由某個給定的載荷因子增量 (例如令 ,其中p_e是彈性極限載荷因子, 可取5~10),通過求解得到 ,以後各增量步的 可由下式確定,即
其中
以上是王勖成的有限單元法給出的非線性方程組解法以及一些提高運算效率的策略,如有補充或者理解偏差,請聯系指正。
⑶ 牛頓迭代法解非線性方程組
一元非線性方程的牛頓迭代公式和原理
以一元非線性方程 f(x)=0 為例,對函數 f(x)進行Taylor級數展開(只展開至線性項)得
f(x) = f(x0)+f'(x0)(x-x0)
所以方程可寫成
f(x0)+f'(x0)(x-x0) = 0
其中x0是給定的已知值,肆胡源則不難推導出方程的解(當然,只是近似解,畢竟Taylor展開過程中只取了線性項)
x = x0 - f(x0) / f'(x0)
其中x不是真實解,但是相比之前的x0更靠近真實解了,因此可以多重復幾次上述過做脊程,裂態從而使得到的解非常接近准確值。所以,對於一元非線性方程,牛頓拉夫遜迭代公式為:
x(k+1) = x(k) - f(x(k))/ f'(x(k))
根據Taylor級數的幾何意義我們可以從幾何上形象的看牛頓迭代法的求解f(x)=0的過程。
第一次迭代x1 = x0 - f(x0)/ f'(x0),其中f(x0)/ f'(x0)的幾何意義很明顯,就是x0到x1的線段長度(這可以從直角三角形的知識得到)。第二次迭代x2= x1 - f(x1)/ f'(x1),其中f(x1)/ f'(x1)的幾何意義很明顯,就是x1到x2的線段長度。同理可以進行第三次迭代第四次迭代,可以明顯的看出x的取值在不斷逼近真實解x*。
⑷ 非線性方程組數值解法的割線法
若對方程組 (1)線性化時使用插值方法確定線性方程組
(6)
中的Ak和bk,則可得到一類稱為割線法的迭代序列。假定已知第k步近似尣k,為確定Ak和bk,可在尣附近取n個輔助點у忋(j=1,2,…,n),使n個向量
線性無關,由插值條件可知
由此可求得
由(6)解得
以此作為方程 (1)的新近似,記作
,於是得到
(7)
(7)稱為解非線性方程組的割線法。輔助點у忋 取得不同就得到不同的割線法程序,例如取
為常數(j=1,2,…,n),就得到與(5)相同的程序,由於它只依賴於尣點的信息,故也稱一點割線法,若取
它依賴於點尣及
, 稱為兩點割線法。其他多點割線法由於穩定性差,使用較少。
非線性方程組數值解法 - 布朗方法 布朗採用對每個分量方程 ƒi(尣)=0逐個進行線性化並逐個消元的步驟,即在每迭代步中用三角分解求線性方程組的解,得到了一個效率比牛頓法提高近一倍的迭代法,即
式中
(8)中當i=n時求得xn記作
,再逐次回代,求出
(i=n-1,n-2,…,1)就完成了一個迭代步。布朗迭代程序的斂速仍保持p=2,而每一迭代步的工作量
,故效率
對這方法還可與牛頓法一樣進行改進,得到一些效率更高的演算法。這類方法是70年代以來數值軟體包中常用的求解非線性方程組的演算法。
非線性方程組數值解法 - 擬牛頓法 為減少牛頓法的計算量,避免計算雅可比矩陣及其逆,60年代中期出現了一類稱為擬牛頓法的新演算法,它有不同的形式,常用的一類是秩1的擬牛頓法,其中不求逆的程序為
式中
,
,
,稱為逆擬牛頓公式。計算時先給出尣及 B0,由(9)逐步迭代到滿足精度要求為止。每步只算 n個分量函數值及O(n)的計算量,比牛頓法一步計算量少得多。理論上已證明,當尣及B0選得合適時,它具有超線性收斂速度,但實踐表明效率並不高於牛頓法,理論上尚無嚴格證明。
非線性方程組數值解法 - 最優化方法 求方程組 (1)的問題等價於求目標函數為
的極小問題,因此可用無約束最優化方法求問題(1)的解(見無約束優化方法)。 非線性方程組數值解法 - 連續法 又稱嵌入法,它可以從任意初值出發求得方程組(1)的一個足夠好的近似解,是一種求出好的迭代初值的方法。連續法的基本思想是引入參數 t∈【0,b】,構造運算元H(尣,t),使它滿足條件:H(尣,0)=ƒ0(尣),H(尣,b)=ƒ(尣),其中ƒ0(尣)=0的解尣0是已知,方程:
(10)
在t∈【0,b】上有解尣=尣(t),則尣(b)=尣就是方程(1)的解。當b有限時,通常取b=1,例如可構造。
(11)
這里尣是任意初值,顯然H(尣,0)=0,H(尣,1)=ƒ(尣)。為了求得(10)在t=1的解尣=尣(1),可取分點0=t0<t1<…<tN=1在每個分點ti(i=1,2,…,N)上,求方程組 H(尣,ti)=0 (i=1,2,…,N) (12)
的解尣,如果取尣為初值,只要
足夠小,牛頓迭代就收斂,但這樣做工作量較大。已經證明,如果方程組(12)只用一步牛頓法,當t=tN=1時,再用牛頓迭代,結果仍具有2階收斂速度。以(11)為例,得到連續法的程序為:
若H(尣,t)的偏導數Ht(尣,t)及
在D×【0,1】嶅R
上連續。且
非奇異,則由(10)對t求導可得到等價的微分方程初值問題:
(13)
於是求方程(10)的解就等價於求常微初值問題(13)的解,求(13)的解可用數值方法由t=0計算到t=tN=b得到數值解
。已經證明只要N足夠大,以尣為初值再進行牛頓迭代可收斂到方程(1)的解x,這種演算法稱為參數微分法。
20世紀60年代中期以後,發展了兩種求解非線性方程組(1)的新方法。一種稱為區間迭代法或稱區間牛頓法,它用區間變數代替點變數進行區間迭代,每迭代一步都可判斷在所給區間解的存在惟一性或者是無解。這是區間迭代法的主要優點,其缺點是計算量大。另一種方法稱為不動點演算法或稱單純形法,它對求解域進行單純形剖分,對剖分的頂點給一種恰當標號,並用一種有規則的搜索方法找到全標號單純形,從而得到方程(1)的近似解。這種方法優點是,不要求ƒ(尣)的導數存在,也不用求逆,且具有大范圍收斂性,缺點是計算量大。
⑸ 數值隨機化演算法求非線性方程組
參見博文:http://blog.csdn.net/liufeng_king/article/details/9029091
//隨機化演算法 解線性方程組
#include "stdafx.h"
#include "RandomNumber.h"
#include <iostream>
using namespace std;
bool NonLinear(double *x0,double *dx0,double *x,double a0,
double epsilon,double k,int n,int Steps,int M);
double f(double *x,int n);
int main()
{
double *x0, //根初值
*x, //根
*dx0, //增量初值
a0 = 0.0001, //步長
epsilon = 0.01, //精度
k = 1.1; //步長變參
int n = 2, //方程個數
Steps = 10000, //執行次數
M = 1000; //失敗次數
x0 = new double[n+1];
dx0 = new double[n+1];
x = new double[n+1];
//根初值
x0[1] = 0.0;
x0[2] = 0.0;
//增量初值
dx0[1] = 0.01;
dx0[2] = 0.01;
cout<<"原方程組為:"<<endl;
cout<<"x1-x2=1"<<endl;
cout<<"x1+x2=3"<<endl;
cout<<"此方程租的根為:"<<endl;
bool flag = NonLinear(x0,dx0,x,a0,epsilon,k,n,Steps,M);
while(!flag)
{
flag = NonLinear(x0,dx0,x,a0,epsilon,k,n,Steps,M);
}
for(int i=1; i<=n; i++)
{
cout<<"x"<<i<<"="<<x[i]<<" ";
}
cout<<endl;
return 0;
}
//解非線性方程組的隨機化演算法
bool NonLinear(double *x0,double *dx0,double *x,double a0,
double epsilon,double k,int n,int Steps,int M)
{
static RandomNumber rnd;
bool success; //搜索成功標志
double *dx,*r;
dx = new double[n+1]; //步進增量向量
r = new double[n+1]; //搜索方向向量
int mm = 0; //當前搜索失敗次數
int j = 0; //迭代次數
double a = a0; //步長因子
for(int i=1; i<=n; i++)
{
x[i] = x0[i];
dx[i] = dx0[i];
}
double fx = f(x,n); //計算目標函數值
double min = fx; //當前最優值
while(j<Steps)
{
//(1)計算隨機搜索步長
if(fx<min)//搜索成功
{
min = fx;
a *= k;
success = true;
}
else//搜索失敗
{
mm++;
if(mm>M)
{
a /= k;
}
success = false;
}
if(min<epsilon)
{
break;
}
//(2)計算隨機搜索方向和增量
for(int i=1; i<=n; i++)
{
r[i] = 2.0 * rnd.fRandom()-1;
}
if(success)
{
for(int i=1; i<=n; i++)
{
dx[i] = a * r[i];
}
}
else
{
for(int i=1; i<=n; i++)
{
dx[i] = a * r[i] - dx[i];
}
}
//(3)計算隨機搜索點
for(int i=1; i<=n; i++)
{
x[i] += dx[i];
}
//(4)計算目標函數值
fx = f(x,n);
j++;
}
if(fx<=epsilon)
{
return true;
}
else
{
return false;
}
}
double f(double *x,int n)
{
return (x[1]-x[2]-1)*(x[1]-x[2]-1)
+(x[1]+x[2]-3)*(x[1]+x[2]-3);
}
⑹ 非線性方程組的解法matlab
用matlab求解非線性方程組方法,可以用下列方法來實現:
方法一,使用solve函數求解
x = optimvar('x');
y = optimvar('y');
prob = optimproblem;
prob.Objective = -x - y/3;
prob.Constraints.cons1 = x + y <= 2;
prob.Constraints.cons2 = x + y/4 <= 1;
prob.Constraints.cons3 = x - y <= 2;
prob.Constraints.cons4 = x/4 + y >= -1;
prob.Constraints.cons5 = x + y >= 1;
prob.Constraints.cons6 = -x + y <= 2;
sol = solve(prob)
方法二,使用fsolve函數求解
F = @(x) [2*x(1) - x(2) - exp(-x(1)); -x(1) + 2*x(2) - exp(-x(2))];
x0=[-5;-5];
[x,fval] = fsolve(F,x0)
方法三,使用迭代法求解,如Newton迭代法
m=3;
x0=zeros(m,1);
tol=1e-6;
x=x0-dfun(x0)\fun(x0);
n=1;
while(norm(x-x0>tol)) & n<1000
x0=x;
x=x0-dfun(x0)\fun(x0);
n=n+1;
end
x
這里,fun是原方程組,dfun是導數方程組
⑺ 非線性方程組數值解法的介紹
20世紀60年代中期以後,發展了兩種求解非線性方程組(1)的新方法。一種稱為區間迭代法或稱區間牛頓法,它用區間變數代替點變數進行區間迭代,每迭代一步都可判斷在所給區間解的存在惟一性或者是無解。這是區間迭代法的主要優點,其缺點是計算量大。另一種方法稱為不動點演算法或稱單純形法,它對求解域進行單純形剖分,對剖分的頂點給一種恰當標號,並用一種有規則的搜索方法找到全標號單純形,從而得到方程(1)的近似解。這種方法優點是,不要求f(□)的導數存在,也不用求逆,且具有大范圍收斂性,缺點是計算量大
⑻ 非線性方程組總共有哪些解法
主要是數值分析法,和解析法。牛頓迭代是數值分析法,還可以用神經網路法,及改進的神經網路法。
⑼ 非線性方程組能用什麼方法求解,比如牛頓法,還有什麼其他方法
非線性方程,就是因變數與自變數之間的關系不是線性的關系,這類方程很多,例如平方關系、對數關系、指數關系、三角函數關系等等。求解此類方程往往很難得到精搏搏確解,經常需要求近似解問題。相應的求近似解的方法也逐漸得到大家的重視。
這些方程可分為兩類,一種是多項式方程,一種是非多項式方程。基衡祥如何求解第一類多項式方攔沒程,現在已經有了比較成熟的理論和方法。現在比較常用的一種數值方法是迭代法,他能夠通過迭代次數的增加,而越來越接近方程的解。至於如何求解第二類非多項式方程,是現在數學領域中的一個重點研究方向。一般來說,求解此類方程是採用隨機搜索的辦法。
⑽ 如何用matlab解多元非線性方程組
使用solve函數。
舉個例子,解非線性方程組 x^2+y^3=10 x^3-y^2=1 其中x,y為方程組的未知量 在Matlab的命名窗口中輸入:
syms x y [x y]=solve('x^2+y=10','x^2-y^2=1','x','y') 即可 輸出計算結果為:
x = (37^(1/2)/2 + 21/2)^(1/2) (21/2 - 37^(1/2)/2)^(1/2) -(21/2 - 1/2*37^(1/2))^(1/2) -(1/2*37^(1/2) + 21/2)^(1/2)
y = - 37^(1/2)/2 - 1/2 37^(1/2)/2 - 1/2 37^(1/2)/2 - 1/2 - 37^(1/2)/2 - 1/2
具體solve函數的使用方法,通過輸入help solve來學習。