c语言 栈求解表达式_非线性方程组的编程求解方法
【作者聲明】
本文所有文字均為作者原創,所有圖片均為作者本人親自拍攝或制作。
版權所有,僅供閱讀欣賞,禁止任何單位或個人以任何形式對本文的文字或圖片進行包括但不限于復制、轉載、引用、抄襲、截圖、模仿、翻譯、印刷等之中的一項或多項的行為。禁止將本文用于商業用途。
作者保留所有權利,請尊重作者的勞動成果,謝謝合作。
前言
我們在以前曾經寫過一篇文章,是關于科學計算器fx-991CN X求解非線性方程組的內容,主要的原理是把一個二元非線性方程組的每一個表達式(可以看作是隱函數)進行顯化,將某個未知數變量使用一個函數來表示,代入另一個方程,求解出一個未知數之后,再代回原來的方程,求解出另一個未知數。
電卓院亜紀良:fx-991CN X非線性方程組的求解應用?zhuanlan.zhihu.com本次我們以一個形式上比較簡單的非線性方程組
為例進行講解。能夠直接求解二元非線性方程組的計算器當然是有的,不過都是帶有CAS功能的圖形計算器。例如TI-Nspire CX CAS,其SOLVE指令可以直接計算,也可以通過圖形的方法來求解。
不過,我們這里要講的當然不是這種方法,畢竟帶有CAS功能的計算器的用戶不多,大多數圖形計算器或可編程計算器都沒有CAS功能,然而二元非線性方程組又是經常需要求解的方程類型之一,所以我們考慮通過編程的方式,來實現對任意的二元非線性方程組的求解。
從圖形解法到程序解法
一般的圖形計算器如果要采用圖形解法,也必須把方程進行顯化。方程的顯化難度視方程的復雜程度有所不同,如果遇到顯化比較麻煩的方程,這種方法也比較吃力。例如示例中的方程,將其顯化之后,就要在圖形計算器上輸入三個表達式:
然后對這三個表達式進行繪圖,再求交點,就像這樣:
圖形方法雖然直觀,但仍然需要對方程進行顯化,如果能夠按照方程組的形式直接輸入,求解的效率就大幅提高了。我們知道,fx-991CN X的SOLVE功能是使用牛頓法求解的。實際上對于二元非線性方程組,同樣可以使用牛頓法進行求解。
【求解原理】二元非線性方程組的牛頓迭代法
設有非線性方程組
,記雅可比行列式 ,那么有 , 。在程序中實現的時候,偏導數用數值方法計算,這樣就可以避免求導函數的計算。
例如計算
,令 ,然后計算 即可,其中 取一個很小的正數。程序求解算法
為保護求解程序不被修改,僅作為調用入口使用,我們將求解程序和方程組分別用兩個程序文件編寫,其中求解程序命名為“SOLVE2”,方程組程序命名為“EQN2”。不同的計算器程序語法略有不同,此處提供通用的版本(接近CASIO計算器的類BASIC語言),實際編寫時需要根據使用的計算器修改。
求解程序【SOLVE2】
"X0="?→A:"Y0="?→B:1E-5→S(指定求解的初始值,以及求導時的增量)
If A=0:Then S→A:IfEnd
If B=0:Then S→B:IfEnd(為解決第一次迭代時指定初始值(0, 0)讓迭代條件中的A和B報錯)
Lbl 0(設置標簽)
A→X:B→Y
Prog "EQN2"(計算u和v)
P→G:Q→H
A+S→X:B→Y
Prog "EQN2"
(P-G)÷S→I:(Q-H)÷S→J(計算u和v對x的偏導數)
A→X:B+S→Y
Prog "EQN2"
(P-G)÷S→K:(Q-H)÷S→L(計算u和v對y的偏導數)
If Abs((IL-JK)^(-1)×(KH-GL)÷A)<1E-10 And Abs((IL-JK)^(-1)×(GJ-HI)÷B)<1E-10(迭代終止條件)
Then
"X=":A◢
"Y=":B◢
"END"
Else
A+(IL-JK)^(-1)×(KH-GL)→A(迭代u)
B+(IL-JK)^(-1)×(GJ-HI)→B(迭代v)
Goto 0(返回標簽)
IfEnd方程組程序【EQN2】
X^3+Y^3-4→P(計算函數u(x,y)的值)
X^4+Y^2-3→Q(計算函數v(x,y)的值)程序運行效果
這一程序每次使用時僅需要改變EQN2里面的程序內容,即修改方程,但要注意方程的形式一定要是等號的一側是0,然后只需要輸入方程另一側的內容。運行程序時,為x和y賦值初始迭代值,等待求解即可。如果方程組有多個解,可以嘗試多次運行程序,為x和y賦不同的初始值,得到不同的解。
例如指定初始值(1, 1),得到的解為x=0.9676,y=1.4572,與圖形解法一致。
總結
二元非線性方程組的求解是經常遇到的一類問題之一,使用可編程計算器或者圖形計算器,運用牛頓法的原理,即可編寫出實用的求解程序,不再需要進行方程的顯化計算,提高了解決理論或實際問題的效率。這一實例再一次體現可編程計算器的潛力之巨大。
總結
以上是生活随笔為你收集整理的c语言 栈求解表达式_非线性方程组的编程求解方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机贴膜哪种好?
- 下一篇: mysql数据库查询全部信息_mysql