24小时热门版块排行榜    

查看: 3026  |  回复: 13
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

309065816

木虫 (正式写手)

[求助] 请教高手,如何解非线性方程组!!! 已有1人参与

(1)D*(c-x)-k1*x*(1-y-z)+k01*y-k4*x*z+k5*z=0
(2)k1*x*(1-y-z)-k01*y-k2*y+k02*z-k3*y*z=0
(3)k2*y-k02*z+k3*y*z-k4*x*z-k5*z=0
上述方程组中,D,k1~k5均为一些变量参数,想得到x,y,z关于这些参数的表达式。
想通过代入消元或者其他方法将上述方程化为一元多次方程的形式。例如,将y,z用x表示,最终将方程化为关于x的一元多次方程。
我自己计算过,由于方程中含有一些相同项,通过将(1)(2)(3)式相加得到,z关于x的表达式;
将(1)(2)相加,再将z关于x的表达式代入,可得到y关于x的表达式;
再将上述y.z关于x的表达式代入到(3)中,结果为0,没有得到关于x的表达式。
上述过程应该是有问题的,但是具体问题不知道在哪?正确的做法应该是怎么样的?
想问下具体的过程该是怎么样的?
我最终想要的就是将上述3个方程化为一个一元多次方程,请高手指点一下!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

309065816

木虫 (正式写手)

引用回帖:
13楼: Originally posted by cooooldog at 2014-07-28 12:23:54
非线性方程组的求解有很多方法.
楼主你这种规模的问题从数值数学的角度根本不是一个问题.

1.你对精度的要求到底有多高?双精度还不够吗?

2.如果所有系数都已知,用mathematica的NSolve[]很容易求解;

如果为 ...

1、我用matlab计算都是双精度的。但是算出来的x,y,z带回原方程后的结果不为0,大概数量级在-15次方左右,但是按照matlab里面的精度eps=2.2*10-16,所以认为解出来的解不准确。
2、因为要循环赋值,不单单只有一组参数值,所以还是需要求出一个具体的表达式,在MATLAB中进行编程作为子函数进行调用,循环对参数赋值
3、求出解只是我主程序里的一小部分,所以我的一些计算基本要在MATLAB里面进行,或者可以跟MATLAB互通的一些软件。但是这些就更不懂了。我对MATLAB也最多就模仿着写几句程序,多了就不会了。
你说的其他的只听过没接触过,惭愧了!
14楼2014-07-29 12:57:08
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 14 个回答

309065816

木虫 (正式写手)

根据要求,希望能够手动推导得出一元多次方程,matlab中的solve函数求解精度不能满足要求,且存在问题
2楼2014-07-01 20:47:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

peterflyer

木虫之王 (文学泰斗)

peterflyer


【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
309065816: 金币+10, ★有帮助, 好的,谢谢了,我先试试,对的话会再给金币的。 2014-07-01 21:15:31
309065816: 金币+10 2014-07-08 12:54:26
先将x看作常量,通过(1)、(2)解得y=y(x)、z=z(x),再代入(3),这样就应该不会出现楼主述及的问题了。如果这样做仍会出现楼主遇到的问题,那只能说明这三个方程不是相互独立的,至少一个方程会有另外两个推出。这样一来,方程组的解如果存在的话就会有无穷多个。
3楼2014-07-01 21:12:10
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hank612

至尊木虫 (著名写手)

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
309065816(feixiaolin代发): 金币+10 2014-07-09 19:58:01
用 Mathematica 的Groebner Basis 功能吧, 一步到位
自己google它的原理, 反正到处都是
请教高手,如何解非线性方程组!!!
Emuch018.png

We_must_know. We_will_know.
4楼2014-07-02 10:27:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见