急!!如何用matlab语言编写一个用牛顿迭代法求解经过有限差分法处理过的非线性方程组

一个经过有限差分法处理的非线性方程组 比如说变量是x,y,z 但这些变量在方程组里是x(k)x(k-1)等这样表示的 比如说x(k)-x(k-1)-y(k)+z(k)=0 这样的一个方程组用牛顿迭代法解 如何编写代码 方程组 雅克比矩阵如何表示 望高人指点 最好举个列子(有代码)

第1个回答  2013-08-16

程序很简单的,有点基础的都能编。但是有一个点必须提醒你,Jacobe矩阵的计算。

两种方法:

    解析Jacobe。就是需要你具体的研究非线性方程组的解析表达式,通过求导的方法,得到解析表示的Jacobe矩阵。

    数值Jacobe。不需要具体研究方程组的解析式,只需要一个知道输入输出关系的黑盒子。先输入一个x0,得到y0,再输入x0+dx,得到y1,dy/dx=(y1-y0)/dx,dx很小,取10E-6即可,用割线斜率代替导数。

两种给你方法都是常用的办法,各有利弊。

追问

不好意思 可能我说的不太清楚 牛顿迭代法我懂 问题是我不知道如何用matlab语言将方程组 雅克比矩阵 以及变量编写出来 最好举个近似的实例

追答

你用matlab做2个子程序function,分别用来计算函数值和雅克比,牛顿迭代法是主程序

追问

两个function子程序我都知道 普通的牛顿迭代法解非线性方程组 我也会编写(变量x,y,z就单独的变量 而在方程式中没有x(k),x(k+1)等之类的) 我不知道如何编写我这样的 变量x 在方程式中就有x(k) x(k+1) x(k-1) y z 也是如x这样

追答

你得确定x(k-1),x(k),x(k+1)哪个是未知量,哪个是已知量。一般来说,取x(k+1)为未知量,那么x(k),x(k-1)都是历史量,都是已知的,只需要查找内存记录。迭代计算只要关心未知量就可以了。
需要提醒你一下,做二阶以上的积分时,需要做计算启动。因为你输入的初值,只能给出一个x(0),还需要由初始的导数,倒退估算一个x(-1)。这个估算一般就是线性估算了,精度足够。有了x(-1),x(0),你才能计算x(1)。

追问

举个例子吧(要代码) 说了这么多 看不懂

追答

兄弟,写这类代码是要花钱的~~

追问

钱不是问题 问题是你能不能解决问题

追答

我们就是专门做求解器的

第2个回答  2016-08-01
你的问题解决了吗

matlab数值计算案例分析的目录
第1章MATLAB编程基础11.1 矩阵的基本操作与基本运算11.1.1 矩阵的基本操作11.1.2 矩阵的基本运算21.1.3 *与 .*和\/与.\/ 的区别31.1.4 使用find函数索引符合某些特定条件的矩阵元素31.1.5 eps函数与避免除以0的方法41.2 MATLAB的数据结构41.3 变量、脚本与函数81.3.1 变 量81.3.2 ...

相似回答