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语言 栈求解表达式_非线性方程组的编程求解方法相关推荐
- matlab非线性方程组求解得到矩阵,非线性方程组求解——附Matlab原程序
在科学与工程计算中,经常遇到求解非线性方程组的问题:非线性方程组在收敛速度及收敛性比线性方程组要差,特别对于非凸的非线性方程组,其求解更是困难.下面简要介绍非线性方程组的三种解法--牛顿法.拟牛顿法. ...
- MATLAB求解非线性方程组的五种方法
MATLAB求解非线性方程组的五种方法 求解线性方程分为两种方法–二分法和迭代法 常见的方法一共有5种 二分法 迭代法 牛顿法 割线法 拟牛顿法 Halley法 使用条件 二分法需要知道两个自变量,分 ...
- matlab符号对象作用是什么,Matlab符号对象在求解多维非线性方程组中的应用研究...
第22卷第5襄2∞5串5月 诗箕筑藏瘸毒教箨 e.mpu潴A弼趣ationsa撞dS薅轷8re V建.22,器o,5 酝8v2∞5 麓鼗接曲符号爻孪象在求释多维葺羹线性方程组孛的应用研究 冀杰絷 f湖 ...
- python解非线性方程组_python scipy求解非线性方程的方法(fsolve/root)
使用scipy.optimize模块的root和fsolve函数进行数值求解线性及非线性方程,下面直接贴上代码,代码很简单 from scipy.integrate import odeint imp ...
- 割线法求解过程_潮流方程的割线法求解
潮流方程的割线法求解 赵 泽,何飞跃 [摘 要] 摘要:电力系统潮流分析是研究电力系统稳定的重要手段,通过数值 仿真的方法把电力系统的详细运行状态呈现给运行人员,以便了解给定条件下 电力系统的稳定运行 ...
- matlab求解多项式系数,C++和MATLAB混合编程求解多项式系数(矩阵相除)
摘要:MATLAB对于矩阵处理是非常高效的,而C++对于矩阵操作是非常麻烦的,因而可以采用C++与MATLAB混合编程求解矩阵问题. 主要思路就是,在MATLAB中编写函数脚本并使用C++编译为dll ...
- java语言编写简易表达式_将简单的表达语言放入Java
小编典典 您可以看到如何传递所有参数: ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = m ...
- 用matlab解非线性方程组,用matlab求解非线性方程组,
共回答了17个问题采纳率:76.5% matlab源程序为: S=solve('x1-(7+x2^2+4*x3)/12=0','x2-(11-x1^2+x3)/10=0','x3-(8-x2^3)/1 ...
- python如何求解微分方程_常微分方程数值解:Python求解
这里对使用python求解常微分方程提供两种思路,一种是自己编程实现欧拉法,改进欧拉法或者四阶龙格库塔,这样有助于理解上述三种数值计算方法的原理:一种是调用python已有的库,不再重复造轮子. 本文 ...
最新文章
- 分组显示的ListView分页加载数据
- apple tv设置_如何设置Apple TV播放个人iTunes库
- eclipse 安装包下载
- ORAN专题系列-20:5G O-RAN 通过TR-069协议实现一体化小基站的自动配置和安装
- c语言中如何输出字节数组,C语言中数组所占字节怎么算
- bat 删除文件脚本
- pycharm报错The directory *** is registered as a Git root与 Can't start Git: git.exe
- python抢票脚本github_GitHub标星超12K,抢票神器大更新,支持候补!
- PDF怎么合并?这些合并方法你该知道
- 1000句英语经典口语(4)
- Unity ShaderGraph图片发光效果
- python 天天基金数据接口
- Tomcat 学习笔记
- 2021年北航计算机学院夏令营面试经历
- 电脑手机二合一 华为云电脑你办公的好助手 最适合上班族
- 交叉编译工具的使用说明
- 安徽信息技术初中会考上机考试模拟_初中会考信息技术考试模拟试题一
- Java版工程行业管理系统源码-专业的工程管理软件-提供一站式服务
- C语言冒泡排序的优化(图解+代码)
- 亚信安全服务器深度安全防护系统怎么样,亚信安全服务器深度安全防护系统即服务(DSaaS)为云端用户筑起安全壁垒...
热门文章
- 使用Servlet完成单表的CRUD
- 2021年大数据Spark(四十四):Structured Streaming概述
- CSS grid 的用法
- 百度地图android室内定位,百度地图4.0正式发布,主打免费语音导航、室内定位、实时公交和生活搜索 (视频)...
- python 中 (按位与) 和 | (按位或)
- linux epoll用法
- Go 学习笔记(41)— Go 标准库之 encoding/base64 (编解码)
- Java学习笔记45:Java 线程与主线程之间的变量关系
- ASP.NET中 RequiredFieldValidator(非空验证)的使用
- 计算机二级函数知识,2017年全国计算机二级考试MS Office高级应用知识点:INDIRECT函数...